/* */ #ifndef D_HANDSHAKE_EXTENSION_MESSAGE_H #define D_HANDSHAKE_EXTENSION_MESSAGE_H #include "ExtensionMessage.h" #include #include "BtConstants.h" #include "ExtensionMessageRegistry.h" namespace aria2 { class Peer; class DownloadContext; class HandshakeExtensionMessage:public ExtensionMessage { private: std::string clientVersion_; uint16_t tcpPort_; size_t metadataSize_; ExtensionMessageRegistry extreg_; DownloadContext* dctx_; std::shared_ptr peer_; public: HandshakeExtensionMessage(); virtual std::string getPayload(); virtual uint8_t getExtensionMessageID() const { return 0; } virtual const char* getExtensionName() const { return EXTENSION_NAME; } static const char EXTENSION_NAME[]; virtual std::string toString() const; virtual void doReceivedAction(); void setClientVersion(const std::string& version) { clientVersion_ = version; } const std::string& getClientVersion() const { return clientVersion_; } void setTCPPort(uint16_t port) { tcpPort_ = port; } uint16_t getTCPPort() const { return tcpPort_; } size_t getMetadataSize() { return metadataSize_; } void setMetadataSize(size_t size) { metadataSize_ = size; } void setDownloadContext(DownloadContext* dctx) { dctx_ = dctx; } void setExtension(int key, uint8_t id); void setExtensions(const Extensions& extensions); uint8_t getExtensionMessageID(int key) const; void setPeer(const std::shared_ptr& peer); static std::unique_ptr create(const unsigned char* data, size_t dataLength); }; } // namespace aria2 #endif // D_HANDSHAKE_EXTENSION_MESSAGE_H