/* */ #include "DHTPingTask.h" #include "DHTMessage.h" #include "DHTMessageFactory.h" #include "DHTMessageDispatcher.h" #include "DHTNode.h" #include "DHTConstants.h" #include "DHTPingReplyMessageCallback.h" #include "DHTQueryMessage.h" namespace aria2 { DHTPingTask::DHTPingTask (const SharedHandle& remoteNode, size_t numMaxRetry): remoteNode_(remoteNode), numMaxRetry_(numMaxRetry), numRetry_(0), pingSuccessful_(false), timeout_(DHT_MESSAGE_TIMEOUT) {} DHTPingTask::~DHTPingTask() {} void DHTPingTask::addMessage() { SharedHandle m = getMessageFactory()->createPingMessage(remoteNode_); SharedHandle callback (new DHTPingReplyMessageCallback(this)); getMessageDispatcher()->addMessageToQueue(m, timeout_, callback); } void DHTPingTask::startup() { addMessage(); } void DHTPingTask::onReceived(const DHTPingReplyMessage* message) { pingSuccessful_ = true; setFinished(true); } void DHTPingTask::onTimeout(const SharedHandle& node) { ++numRetry_; if(numRetry_ >= numMaxRetry_) { pingSuccessful_ = false; setFinished(true); } else { addMessage(); } } bool DHTPingTask::isPingSuccessful() const { return pingSuccessful_; } } // namespace aria2