/* */ #ifndef _D_BT_SEEDER_STATE_CHOKE_H_ #define _D_BT_SEEDER_STATE_CHOKE_H_ #include "common.h" #include #include "SharedHandle.h" #include "TimeA2.h" namespace aria2 { class Peer; class Logger; class BtSeederStateChoke { private: int _round; Time _lastRound; Logger* _logger; class PeerEntry { private: SharedHandle _peer; size_t _outstandingUpload; Time _lastAmUnchoking; bool _recentUnchoking; unsigned int _uploadSpeed; const static time_t TIME_FRAME = 20; public: PeerEntry(const SharedHandle& peer, const struct timeval& now); bool operator<(const PeerEntry& rhs) const; const SharedHandle& getPeer() const { return _peer; } unsigned int getUploadSpeed() const { return _uploadSpeed; } void disableOptUnchoking(); }; void unchoke(std::vector& peers); friend class GenPeerEntry; friend class NotInterestedPeer; public: BtSeederStateChoke(); ~BtSeederStateChoke(); void executeChoke(const std::vector >& peerSet); const Time& getLastRound() const { return _lastRound; } }; } // namespace aria2 #endif // _D_BT_SEEDER_STATE_CHOKE_H_