/* */ #ifndef D_DEFAULT_PEER_STORAGE_H #define D_DEFAULT_PEER_STORAGE_H #include "PeerStorage.h" #include #include #include "TimerA2.h" namespace aria2 { class BtRuntime; class BtSeederStateChoke; class BtLeecherStateChoke; class PieceStorage; class DefaultPeerStorage : public PeerStorage { private: std::shared_ptr btRuntime_; std::shared_ptr pieceStorage_; size_t maxPeerListSize_; // This contains ip address and port pair and is used to ensure that // no duplicate peers are stored. std::set> uniqPeers_; // Unused (not connected) peers, sorted by last added. std::deque> unusedPeers_; // The set of used peers. Some of them are not connected yet. To // know it is connected or not, call Peer::isActive(). PeerSet usedPeers_; std::deque> droppedPeers_; std::unique_ptr seederStateChoke_; std::unique_ptr leecherStateChoke_; Timer lastTransferStatMapUpdated_; std::map badPeers_; Timer lastBadPeerCleaned_; bool isPeerAlreadyAdded(const std::shared_ptr& peer); void addUniqPeer(const std::shared_ptr& peer); void addDroppedPeer(const std::shared_ptr& peer); public: DefaultPeerStorage(); virtual ~DefaultPeerStorage(); // TODO We need addAndCheckoutPeer for incoming peers virtual bool addPeer(const std::shared_ptr& peer) CXX11_OVERRIDE; virtual size_t countAllPeer() const CXX11_OVERRIDE; std::shared_ptr getPeer(const std::string& ipaddr, uint16_t port) const; virtual void addPeer(const std::vector>& peers) CXX11_OVERRIDE; std::shared_ptr addAndCheckoutPeer(const std::shared_ptr& peer, cuid_t cuid) CXX11_OVERRIDE; const std::deque>& getUnusedPeers(); virtual const PeerSet& getUsedPeers() CXX11_OVERRIDE; virtual const std::deque>& getDroppedPeers() CXX11_OVERRIDE; virtual bool isPeerAvailable() CXX11_OVERRIDE; virtual bool isBadPeer(const std::string& ipaddr) CXX11_OVERRIDE; virtual void addBadPeer(const std::string& ipaddr) CXX11_OVERRIDE; virtual std::shared_ptr checkoutPeer(cuid_t cuid) CXX11_OVERRIDE; virtual void returnPeer(const std::shared_ptr& peer) CXX11_OVERRIDE; virtual bool chokeRoundIntervalElapsed() CXX11_OVERRIDE; virtual void executeChoke() CXX11_OVERRIDE; void deleteUnusedPeer(size_t delSize); void onErasingPeer(const std::shared_ptr& peer); void onReturningPeer(const std::shared_ptr& peer); void setPieceStorage(const std::shared_ptr& pieceStorage); void setBtRuntime(const std::shared_ptr& btRuntime); void setMaxPeerListSize(size_t maxPeerListSize) { maxPeerListSize_ = maxPeerListSize; } }; } // namespace aria2 #endif // D_DEFAULT_PEER_STORAGE_H