|
|
|
|
@ -536,37 +536,35 @@ int Cluster::prepSendViaCluster(const Address &toPeerAddress,void *peerSecret)
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (mostRecentMemberId >= 0) { |
|
|
|
|
const uint64_t ageOfMostRecentHavePeerAnnouncement = now - mostRecentTs; |
|
|
|
|
if (ageOfMostRecentHavePeerAnnouncement >= (ZT_PEER_ACTIVITY_TIMEOUT / 3)) { |
|
|
|
|
if (ageOfMostRecentHavePeerAnnouncement >= ZT_PEER_ACTIVITY_TIMEOUT) |
|
|
|
|
return -1; |
|
|
|
|
const uint64_t ageOfMostRecentHavePeerAnnouncement = now - mostRecentTs; |
|
|
|
|
if (ageOfMostRecentHavePeerAnnouncement >= (ZT_PEER_ACTIVITY_TIMEOUT / 3)) { |
|
|
|
|
if (ageOfMostRecentHavePeerAnnouncement >= ZT_PEER_ACTIVITY_TIMEOUT) |
|
|
|
|
mostRecentMemberId = -1; |
|
|
|
|
|
|
|
|
|
bool sendWantPeer = true; |
|
|
|
|
{ |
|
|
|
|
Mutex::Lock _l(_remotePeers_m); |
|
|
|
|
_RemotePeer &rp = _remotePeers[std::pair<Address,unsigned int>(toPeerAddress,(unsigned int)_id)]; |
|
|
|
|
if ((now - rp.lastSentWantPeer) >= ZT_CLUSTER_WANT_PEER_EVERY) { |
|
|
|
|
rp.lastSentWantPeer = now; |
|
|
|
|
} else { |
|
|
|
|
sendWantPeer = false; // don't flood WANT_PEER
|
|
|
|
|
} |
|
|
|
|
bool sendWantPeer = true; |
|
|
|
|
{ |
|
|
|
|
Mutex::Lock _l(_remotePeers_m); |
|
|
|
|
_RemotePeer &rp = _remotePeers[std::pair<Address,unsigned int>(toPeerAddress,(unsigned int)_id)]; |
|
|
|
|
if ((now - rp.lastSentWantPeer) >= ZT_CLUSTER_WANT_PEER_EVERY) { |
|
|
|
|
rp.lastSentWantPeer = now; |
|
|
|
|
} else { |
|
|
|
|
sendWantPeer = false; // don't flood WANT_PEER
|
|
|
|
|
} |
|
|
|
|
if (sendWantPeer) { |
|
|
|
|
char tmp[ZT_ADDRESS_LENGTH]; |
|
|
|
|
toPeerAddress.copyTo(tmp,ZT_ADDRESS_LENGTH); |
|
|
|
|
{ |
|
|
|
|
Mutex::Lock _l(_memberIds_m); |
|
|
|
|
for(std::vector<uint16_t>::const_iterator mid(_memberIds.begin());mid!=_memberIds.end();++mid) { |
|
|
|
|
Mutex::Lock _l2(_members[*mid].lock); |
|
|
|
|
_send(*mid,CLUSTER_MESSAGE_WANT_PEER,tmp,ZT_ADDRESS_LENGTH); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (sendWantPeer) { |
|
|
|
|
char tmp[ZT_ADDRESS_LENGTH]; |
|
|
|
|
toPeerAddress.copyTo(tmp,ZT_ADDRESS_LENGTH); |
|
|
|
|
{ |
|
|
|
|
Mutex::Lock _l(_memberIds_m); |
|
|
|
|
for(std::vector<uint16_t>::const_iterator mid(_memberIds.begin());mid!=_memberIds.end();++mid) { |
|
|
|
|
Mutex::Lock _l2(_members[*mid].lock); |
|
|
|
|
_send(*mid,CLUSTER_MESSAGE_WANT_PEER,tmp,ZT_ADDRESS_LENGTH); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return mostRecentMemberId; |
|
|
|
|
} else return -1; |
|
|
|
|
return mostRecentMemberId; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool Cluster::sendViaCluster(int mostRecentMemberId,const Address &toPeerAddress,const void *data,unsigned int len) |
|
|
|
|
|