/* */ #ifndef D_BT_REGISTRY_H #define D_BT_REGISTRY_H #include "common.h" #include #include "SharedHandle.h" #include "RequestGroup.h" namespace aria2 { class PeerStorage; class PieceStorage; class BtAnnounce; class BtRuntime; class BtProgressInfoFile; class DownloadContext; class LpdMessageReceiver; class UDPTrackerClient; struct BtObject { SharedHandle downloadContext; SharedHandle pieceStorage; SharedHandle peerStorage; SharedHandle btAnnounce; SharedHandle btRuntime; SharedHandle btProgressInfoFile; BtObject(const SharedHandle& downloadContext, const SharedHandle& pieceStorage, const SharedHandle& peerStorage, const SharedHandle& btAnnounce, const SharedHandle& btRuntime, const SharedHandle& btProgressInfoFile); BtObject(); BtObject(const BtObject& c); ~BtObject(); BtObject& operator=(const BtObject& c); }; class BtRegistry { private: std::map > pool_; uint16_t tcpPort_; // This is IPv4 port for DHT and UDP tracker. No IPv6 udpPort atm. uint16_t udpPort_; SharedHandle lpdMessageReceiver_; SharedHandle udpTrackerClient_; public: BtRegistry(); ~BtRegistry(); const SharedHandle& getDownloadContext(a2_gid_t gid) const; const SharedHandle& getDownloadContext(const std::string& infoHash) const; void put(a2_gid_t gid, const SharedHandle& obj); const SharedHandle& get(a2_gid_t gid) const; template OutputIterator getAllDownloadContext(OutputIterator dest) { for(std::map >::const_iterator i = pool_.begin(), eoi = pool_.end(); i != eoi; ++i) { *dest++ = (*i).second->downloadContext; } return dest; } void removeAll(); bool remove(a2_gid_t gid); void setTcpPort(uint16_t port) { tcpPort_ = port; } uint16_t getTcpPort() const { return tcpPort_; } void setUdpPort(uint16_t port) { udpPort_ = port; } uint16_t getUdpPort() const { return udpPort_; } void setLpdMessageReceiver(const SharedHandle& receiver); const SharedHandle& getLpdMessageReceiver() const { return lpdMessageReceiver_; } void setUDPTrackerClient(const SharedHandle& tracker); const SharedHandle& getUDPTrackerClient() const { return udpTrackerClient_; } }; } // namespace aria2 #endif // D_BT_REGISTRY_H