/* */ #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" namespace aria2 { DHTBucketRefreshTask::DHTBucketRefreshTask(): _forceRefresh(false) {} DHTBucketRefreshTask::~DHTBucketRefreshTask() {} void DHTBucketRefreshTask::startup() { std::vector > buckets; getRoutingTable()->getBuckets(buckets); for(std::vector >::iterator i = buckets.begin(), eoi = buckets.end(); i != eoi; ++i) { if(_forceRefresh || (*i)->needsRefresh()) { (*i)->notifyUpdate(); unsigned char targetID[DHT_ID_LENGTH]; (*i)->getRandomNodeID(targetID); SharedHandle task(new DHTNodeLookupTask(targetID)); task->setRoutingTable(getRoutingTable()); task->setMessageDispatcher(getMessageDispatcher()); task->setMessageFactory(getMessageFactory()); task->setTaskQueue(getTaskQueue()); task->setLocalNode(getLocalNode()); getLogger()->info("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