#ifndef _GAMEPACKETPARSER_H #define _GAMEPACKETPARSER_H #include "CommonNetwork.h" namespace Core { namespace Network { namespace Packets { enum PacketParseResult { /// Dissected game packet successfully Success, /// Buffer is too short to dissect a message. Incomplete, /// Invalid data detected. Malformed }; /// Read packet header from buffer with given offset. /// Buffer with given offset must be pointing to start of the new FFXIV packet. PacketParseResult getHeader( const std::vector< uint8_t > &buffer, const uint32_t offset, FFXIVARR_PACKET_HEADER &header ); /// Read packet header from buffer with given offset. /// Buffer with given offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data. /// Keep in mind that this function does check for data validity. Call checkSegmentHeader() if that's needed. PacketParseResult getSegmentHeader( const std::vector< uint8_t > &buffer, const uint32_t offset, FFXIVARR_PACKET_SEGMENT_HEADER &header ); /// Read packets from the buffer with given offset. /// Buffer with given offset must be pointing to end of FFXIVARR_PACKET_HEADER data. PacketParseResult getPackets( const std::vector< uint8_t > &buffer, const uint32_t offset, const FFXIVARR_PACKET_HEADER &header, std::vector< Packets::FFXIVARR_PACKET_RAW > &packets ); /// Read single packet from the buffer with given offset. /// Buffer with an offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data. PacketParseResult getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset, FFXIVARR_PACKET_RAW &packet ); bool checkHeader(const FFXIVARR_PACKET_HEADER &header); bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header); } } } #endif