/* */ #ifndef D_PEER_STORAGE_H #define D_PEER_STORAGE_H #include "common.h" #include #include #include #include #include "TransferStat.h" #include "Command.h" #include "a2functional.h" namespace aria2 { class Peer; typedef std::set, RefLess> PeerSet; class PeerStorage { public: virtual ~PeerStorage() = default; /** * Adds new peer to the internal peer list. * If the peer is added successfully, returns true. Otherwise returns false. */ virtual bool addPeer(const std::shared_ptr& peer) = 0; /** * Adds all peers in peers to internal peer list. */ virtual void addPeer(const std::vector>& peers) = 0; /** * Adds new peer, and checkout it atomically. */ virtual std::shared_ptr addAndCheckoutPeer(const std::shared_ptr& peer, cuid_t cuid) = 0; /** * Returns the number of peers, including used and unused ones. */ virtual size_t countAllPeer() const = 0; /** * Returns internal dropped peer list. */ virtual const std::deque>& getDroppedPeers() = 0; /** * Returns true if at least one unused peer exists. * Otherwise returns false. */ virtual bool isPeerAvailable() = 0; /** * Returns used peer set. */ virtual const PeerSet& getUsedPeers() = 0; /** * Returns true if peer with ipaddr should be ignored because, for * example, it sends bad data. */ virtual bool isBadPeer(const std::string& ipaddr) = 0; /** * Adds peer with ipaddr in bad peer set. */ virtual void addBadPeer(const std::string& ipaddr) = 0; /** * Moves first peer in unused peer list to used peer set and calls * Peer::usedBy(cuid). If there is no peer available, returns * std::shared_ptr(). */ virtual std::shared_ptr checkoutPeer(cuid_t cuid) = 0; /** * Tells PeerStorage object that peer is no longer used in the session. */ virtual void returnPeer(const std::shared_ptr& peer) = 0; virtual bool chokeRoundIntervalElapsed() = 0; virtual void executeChoke() = 0; }; } // namespace aria2 #endif // D_PEER_STORAGE_H