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