/* */ #include "DHTBucketRefreshTask.h" #include "DHTBucket.h" #include "DHTRoutingTable.h" #include "DHTNodeLookupTask.h" #include "DHTTaskQueue.h" #include "DHTNode.h" #include "DHTNodeLookupEntry.h" #include "util.h" #include "Logger.h" #include "LogFactory.h" #include "DHTMessageCallback.h" #include "fmt.h" namespace aria2 { DHTBucketRefreshTask::DHTBucketRefreshTask(): forceRefresh_(false) {} DHTBucketRefreshTask::~DHTBucketRefreshTask() {} void DHTBucketRefreshTask::startup() { std::vector > buckets; getRoutingTable()->getBuckets(buckets); for (auto& b : buckets) { if(!forceRefresh_ && ! b->needsRefresh()) { continue; } b->notifyUpdate(); unsigned char targetID[DHT_ID_LENGTH]; b->getRandomNodeID(targetID); std::shared_ptr task(new DHTNodeLookupTask(targetID)); task->setRoutingTable(getRoutingTable()); task->setMessageDispatcher(getMessageDispatcher()); task->setMessageFactory(getMessageFactory()); task->setTaskQueue(getTaskQueue()); task->setLocalNode(getLocalNode()); A2_LOG_INFO(fmt("Dispating bucket refresh. targetID=%s", util::toHex(targetID, DHT_ID_LENGTH).c_str())); getTaskQueue()->addPeriodicTask1(task); } setFinished(true); } void DHTBucketRefreshTask::setForceRefresh(bool forceRefresh) { forceRefresh_ = forceRefresh; } } // namespace aria2