/* */ #ifndef _D_PEER_MESSAGE_UTIL_H_ #define _D_PEER_MESSAGE_UTIL_H_ #include "PeerConnection.h" #define MAX_BLOCK_LENGTH (128*1024) class PeerMessageUtil { private: PeerMessageUtil() {} static PeerMessage* createBasicMessage(int id, const char* msg, int len); static PeerMessage* createHaveMessage(int id, const char* msg, int len); static PeerMessage* createBitfieldMessage(int id, const char* msg, int len); static PeerMessage* createRequestCancelMessage(int id, const char* msg, int len); static PeerMessage* createPieceMessage(int id, const char* msg, int len); static int getId(const char* msg); static int getIntParam(const char* msg, int offset); static void checkIndex(const PeerMessage* message, int pieces); static void checkBegin(const PeerMessage* message, int pieceLength); static void checkLength(const PeerMessage* message); static void checkPieceOffset(const PeerMessage* message, int pieceLength, int pieces, long long int totalLength); static void checkBitfield(const PeerMessage* message, int pieces); public: static PeerMessage* createPeerMessage(const char* msg, int len); static void checkIntegrity(const PeerMessage* message, int pieceLength, int pieces, long long int totalLength); static HandshakeMessage* createHandshakeMessage(const char* msg); static void checkHandshake(const HandshakeMessage* message, const unsigned char* infoHash); }; #endif // _D_PEER_MESSAGE_UTIL_H_