/* */ #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); auto task = std::make_shared(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