roo_transport
API Documentation for roo_transport
Loading...
Searching...
No Matches
packet_sender_over_stream.cpp
Go to the documentation of this file.
2
3#include "roo_collections/hash.h"
4#include "roo_io/memory/store.h"
5#include "roo_io/third_party/nanocobs/cobs.h"
6#include "roo_logging.h"
8
9namespace roo_transport {
10
12 : out_(out), buf_(new roo::byte[256]) {}
13
14void PacketSenderOverStream::send(const roo::byte* buf, size_t len) {
15 // We will use 4 bytes for checksum, and 2 bytes for COBS overhead.
16 CHECK_LE(len, kMaxPacketSize);
17 buf_[0] = (roo::byte)COBS_TINYFRAME_SENTINEL_VALUE;
18 memcpy(&buf_[1], buf, len);
19 uint32_t hash =
20 roo_collections::murmur3_32(&buf_[1], len, kPacketOverStreamSeed);
21 roo_io::StoreBeU32(hash, &buf_[len + 1]);
22 buf_[len + 5] = (roo::byte)COBS_TINYFRAME_SENTINEL_VALUE;
23 CHECK_EQ(COBS_RET_SUCCESS, cobs_encode_tinyframe(buf_.get(), len + 6));
24 out_.writeFully(buf_.get(), len + 6);
25}
26
27} // namespace roo_transport
void send(const roo::byte *buf, size_t len) override
Sends one packet payload.
static constexpr size_t kMaxPacketSize
Maximum payload size of one packet.
PacketSenderOverStream(roo_io::OutputStream &out)
Creates sender writing framed transport packets to out.
static const uint32_t kPacketOverStreamSeed
Definition seed.h:9