diff options
-rw-r--r-- | node/Peer.hpp | 17 | ||||
-rw-r--r-- | node/SelfAwareness.cpp | 4 |
2 files changed, 20 insertions, 1 deletions
diff --git a/node/Peer.hpp b/node/Peer.hpp index 4bea101b..ba02bfca 100644 --- a/node/Peer.hpp +++ b/node/Peer.hpp @@ -183,6 +183,23 @@ public: void attemptToContactAt(const RuntimeEnvironment *RR,const InetAddress &atAddress,unsigned int linkDesperation,uint64_t now); /** + * Send a HELLO to all active direct paths + * + * @param RR Runtime environment + * @param now Current time + */ + inline void ping(const RuntimeEnvironment *RR,uint64_t now) + { + unsigned int np = _numPaths; + for(unsigned int p=0;p<np;++p) { + if (_paths[p].active(now)) { + attemptToContactAt(RR,_paths[p].address(),_paths[p].desperation(now),now); + _paths[p].sent(now); + } + } + } + + /** * @return All known direct paths to this peer */ std::vector<Path> paths() const diff --git a/node/SelfAwareness.cpp b/node/SelfAwareness.cpp index 951c65e8..db0c5595 100644 --- a/node/SelfAwareness.cpp +++ b/node/SelfAwareness.cpp @@ -78,7 +78,9 @@ void SelfAwareness::iam(const InetAddress &reporterPhysicalAddress,const InetAdd else { Mutex::Lock _l(_lock); InetAddress &lastPhy = _lastPhysicalAddress[scope - 1]; - if ((lastPhy)&&(lastPhy != myPhysicalAddress)) { + if (!lastPhy) { + lastPhy = myPhysicalAddress; + } else if (lastPhy != myPhysicalAddress) { lastPhy = myPhysicalAddress; _ResetWithinScope rset(RR,RR->node->now(),(InetAddress::IpScope)scope); RR->topology->eachPeer<_ResetWithinScope &>(rset); |