/* */ #ifndef _D_DHT_PEER_ANNOUNCE_STORAGE_H_ #define _D_DHT_PEER_ANNOUNCE_STORAGE_H_ #include "common.h" #include #include #include "SharedHandle.h" namespace aria2 { class Peer; class DHTPeerAnnounceEntry; class DHTTaskQueue; class DHTTaskFactory; class Logger; class DHTPeerAnnounceStorage { private: std::deque > entries_; SharedHandle getPeerAnnounceEntry(const unsigned char* infoHash); SharedHandle taskQueue_; SharedHandle taskFactory_; Logger* logger_; public: DHTPeerAnnounceStorage(); ~DHTPeerAnnounceStorage(); void addPeerAnnounce(const unsigned char* infoHash, const std::string& ipaddr, uint16_t port); bool contains(const unsigned char* infoHash) const; void getPeers(std::vector >& peers, const unsigned char* infoHash); // drop peer announce entry which is not updated in the past // DHT_PEER_ANNOUNCE_PURGE_INTERVAL seconds. void handleTimeout(); // announce peer in every DHT_PEER_ANNOUNCE_PURGE_INTERVAL. // The torrents which are announced in the past DHT_PEER_ANNOUNCE_PURGE_INTERVAL // are excluded from announce. void announcePeer(); void setTaskQueue(const SharedHandle& taskQueue); void setTaskFactory(const SharedHandle& taskFactory); }; } // namespace aria2 #endif // _D_DHT_PEER_ANNOUNCE_STORAGE_H_