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>
|
2010-08-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Evaluate callback is non-null.
|
Evaluate callback is non-null.
|
||||||
|
|
|
@ -98,11 +98,8 @@ DHTMessageTracker::messageArrived
|
||||||
SharedHandle<DHTMessageCallback> callback = entry->getCallback();
|
SharedHandle<DHTMessageCallback> callback = entry->getCallback();
|
||||||
return std::make_pair(message, callback);
|
return std::make_pair(message, callback);
|
||||||
} catch(RecoverableException& e) {
|
} catch(RecoverableException& e) {
|
||||||
if(!entry->getCallback().isNull()) {
|
handleTimeoutEntry(entry);
|
||||||
entry->getCallback()->onTimeout(targetNode);
|
throw;
|
||||||
}
|
|
||||||
return std::pair<SharedHandle<DHTResponseMessage>,
|
|
||||||
SharedHandle<DHTMessageCallback> >();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,36 +110,42 @@ DHTMessageTracker::messageArrived
|
||||||
SharedHandle<DHTMessageCallback> >();
|
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()
|
void DHTMessageTracker::handleTimeout()
|
||||||
{
|
{
|
||||||
for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::iterator i =
|
for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::iterator i =
|
||||||
entries_.begin(), eoi = entries_.end(); i != eoi;) {
|
entries_.begin(), eoi = entries_.end(); i != eoi;) {
|
||||||
if((*i)->isTimeout()) {
|
if((*i)->isTimeout()) {
|
||||||
try {
|
|
||||||
SharedHandle<DHTMessageTrackerEntry> entry = *i;
|
SharedHandle<DHTMessageTrackerEntry> entry = *i;
|
||||||
i = entries_.erase(i);
|
i = entries_.erase(i);
|
||||||
eoi = entries_.end();
|
eoi = entries_.end();
|
||||||
SharedHandle<DHTNode> node = entry->getTargetNode();
|
handleTimeoutEntry(entry);
|
||||||
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);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,8 @@ private:
|
||||||
SharedHandle<DHTMessageFactory> factory_;
|
SharedHandle<DHTMessageFactory> factory_;
|
||||||
|
|
||||||
Logger* logger_;
|
Logger* logger_;
|
||||||
|
|
||||||
|
void handleTimeoutEntry(const SharedHandle<DHTMessageTrackerEntry>& entry);
|
||||||
public:
|
public:
|
||||||
DHTMessageTracker();
|
DHTMessageTracker();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue