extern "C" { #include } #include #include #include #include #include #include #include Header::Header(const uint32_t ipSize) { pSize = ipSize; } Header::Header(void) { pSize = 0; } std::string Header::Encode() { std::string buffer, tmp; auto magic = htonl(MAGIC); 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 Header::Decode(const std::string rawHeader) { uint32_t tmp; std::memcpy(&tmp, rawHeader.data(), sizeof(uint32_t)); auto magic = ntohl(tmp); if (magic != MAGIC) { return std::unexpected("Wrong magic code"); } std::memcpy(&tmp, rawHeader.data() + sizeof(uint32_t), sizeof(uint32_t)); pSize = ntohl(tmp); return {}; } uint32_t Header::PacketSize() { return pSize; }