summaryrefslogtreecommitdiff
path: root/src/DHTMessageTracker.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-01-07 00:20:58 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-01-07 00:20:58 +0900
commit2dba2f86a43414d706287a5a0fa12aa6573a59d2 (patch)
tree8d6f5bb6ef6b4e26281a2ca1131904b01b3442ef /src/DHTMessageTracker.cc
parent653951f70aeca5dac555efb623e2eaf6bbbca47f (diff)
Drop old node from DHT routing table if node ID has changed.
Diffstat (limited to 'src/DHTMessageTracker.cc')
-rw-r--r--src/DHTMessageTracker.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/DHTMessageTracker.cc b/src/DHTMessageTracker.cc
index 7709165e..d93c8213 100644
--- a/src/DHTMessageTracker.cc
+++ b/src/DHTMessageTracker.cc
@@ -90,6 +90,16 @@ DHTMessageTracker::messageArrived
A2_LOG_DEBUG(fmt("RTT is %s", util::itos(rtt).c_str()));
message->getRemoteNode()->updateRTT(rtt);
SharedHandle<DHTMessageCallback> callback = entry->getCallback();
+ if(!(*targetNode == *message->getRemoteNode())) {
+ // Node ID has changed. Drop previous node ID from
+ // DHTRoutingTable
+ A2_LOG_DEBUG
+ (fmt("Node ID has changed: old:%s, new:%s",
+ util::toHex(targetNode->getID(), DHT_ID_LENGTH).c_str(),
+ util::toHex(message->getRemoteNode()->getID(),
+ DHT_ID_LENGTH).c_str()));
+ routingTable_->dropNode(targetNode);
+ }
return std::make_pair(message, callback);
} catch(RecoverableException& e) {
handleTimeoutEntry(entry);