/* */ #ifndef _D_BT_LEECHER_STATE_CHOKE_H_ #define _D_BT_LEECHER_STATE_CHOKE_H_ #include "common.h" #include #include "SharedHandle.h" #include "TimeA2.h" namespace aria2 { class Peer; class Logger; class BtLeecherStateChoke { private: int _round; Time _lastRound; Logger* _logger; class PeerEntry { private: SharedHandle _peer; unsigned int _downloadSpeed; bool _regularUnchoker; public: PeerEntry(const SharedHandle& peer, const struct timeval& now); bool operator<(const PeerEntry& rhs) const; const SharedHandle& getPeer() const; unsigned int getDownloadSpeed() const; bool isRegularUnchoker() const; bool isSnubbing() const; void enableChokingRequired(); void disableChokingRequired(); void enableOptUnchoking(); void disableOptUnchoking(); }; void plannedOptimisticUnchoke(std::deque& peerEntries); void regularUnchoke(std::deque& peerEntries); friend class PeerFilter; friend class BtLeecherStateChokeGenPeerEntry; public: BtLeecherStateChoke(); ~BtLeecherStateChoke(); void executeChoke(const std::deque >& peerSet); const Time& getLastRound() const; }; } // namespace aria2 #endif // _D_BT_LEECHER_STATE_CHOKE_H_