summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-07 12:32:05 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-07 12:32:05 -0700
commit0a906818494814f308f1c6a0c208aa8ed76ef52a (patch)
treed1e012b6fe514282adbc8ec203333b53deab2f19
parent24608d5ca300762ad3f6df34ea277ecc8ddbf6f6 (diff)
downloadinfinitytier-0a906818494814f308f1c6a0c208aa8ed76ef52a.tar.gz
infinitytier-0a906818494814f308f1c6a0c208aa8ed76ef52a.zip
Add ping(), and a logic fix in SelfAwareness.
-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);