diff options
Diffstat (limited to 'src/DHTMessageTracker.cc')
| -rw-r--r-- | src/DHTMessageTracker.cc | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/DHTMessageTracker.cc b/src/DHTMessageTracker.cc index ebbc8a9e..ed15f322 100644 --- a/src/DHTMessageTracker.cc +++ b/src/DHTMessageTracker.cc @@ -84,19 +84,24 @@ DHTMessageTracker::messageArrived logger_->debug("Tracker entry found."); } SharedHandle<DHTNode> targetNode = entry->getTargetNode(); + try { + SharedHandle<DHTResponseMessage> message = + factory_->createResponseMessage(entry->getMessageType(), dict, + targetNode->getIPAddress(), + targetNode->getPort()); - SharedHandle<DHTResponseMessage> message = - factory_->createResponseMessage(entry->getMessageType(), dict, - targetNode->getIPAddress(), - targetNode->getPort()); - - int64_t rtt = entry->getElapsedMillis(); - if(logger_->debug()) { - logger_->debug("RTT is %s", util::itos(rtt).c_str()); + int64_t rtt = entry->getElapsedMillis(); + if(logger_->debug()) { + logger_->debug("RTT is %s", util::itos(rtt).c_str()); + } + message->getRemoteNode()->updateRTT(rtt); + SharedHandle<DHTMessageCallback> callback = entry->getCallback(); + return std::make_pair(message, callback); + } catch(RecoverableException& e) { + entry->getCallback()->onTimeout(targetNode); + return std::pair<SharedHandle<DHTResponseMessage>, + SharedHandle<DHTMessageCallback> >(); } - message->getRemoteNode()->updateRTT(rtt); - SharedHandle<DHTMessageCallback> callback = entry->getCallback(); - return std::make_pair(message, callback); } } if(logger_->debug()) { |
