/* */ #ifndef _D_UT_PEX_EXTENSION_MESSAGE_H_ #define _D_UT_PEX_EXTENSION_MESSAGE_H_ #include "ExtensionMessage.h" #include #include #include "a2time.h" namespace aria2 { class PeerStorage; class Peer; class UTPexExtensionMessage; typedef SharedHandle UTPexExtensionMessageHandle; class UTPexExtensionMessage:public ExtensionMessage { private: uint8_t extensionMessageID_; std::vector > freshPeers_; std::vector > droppedPeers_; SharedHandle peerStorage_; time_t interval_; size_t maxFreshPeer_; size_t maxDroppedPeer_; std::pair, std::pair > createCompactPeerListAndFlag(const std::vector >& peers); public: UTPexExtensionMessage(uint8_t extensionMessageID); virtual ~UTPexExtensionMessage(); virtual std::string getPayload(); virtual uint8_t getExtensionMessageID() { return extensionMessageID_; } virtual const std::string& getExtensionName() const { return EXTENSION_NAME; } static const std::string EXTENSION_NAME; virtual std::string toString() const; virtual void doReceivedAction(); bool addFreshPeer(const SharedHandle& peer); const std::vector >& getFreshPeers() const { return freshPeers_; } bool freshPeersAreFull() const; bool addDroppedPeer(const SharedHandle& peer); const std::vector >& getDroppedPeers() const { return droppedPeers_; } bool droppedPeersAreFull() const; void setPeerStorage(const SharedHandle& peerStorage); static UTPexExtensionMessageHandle create(const unsigned char* data, size_t len); void setMaxFreshPeer(size_t maxFreshPeer); size_t getMaxFreshPeer() const { return maxFreshPeer_; } void setMaxDroppedPeer(size_t maxDroppedPeer); size_t getMaxDroppedPeer() const { return maxDroppedPeer_; } static const time_t DEFAULT_INTERVAL = 60; static const size_t DEFAULT_MAX_FRESH_PEER = 50; static const size_t DEFAULT_MAX_DROPPED_PEER = 50; }; typedef SharedHandle UTPexExtensionMessageHandle; } // namespace aria2 #endif // _D_UT_PEX_EXTENSION_MESSAGE_H_