Automagically push netconf certs -- Network support.
This commit is contained in:
parent
b4ae1adfbf
commit
4d594b24bc
5 changed files with 125 additions and 30 deletions
|
@ -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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue