summaryrefslogtreecommitdiff
path: root/node/Network.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/Network.hpp')
-rw-r--r--node/Network.hpp8
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);