diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-11-13 12:40:51 -0800 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-11-13 12:40:51 -0800 |
commit | 7b6f10e8591c31e6e145545c3578eda05d5b732c (patch) | |
tree | 6f599df737dbb324065ff6ad9caea349c94a7a56 /node | |
parent | c61e9c0ef955e444a4271006e347e56cd717f2f8 (diff) | |
download | infinitytier-7b6f10e8591c31e6e145545c3578eda05d5b732c.tar.gz infinitytier-7b6f10e8591c31e6e145545c3578eda05d5b732c.zip |
Optimization: we don't need to verify signatures on certs if they're certs we already have and have verified.
Diffstat (limited to 'node')
-rw-r--r-- | node/Network.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/node/Network.cpp b/node/Network.cpp index 2b9d59e1..ed2d13ba 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -311,6 +311,14 @@ void Network::addMembershipCertificate(const CertificateOfMembership &cert,bool if (!cert) // sanity check return; + Mutex::Lock _l(_lock); + CertificateOfMembership &old = _membershipCertificates[cert.issuedTo()]; + + // Nothing to do if the cert hasn't changed -- we get duplicates due to zealous cert pushing + if (old == cert) + return; + + // Check signature, log and return if cert is invalid if (!forceAccept) { if (cert.signedBy() != controller()) { LOG("rejected network membership certificate for %.16llx signed by %s: signer not a controller of this network",(unsigned long long)_id,cert.signedBy().toString().c_str()); @@ -332,9 +340,7 @@ void Network::addMembershipCertificate(const CertificateOfMembership &cert,bool } } - Mutex::Lock _l(_lock); - - CertificateOfMembership &old = _membershipCertificates[cert.issuedTo()]; + // If we made it past authentication, update cert if (cert.timestamp() >= old.timestamp()) old = cert; } |