|
@@ -213,31 +213,25 @@ void Cluster::handleIncomingStateMessage(const void *msg,unsigned int len)
|
|
|
} break;
|
|
|
|
|
|
case STATE_MESSAGE_HAVE_PEER: {
|
|
|
- const uint64_t now = RR->node->now();
|
|
|
- Identity id;
|
|
|
+ const Address zeroTierAddress(dmsg.field(ptr,ZT_ADDRESS_LENGTH),ZT_ADDRESS_LENGTH); ptr += ZT_ADDRESS_LENGTH;
|
|
|
InetAddress physicalAddress;
|
|
|
- ptr += id.deserialize(dmsg,ptr);
|
|
|
ptr += physicalAddress.deserialize(dmsg,ptr);
|
|
|
- if (id) {
|
|
|
- // Forget any paths that we have to this peer at its address
|
|
|
- if (physicalAddress) {
|
|
|
- SharedPtr<Peer> myPeerRecord(RR->topology->getPeerNoCache(id.address(),now));
|
|
|
- if (myPeerRecord)
|
|
|
- myPeerRecord->removePathByAddress(physicalAddress);
|
|
|
- }
|
|
|
|
|
|
- // Always save identity to update file time
|
|
|
- RR->topology->saveIdentity(id);
|
|
|
-
|
|
|
- // Set peer affinity to its new home
|
|
|
- {
|
|
|
- Mutex::Lock _l2(_peerAffinities_m);
|
|
|
- _PA &pa = _peerAffinities[id.address()];
|
|
|
- pa.ts = now;
|
|
|
- pa.mid = fromMemberId;
|
|
|
- }
|
|
|
- TRACE("[%u] has %s @ %s",(unsigned int)fromMemberId,id.address().toString().c_str(),physicalAddress.toString().c_str());
|
|
|
- }
|
|
|
+ // Forget any paths that we have to this peer at its address
|
|
|
+ if (physicalAddress) {
|
|
|
+ SharedPtr<Peer> myPeerRecord(RR->topology->getPeerNoCache(zeroTierAddress));
|
|
|
+ if (myPeerRecord)
|
|
|
+ myPeerRecord->removePathByAddress(physicalAddress);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Set peer affinity to its new home
|
|
|
+ {
|
|
|
+ Mutex::Lock _l2(_peerAffinities_m);
|
|
|
+ _PA &pa = _peerAffinities[zeroTierAddress];
|
|
|
+ pa.ts = RR->node->now();
|
|
|
+ pa.mid = fromMemberId;
|
|
|
+ }
|
|
|
+ TRACE("[%u] has %s @ %s",(unsigned int)fromMemberId,id.address().toString().c_str(),physicalAddress.toString().c_str());
|
|
|
} break;
|
|
|
|
|
|
case STATE_MESSAGE_MULTICAST_LIKE: {
|
|
@@ -270,7 +264,7 @@ void Cluster::handleIncomingStateMessage(const void *msg,unsigned int len)
|
|
|
TRACE("[%u] requested that we unite local %s with remote %s",(unsigned int)fromMemberId,localPeerAddress.toString().c_str(),remotePeerAddress.toString().c_str());
|
|
|
|
|
|
const uint64_t now = RR->node->now();
|
|
|
- SharedPtr<Peer> localPeer(RR->topology->getPeerNoCache(localPeerAddress,now));
|
|
|
+ SharedPtr<Peer> localPeer(RR->topology->getPeerNoCache(localPeerAddress));
|
|
|
if ((localPeer)&&(numRemotePeerPaths > 0)) {
|
|
|
InetAddress bestLocalV4,bestLocalV6;
|
|
|
localPeer->getBestActiveAddresses(now,bestLocalV4,bestLocalV6);
|
|
@@ -380,7 +374,7 @@ bool Cluster::sendViaCluster(const Address &fromPeerAddress,const Address &toPee
|
|
|
if (unite) {
|
|
|
InetAddress v4,v6;
|
|
|
if (fromPeerAddress) {
|
|
|
- SharedPtr<Peer> fromPeer(RR->topology->getPeerNoCache(fromPeerAddress,now));
|
|
|
+ SharedPtr<Peer> fromPeer(RR->topology->getPeerNoCache(fromPeerAddress));
|
|
|
if (fromPeer)
|
|
|
fromPeer->getBestActiveAddresses(now,v4,v6);
|
|
|
}
|
|
@@ -428,9 +422,8 @@ void Cluster::replicateHavePeer(const Identity &peerId,const InetAddress &physic
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // announcement
|
|
|
- Buffer<4096> buf;
|
|
|
- peerId.serialize(buf,false);
|
|
|
+ Buffer<1024> buf;
|
|
|
+ peerId.address().appendTo(buf);
|
|
|
physicalAddress.serialize(buf);
|
|
|
{
|
|
|
Mutex::Lock _l(_memberIds_m);
|