/* */ #ifndef D_DHT_ROUTING_TABLE_H #define D_DHT_ROUTING_TABLE_H #include "common.h" #include #include #include "SharedHandle.h" namespace aria2 { class DHTNode; class DHTBucket; class DHTTaskQueue; class DHTTaskFactory; class DHTBucketTreeNode; class DHTRoutingTable { private: SharedHandle localNode_; DHTBucketTreeNode* root_; size_t numBucket_; SharedHandle taskQueue_; SharedHandle taskFactory_; bool addNode(const SharedHandle& node, bool good); public: DHTRoutingTable(const SharedHandle& localNode); ~DHTRoutingTable(); bool addNode(const SharedHandle& node); bool addGoodNode(const SharedHandle& node); void getClosestKNodes(std::vector >& nodes, const unsigned char* key) const; size_t countBucket() const; void showBuckets() const; void dropNode(const SharedHandle& node); void moveBucketHead(const SharedHandle& node); void moveBucketTail(const SharedHandle& node); SharedHandle getBucketFor(const unsigned char* nodeID) const; SharedHandle getBucketFor(const SharedHandle& node) const; SharedHandle getNode(const unsigned char* id, const std::string& ipaddr, uint16_t port) const; void getBuckets(std::vector >& buckets) const; void setTaskQueue(const SharedHandle& taskQueue); void setTaskFactory(const SharedHandle& taskFactory); }; } // namespace aria2 #endif // D_DHT_ROUTING_TABLE_H