#pragma once #include #include #include #include "wireframe/byteio.hpp" namespace wireframe::net { inline constexpr std::size_t kUdpHeaderLen = 8; struct UdpHeader { std::uint16_t src_port; std::uint16_t dst_port; std::uint16_t length; }; struct UdpDatagram { UdpHeader header; std::span payload; }; inline std::optional parse_udp(std::span bytes) { if (bytes.size() < kUdpHeaderLen) return std::nullopt; UdpHeader header{}; header.src_port = read_be16(bytes, 0); header.dst_port = read_be16(bytes, 2); header.length = read_be16(bytes, 4); return UdpDatagram{header, bytes.subspan(kUdpHeaderLen)}; } } // namespace wireframe::net