From eeed31b39639df7e89a2e8ae641d0c3939fa4078 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 2 Feb 2015 17:02:23 -0800 Subject: Ping supernodes on surface change, and also reset TCP flag. --- node/Topology.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'node/Topology.cpp') diff --git a/node/Topology.cpp b/node/Topology.cpp index dd041007..d0299108 100644 --- a/node/Topology.cpp +++ b/node/Topology.cpp @@ -258,7 +258,7 @@ void Topology::clean(uint64_t now) } } -bool Topology::updateSurface(const SharedPtr &remotePeer,const InetAddress &mirroredAddress) +bool Topology::updateSurface(const SharedPtr &remotePeer,const InetAddress &mirroredAddress,uint64_t now) { Mutex::Lock _l(_lock); @@ -266,10 +266,20 @@ bool Topology::updateSurface(const SharedPtr &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 >::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 (RR))->tcpTunnelingEnabled = false; + + // Ping supernodes now (other than the one we might have just heard from) + for(std::vector< SharedPtr >::const_iterator sn(_supernodePeers.begin());sn!=_supernodePeers.end();++sn) { + if (remotePeer != *sn) + (*sn)->sendPing(RR,now); + } + return true; } -- cgit v1.2.3