|
|
|
|
@ -258,7 +258,7 @@ void Topology::clean(uint64_t now)
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool Topology::updateSurface(const SharedPtr<Peer> &remotePeer,const InetAddress &mirroredAddress) |
|
|
|
|
bool Topology::updateSurface(const SharedPtr<Peer> &remotePeer,const InetAddress &mirroredAddress,uint64_t now) |
|
|
|
|
{ |
|
|
|
|
Mutex::Lock _l(_lock); |
|
|
|
|
|
|
|
|
|
@ -266,10 +266,20 @@ bool Topology::updateSurface(const SharedPtr<Peer> &remotePeer,const InetAddress
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
if (_surface.update(mirroredAddress)) { |
|
|
|
|
// Clear non-fixed paths for all peers
|
|
|
|
|
// Clear non-fixed paths for all peers -- will force reconnect on next activity
|
|
|
|
|
for(std::map< Address,SharedPtr<Peer> >::const_iterator ap(_activePeers.begin());ap!=_activePeers.end();++ap) |
|
|
|
|
ap->second->clearPaths(false); |
|
|
|
|
|
|
|
|
|
// Reset TCP tunneling if our global addressing has changed
|
|
|
|
|
if (!mirroredAddress.isLinkLocal()) |
|
|
|
|
(const_cast <RuntimeEnvironment *>(RR))->tcpTunnelingEnabled = false; |
|
|
|
|
|
|
|
|
|
// Ping supernodes now (other than the one we might have just heard from)
|
|
|
|
|
for(std::vector< SharedPtr<Peer> >::const_iterator sn(_supernodePeers.begin());sn!=_supernodePeers.end();++sn) { |
|
|
|
|
if (remotePeer != *sn) |
|
|
|
|
(*sn)->sendPing(RR,now); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|