/* */ #ifndef _D_DHT_ABSTRACT_NODE_LOOKUP_TASK_H_ #define _D_DHT_ABSTRACT_NODE_LOOKUP_TASK_H_ #include "DHTAbstractTask.h" #include "DHTMessageCallbackListener.h" #include "DHTConstants.h" #include namespace aria2 { class DHTNode; class DHTNodeLookupEntry; class DHTMessage; class DHTAbstractNodeLookupTask:public DHTAbstractTask, public DHTMessageCallbackListener { protected: unsigned char _targetID[DHT_ID_LENGTH]; std::deque > _entries; size_t _inFlightMessage; std::deque > toEntries(const std::deque >& nodes) const; void sendMessage(); void updateBucket(); public: DHTAbstractNodeLookupTask(const unsigned char* targetID); static const size_t ALPHA = 3; virtual void startup(); virtual void onReceived(const SharedHandle& message); virtual void onTimeout(const SharedHandle& node); virtual std::deque > getNodesFromMessage(const SharedHandle& message) = 0; virtual void onReceivedInternal(const SharedHandle& message) {} virtual bool needsAdditionalOutgoingMessage() { return true; } virtual void onFinish() {} virtual SharedHandle createMessage(const SharedHandle& remoteNode) = 0; }; } // namespace aria2 #endif // _D_DHT_ABSTRACT_NODE_LOOKUP_TASK_H_