/* */ #ifndef D_RANGE_BT_MESSAGE_H #define D_RANGE_BT_MESSAGE_H #include "SimpleBtMessage.h" #include "bittorrent_helper.h" namespace aria2 { class RangeBtMessage : public SimpleBtMessage { private: size_t index_; int32_t begin_; int32_t length_; static const size_t MESSAGE_LENGTH = 17; protected: template static T* create(const unsigned char* data, size_t dataLength) { bittorrent::assertPayloadLengthEqual(13, dataLength, T::NAME); bittorrent::assertID(T::ID, data, T::NAME); T* message(new T()); message->setIndex(bittorrent::getIntParam(data, 1)); message->setBegin(bittorrent::getIntParam(data, 5)); message->setLength(bittorrent::getIntParam(data, 9)); return message; } public: RangeBtMessage(uint8_t id, const char* name, size_t index, int32_t begin, int32_t length); size_t getIndex() const { return index_; } void setIndex(size_t index) { index_ = index; } int32_t getBegin() const { return begin_; } void setBegin(int32_t begin) { begin_ = begin; } int32_t getLength() const { return length_; } void setLength(int32_t length) { length_ = length; } virtual unsigned char* createMessage(); virtual size_t getMessageLength(); virtual std::string toString() const; }; } // namespace aria2 #endif // D_RANGE_BT_MESSAGE_H