summaryrefslogtreecommitdiff
path: root/node/Topology.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/Topology.cpp')
-rw-r--r--node/Topology.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/node/Topology.cpp b/node/Topology.cpp
index e36a0609..dc21b243 100644
--- a/node/Topology.cpp
+++ b/node/Topology.cpp
@@ -29,6 +29,8 @@
#include "Topology.hpp"
#include "RuntimeEnvironment.hpp"
#include "Node.hpp"
+#include "Network.hpp"
+#include "NetworkConfig.hpp"
#include "Buffer.hpp"
namespace ZeroTier {
@@ -283,6 +285,23 @@ keep_searching_for_roots:
return bestRoot;
}
+bool Topology::isUpstream(const Identity &id) const
+{
+ if (isRoot(id))
+ return true;
+ std::vector< SharedPtr<Network> > nws(RR->node->allNetworks());
+ for(std::vector< SharedPtr<Network> >::const_iterator nw(nws.begin());nw!=nws.end();++nw) {
+ SharedPtr<NetworkConfig> nc((*nw)->config2());
+ if (nc) {
+ for(std::vector< std::pair<Address,InetAddress> >::const_iterator r(nc->relays().begin());r!=nc->relays().end();++r) {
+ if (r->first == id.address())
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
bool Topology::worldUpdateIfValid(const World &newWorld)
{
Mutex::Lock _l(_lock);