diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-02-02 16:23:26 -0800 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-02-02 16:23:26 -0800 |
| commit | 37d23336edb2128621b41eb7975c2bb5ddc9c4c1 (patch) | |
| tree | 736049f1984cbea2d982e63b08a9697937783a17 /node/Topology.cpp | |
| parent | 61cff47f5b9c8071c7f97947032a06250099f418 (diff) | |
| download | infinitytier-37d23336edb2128621b41eb7975c2bb5ddc9c4c1.tar.gz infinitytier-37d23336edb2128621b41eb7975c2bb5ddc9c4c1.zip | |
Surface logic in Topology.
Diffstat (limited to 'node/Topology.cpp')
| -rw-r--r-- | node/Topology.cpp | 18 |
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 { |
