diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-10-07 16:13:52 -0400 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-10-07 16:13:52 -0400 |
| commit | 4d594b24bc992962c125b3c0ff18ad4d670090c3 (patch) | |
| tree | 2bb43d592adf725efa8441e70088b34e2190b65f /node/Network.cpp | |
| parent | b4ae1adfbffecc090357b4e9e5c04ec3b2d3280d (diff) | |
| download | infinitytier-4d594b24bc992962c125b3c0ff18ad4d670090c3.tar.gz infinitytier-4d594b24bc992962c125b3c0ff18ad4d670090c3.zip | |
Automagically push netconf certs -- Network support.
Diffstat (limited to 'node/Network.cpp')
| -rw-r--r-- | node/Network.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/node/Network.cpp b/node/Network.cpp index 911ae998..2d08a91f 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -169,6 +169,30 @@ void Network::addMembershipCertificate(const Address &peer,const CertificateOfMe _membershipCertificates[peer] = cert; } +void Network::pushMembershipCertificate(const Address &peer,bool force,uint64_t now) +{ + Mutex::Lock _l(_lock); + + if (_isOpen) + return; + + uint64_t timestampMaxDelta = _myCertificate.timestampMaxDelta(); + if (!timestampMaxDelta) { + LOG("unable to push my certificate to %s for network %.16llx: certificate invalid, missing required timestamp field",peer.toString().c_str(),_id); + return; // required field missing! + } + + uint64_t &lastPushed = _lastPushedMembershipCertificate[peer]; + if ((force)||((now - lastPushed) > (timestampMaxDelta / 2))) { + lastPushed = now; + + Packet outp(peer,_r->identity.address(),Packet::VERB_NETWORK_MEMBERSHIP_CERTIFICATE); + outp.append((uint64_t)_id); + _myCertificate.serialize(outp); + _r->sw->send(outp,true); + } +} + bool Network::isAllowed(const Address &peer) const { // Exceptions can occur if we do not yet have *our* configuration. |
