From 37d23336edb2128621b41eb7975c2bb5ddc9c4c1 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 2 Feb 2015 16:23:26 -0800 Subject: Surface logic in Topology. --- node/Topology.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'node/Topology.cpp') diff --git a/node/Topology.cpp b/node/Topology.cpp index 3f4043da..dd041007 100644 --- a/node/Topology.cpp +++ b/node/Topology.cpp @@ -258,6 +258,24 @@ void Topology::clean(uint64_t now) } } +bool Topology::updateSurface(const SharedPtr &remotePeer,const InetAddress &mirroredAddress) +{ + Mutex::Lock _l(_lock); + + if (std::find(_supernodeAddresses.begin(),_supernodeAddresses.end(),remotePeer->address()) == _supernodeAddresses.end()) + return false; + + if (_surface.update(mirroredAddress)) { + // Clear non-fixed paths for all peers + for(std::map< Address,SharedPtr >::const_iterator ap(_activePeers.begin());ap!=_activePeers.end();++ap) + ap->second->clearPaths(false); + + return true; + } + + return false; +} + bool Topology::authenticateRootTopology(const Dictionary &rt) { try { -- cgit v1.2.3