mirror of https://github.com/aria2/aria2
2010-08-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Updated malformed message handling. * src/DHTMessageTracker.cc * src/DHTMessageTracker.hpull/1/head
parent
d8e83b3f72
commit
15b29bed15
|
@ -1,3 +1,9 @@
|
|||
2010-08-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Updated malformed message handling.
|
||||
* src/DHTMessageTracker.cc
|
||||
* src/DHTMessageTracker.h
|
||||
|
||||
2010-08-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Evaluate callback is non-null.
|
||||
|
|
|
@ -98,11 +98,8 @@ DHTMessageTracker::messageArrived
|
|||
SharedHandle<DHTMessageCallback> callback = entry->getCallback();
|
||||
return std::make_pair(message, callback);
|
||||
} catch(RecoverableException& e) {
|
||||
if(!entry->getCallback().isNull()) {
|
||||
entry->getCallback()->onTimeout(targetNode);
|
||||
}
|
||||
return std::pair<SharedHandle<DHTResponseMessage>,
|
||||
SharedHandle<DHTMessageCallback> >();
|
||||
handleTimeoutEntry(entry);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -113,36 +110,42 @@ DHTMessageTracker::messageArrived
|
|||
SharedHandle<DHTMessageCallback> >();
|
||||
}
|
||||
|
||||
void DHTMessageTracker::handleTimeoutEntry
|
||||
(const SharedHandle<DHTMessageTrackerEntry>& entry)
|
||||
{
|
||||
try {
|
||||
SharedHandle<DHTNode> node = entry->getTargetNode();
|
||||
if(logger_->debug()) {
|
||||
logger_->debug("Message timeout: To:%s:%u",
|
||||
node->getIPAddress().c_str(), node->getPort());
|
||||
}
|
||||
node->updateRTT(entry->getElapsedMillis());
|
||||
node->timeout();
|
||||
if(node->isBad()) {
|
||||
if(logger_->debug()) {
|
||||
logger_->debug("Marked bad: %s:%u",
|
||||
node->getIPAddress().c_str(), node->getPort());
|
||||
}
|
||||
routingTable_->dropNode(node);
|
||||
}
|
||||
SharedHandle<DHTMessageCallback> callback = entry->getCallback();
|
||||
if(!callback.isNull()) {
|
||||
callback->onTimeout(node);
|
||||
}
|
||||
} catch(RecoverableException& e) {
|
||||
logger_->info("Exception thrown while handling timeouts.", e);
|
||||
}
|
||||
}
|
||||
|
||||
void DHTMessageTracker::handleTimeout()
|
||||
{
|
||||
for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::iterator i =
|
||||
entries_.begin(), eoi = entries_.end(); i != eoi;) {
|
||||
if((*i)->isTimeout()) {
|
||||
try {
|
||||
SharedHandle<DHTMessageTrackerEntry> entry = *i;
|
||||
i = entries_.erase(i);
|
||||
eoi = entries_.end();
|
||||
SharedHandle<DHTNode> node = entry->getTargetNode();
|
||||
if(logger_->debug()) {
|
||||
logger_->debug("Message timeout: To:%s:%u",
|
||||
node->getIPAddress().c_str(), node->getPort());
|
||||
}
|
||||
node->updateRTT(entry->getElapsedMillis());
|
||||
node->timeout();
|
||||
if(node->isBad()) {
|
||||
if(logger_->debug()) {
|
||||
logger_->debug("Marked bad: %s:%u",
|
||||
node->getIPAddress().c_str(), node->getPort());
|
||||
}
|
||||
routingTable_->dropNode(node);
|
||||
}
|
||||
SharedHandle<DHTMessageCallback> callback = entry->getCallback();
|
||||
if(!callback.isNull()) {
|
||||
callback->onTimeout(node);
|
||||
}
|
||||
} catch(RecoverableException& e) {
|
||||
logger_->info("Exception thrown while handling timeouts.", e);
|
||||
}
|
||||
handleTimeoutEntry(entry);
|
||||
} else {
|
||||
++i;
|
||||
}
|
||||
|
|
|
@ -63,6 +63,8 @@ private:
|
|||
SharedHandle<DHTMessageFactory> factory_;
|
||||
|
||||
Logger* logger_;
|
||||
|
||||
void handleTimeoutEntry(const SharedHandle<DHTMessageTrackerEntry>& entry);
|
||||
public:
|
||||
DHTMessageTracker();
|
||||
|
||||
|
|
Loading…
Reference in New Issue