extern "C" { #include } #include #include #include #include #include #include #include MessageHeader::MessageHeader(const uint32_t ipSize) { pSize = ipSize; } MessageHeader::MessageHeader(void) { pSize = 0; } std::string MessageHeader::Encode() { std::string buffer, tmp; auto magic = htonl(msgMagic); tmp = std::string(reinterpret_cast(&magic), sizeof(magic)); buffer.append(tmp); auto size = htonl(pSize); tmp = std::string(reinterpret_cast(&size), sizeof(size)); buffer.append(tmp); return buffer; } std::expected MessageHeader::Decode(const std::string rawHeader) { uint32_t tmp; std::memcpy(&tmp, rawHeader.data(), sizeof(uint32_t)); auto magic = ntohl(tmp); if (magic != msgMagic) { return std::unexpected("Wrong magic code"); } std::memcpy(&tmp, rawHeader.data() + sizeof(uint32_t), sizeof(uint32_t)); pSize = ntohl(tmp); return {}; } uint32_t MessageHeader::PacketSize() { return pSize; }