/* */ #ifndef _D_RANGE_BT_MESSAGE_H_ #define _D_RANGE_BT_MESSAGE_H_ #include "SimpleBtMessage.h" #include "PeerMessageUtil.h" namespace aria2 { class RangeBtMessage : public SimpleBtMessage { private: size_t _index; uint32_t _begin; size_t _length; unsigned char* _msg; static const size_t MESSAGE_LENGTH = 17; protected: template static SharedHandle create (const unsigned char* data, size_t dataLength) { PeerMessageUtil::assertPayloadLengthEqual(13, dataLength, T::NAME); PeerMessageUtil::assertID(T::ID, data, T::NAME); SharedHandle message(new T()); message->setIndex(PeerMessageUtil::getIntParam(data, 1)); message->setBegin(PeerMessageUtil::getIntParam(data, 5)); message->setLength(PeerMessageUtil::getIntParam(data, 9)); return message; } public: RangeBtMessage(uint8_t id, const std::string& name, size_t index, uint32_t begin, size_t length); virtual ~RangeBtMessage(); size_t getIndex() const { return _index; } void setIndex(size_t index) { _index = index; } uint32_t getBegin() const { return _begin; } void setBegin(uint32_t begin) { _begin = begin; } size_t getLength() const { return _length; } void setLength(size_t length) { _length = length; } virtual const unsigned char* getMessage(); virtual size_t getMessageLength(); virtual std::string toString() const; }; } // namespace aria2 #endif // _D_RANGE_BT_MESSAGE_H_