| 30 | } |
| 31 | |
| 32 | Result<BytesView> ValdiPacket::read(const Byte* data, size_t size) { |
| 33 | const auto* dataEnd = data + size; |
| 34 | auto parser = Parser(data, dataEnd); |
| 35 | |
| 36 | auto moduleHeaderResult = parser.parseStruct<ValdiPacketHeader>(); |
| 37 | if (!moduleHeaderResult) { |
| 38 | return ValdiPacket::incompletePacketError(); |
| 39 | } |
| 40 | |
| 41 | const auto& moduleHeader = moduleHeaderResult.value(); |
| 42 | if (moduleHeader->magic != kValdiMagic) { |
| 43 | return Error(STRING_FORMAT("magic is incorrect, expected {} got {}", kValdiMagic, moduleHeader->magic)); |
| 44 | } |
| 45 | |
| 46 | auto expectedLen = static_cast<size_t>(moduleHeader->totalDataLength); |
| 47 | const auto* expectedEndPtr = parser.getCurrent() + expectedLen; |
| 48 | if (expectedEndPtr > dataEnd) { |
| 49 | return ValdiPacket::incompletePacketError(); |
| 50 | } |
| 51 | |
| 52 | return BytesView(nullptr, parser.getCurrent(), expectedLen); |
| 53 | } |
| 54 | |
| 55 | size_t ValdiPacket::write(const Byte* data, size_t size, ByteBuffer& out) { |
| 56 | ValdiPacketHeader header; |
nothing calls this directly
no test coverage detected