/* */ #ifndef _D_DHT_PEER_ANNOUNCE_STORAGE_H_ #define _D_DHT_PEER_ANNOUNCE_STORAGE_H_ #include "common.h" #include "SharedHandle.h" #include namespace aria2 { class PeerStorage; 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); // add peer announce as localhost downloading the content void addPeerAnnounce(const unsigned char* infoHash, const SharedHandle& peerStorage); // Call DHTPeerAnnounceEntry::clearLocal() for infoHash if found. // If DHTPeerAnnounceEntry is empty, it is erased. void removeLocalPeerAnnounce(const unsigned char* infoHash); bool contains(const unsigned char* infoHash) const; void getPeers(std::deque >& 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_