/* */ #ifndef D_DHT_PEER_ANNOUNCE_STORAGE_H #define D_DHT_PEER_ANNOUNCE_STORAGE_H #include "common.h" #include #include #include #include namespace aria2 { class Peer; class DHTPeerAnnounceEntry; class DHTTaskQueue; class DHTTaskFactory; class DHTPeerAnnounceStorage { private: class InfoHashLess { public: bool operator()(const std::shared_ptr& lhs, const std::shared_ptr& rhs); }; typedef std::set, InfoHashLess> DHTPeerAnnounceEntrySet; DHTPeerAnnounceEntrySet entries_; std::shared_ptr getPeerAnnounceEntry(const unsigned char* infoHash); DHTTaskQueue* taskQueue_; DHTTaskFactory* taskFactory_; public: 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(DHTTaskQueue* taskQueue); void setTaskFactory(DHTTaskFactory* taskFactory); }; } // namespace aria2 #endif // D_DHT_PEER_ANNOUNCE_STORAGE_H