/* */ #ifndef _D_DHT_ROUTING_TABLE_H_ #define _D_DHT_ROUTING_TABLE_H_ #include "common.h" #include "SharedHandle.h" #include #include namespace aria2 { class DHTNode; class DHTBucket; class DHTTaskQueue; class DHTTaskFactory; class BNode; class Logger; class DHTRoutingTable { private: SharedHandle _localNode; BNode* _root; size_t _numBucket; SharedHandle _taskQueue; SharedHandle _taskFactory; Logger* _logger; 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::deque >& 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::deque >& buckets) const; void setTaskQueue(const SharedHandle& taskQueue); void setTaskFactory(const SharedHandle& taskFactory); }; } // namespace aria2 #endif // _D_DHT_ROUTING_TABLE_H_