summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node/Peer.hpp17
-rw-r--r--node/SelfAwareness.cpp4
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);