Skip to content

ryu_ldn::protocol::PacketBuffer

TCP stream buffer for accumulating and extracting packets.

Usage:

Type: uint8_t

Type: size_t

void PacketBuffer()

Default constructor - initializes empty buffer.

Note: For production use, BufferSize should be >= sizeof(LdnHeader) + MAX_PACKET_SIZE to handle maximum-sized packets. Smaller buffers can be used for testing or when only small packets are expected.

void reset()

Reset buffer to empty state.

size_t size()

Get current data size in buffer.

Number of bytes in bufferreturn

Returns: size_t

bool empty()

Check if buffer is empty.

true if no data in bufferreturn

Returns: bool

size_t available()

Get available space in buffer.

Number of bytes that can be appendedreturn

Returns: size_t

const uint8_t * data()

Get pointer to raw buffer data.

Pointer to buffer startreturn

Returns: const uint8_t *

BufferResult append(const uint8_t * data, size_t size)

Append data to buffer.

dataData to appendsizeSize of dataparamor errorreturn

Parameters:

  • data (const uint8_t *)
  • size (size_t)

Returns: BufferResult

bool has_complete_packet()

Check if buffer contains a complete packet.

true if at least one complete packet is availablereturn

Returns: bool

BufferResult peek_packet_info(size_t & packet_size)

Get information about next packet without consuming it.

packet_sizeSize of complete packet (if available)paramBufferResult indicating statusreturn

Parameters:

  • packet_size (size_t &)

Returns: BufferResult

const uint8_t * peek_packet(size_t & packet_size)

Peek at the next complete packet without consuming it.

packet_sizeSize of the packetparamPointer to packet data, or nullptr if no complete packetreturn

Parameters:

  • packet_size (size_t &)

Returns: const uint8_t *

PacketId peek_packet_type()

Get packet type of next packet (if available)

PacketId of next packet, or Initialize (0) if no packetreturn

Returns: PacketId

void consume(size_t size)

Consume (remove) bytes from the front of the buffer.

Typically called after processing a packet to remove it from buffer. Uses memmove to shift remaining data to front.

Parameters:

  • size (size_t)
BufferResult extract_packet(uint8_t * out_buffer, size_t out_buffer_size, size_t & packet_size)

Extract next complete packet into output buffer.

Copies the packet to output buffer and consumes it from internal buffer.

Parameters:

  • out_buffer (uint8_t *)
  • out_buffer_size (size_t)
  • packet_size (size_t &)

Returns: BufferResult

size_t discard_until_valid()

Discard invalid data until valid header found or buffer empty.

Use this to recover from protocol errors or corrupted data. Scans for PROTOCOL_MAGIC and discards data before it.

Returns: size_t

uint8_t * write_ptr()

Get writable pointer for direct recv() into buffer.

Use withto recv() directly into buffer:

Returns: uint8_t *

void advance_write(size_t size)

Advance write position after direct write.

sizeNumber of bytes writtenparam

Parameters:

  • size (size_t)
constexpr size_t capacity()

Get buffer capacity.

Total buffer sizereturn

Returns: constexpr size_t