summaryrefslogtreecommitdiff
path: root/node/Topology.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-02-02 16:23:26 -0800
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-02-02 16:23:26 -0800
commit37d23336edb2128621b41eb7975c2bb5ddc9c4c1 (patch)
tree736049f1984cbea2d982e63b08a9697937783a17 /node/Topology.cpp
parent61cff47f5b9c8071c7f97947032a06250099f418 (diff)
downloadinfinitytier-37d23336edb2128621b41eb7975c2bb5ddc9c4c1.tar.gz
infinitytier-37d23336edb2128621b41eb7975c2bb5ddc9c4c1.zip
Surface logic in Topology.
Diffstat (limited to 'node/Topology.cpp')
-rw-r--r--node/Topology.cpp18
1 files changed, 18 insertions, 0 deletions
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<Peer> &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<Peer> >::const_iterator ap(_activePeers.begin());ap!=_activePeers.end();++ap)
+ ap->second->clearPaths(false);
+
+ return true;
+ }
+
+ return false;
+}
+
bool Topology::authenticateRootTopology(const Dictionary &rt)
{
try {