diff options
Diffstat (limited to 'node/Network.hpp')
-rw-r--r-- | node/Network.hpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/node/Network.hpp b/node/Network.hpp index 1b74a048..ecee77c1 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -203,7 +203,7 @@ public: inline void pushMembershipCertificate(const Address &peer,bool force,uint64_t now) { Mutex::Lock _l(_lock); - if ((_config)&&(!_config->isOpen())) + if ((_config)&&(!_config->isOpen())&&(_config->com())) _pushMembershipCertificate(peer,force,now); } @@ -214,15 +214,17 @@ public: * len is reached or a null address is encountered. * * @param peers Packed array of 5-byte big-endian addresses - * @param len Length of peers[] in total, MUST be a multiple of 5 + * @param len Length of peers[] in total (bytes, not addresses) * @param force If true, push even if we've already done so within required time frame * @param now Current time */ inline void pushMembershipCertificate(const void *peers,unsigned int len,bool force,uint64_t now) { Mutex::Lock _l(_lock); - if ((_config)&&(!_config->isOpen())) { + if ((_config)&&(!_config->isOpen())&&(_config->com())) { for(unsigned int i=0;i<len;i+=ZT_ADDRESS_LENGTH) { + if ((i + ZT_ADDRESS_LENGTH) > len) + break; Address a((char *)peers + i,ZT_ADDRESS_LENGTH); if (a) _pushMembershipCertificate(a,force,now); |