/* */ #ifndef _D_PEER_MESSAGE_UTIL_H_ #define _D_PEER_MESSAGE_UTIL_H_ #include "common.h" #define MAX_BLOCK_LENGTH (128*1024) class PeerMessageUtil { private: PeerMessageUtil() {} public: static int32_t getIntParam(const unsigned char* msg, int32_t offset); static int16_t getShortIntParam(const unsigned char* msg, int32_t offset); static void setIntParam(unsigned char* dest, int32_t param); static void setShortIntParam(unsigned char* dest, int16_t param); static int8_t getId(const unsigned char* msg); static void checkIndex(int32_t index, int32_t pieces); static void checkBegin(int32_t begin, int32_t pieceLength); static void checkLength(int32_t length); static void checkRange(int32_t begin, int32_t length, int32_t pieceLength); static void checkBitfield(const unsigned char* bitfield, int32_t bitfieldLength, int32_t pieces); static void createPeerMessageString(unsigned char* msg, int32_t msgLength, int32_t payloadLength, int8_t messageId); /** * Creates compact tracker format(6bytes for ipv4 address and port) * and stores the results in compact. * compact must be at least 6 bytes and pre-allocated. * Returns true if creation is successful, otherwise returns false. * The example of failure reason is that addr is not numbers-and-dots * notation. */ static bool createcompact(char* compact, const string& addr, uint16_t port); static pair unpackcompact(const char* compact); }; #endif // _D_PEER_MESSAGE_UTIL_H_