32 [[nodiscard]]
static auto parse(std::span<const uint8_t> data)
40 [[nodiscard]]
static auto parse_all(std::span<const uint8_t> data)
48 [[nodiscard]]
static auto peek_type(std::span<const uint8_t> data)
53 [[nodiscard]]
static auto parse_padding(std::span<const uint8_t> data)
56 [[nodiscard]]
static auto parse_ping(std::span<const uint8_t> data)
59 [[nodiscard]]
static auto parse_ack(std::span<const uint8_t> data,
bool has_ecn)
68 [[nodiscard]]
static auto parse_crypto(std::span<const uint8_t> data)
71 [[nodiscard]]
static auto parse_new_token(std::span<const uint8_t> data)
74 [[nodiscard]]
static auto parse_stream(std::span<const uint8_t> data, uint8_t flags)
77 [[nodiscard]]
static auto parse_max_data(std::span<const uint8_t> data)
83 [[nodiscard]]
static auto parse_max_streams(std::span<const uint8_t> data,
bool bidi)
129 [[nodiscard]]
static auto build(
const frame& f) -> std::vector<uint8_t>;
136 [[nodiscard]]
static auto build_padding(
size_t count = 1) -> std::vector<uint8_t>;
142 [[nodiscard]]
static auto build_ping() -> std::vector<uint8_t>;
157 -> std::vector<uint8_t>;
165 -> std::vector<uint8_t>;
180 -> std::vector<uint8_t>;
189 bool include_length =
true)
190 -> std::vector<uint8_t>;
198 -> std::vector<uint8_t>;
206 -> std::vector<uint8_t>;
214 -> std::vector<uint8_t>;
222 -> std::vector<uint8_t>;
230 -> std::vector<uint8_t>;
238 -> std::vector<uint8_t>;
246 -> std::vector<uint8_t>;
254 -> std::vector<uint8_t>;
262 -> std::vector<uint8_t>;
270 -> std::vector<uint8_t>;
278 -> std::vector<uint8_t>;
288 static void append_varint(std::vector<uint8_t>& buffer, uint64_t value);
292 std::span<const uint8_t> data);
Builder for QUIC frames (RFC 9000 Section 12)
static auto build_path_response(const path_response_frame &f) -> std::vector< uint8_t >
Build PATH_RESPONSE frame.
static auto build_streams_blocked(const streams_blocked_frame &f) -> std::vector< uint8_t >
Build STREAMS_BLOCKED frame.
static auto build_reset_stream(const reset_stream_frame &f) -> std::vector< uint8_t >
Build RESET_STREAM frame.
static auto build_stream(const stream_frame &f, bool include_length=true) -> std::vector< uint8_t >
Build STREAM frame.
static auto build_stop_sending(const stop_sending_frame &f) -> std::vector< uint8_t >
Build STOP_SENDING frame.
static auto build_ack(const ack_frame &f) -> std::vector< uint8_t >
Build ACK frame.
static auto build_padding(size_t count=1) -> std::vector< uint8_t >
Build PADDING frame.
static auto build_max_stream_data(const max_stream_data_frame &f) -> std::vector< uint8_t >
Build MAX_STREAM_DATA frame.
static auto build_data_blocked(const data_blocked_frame &f) -> std::vector< uint8_t >
Build DATA_BLOCKED frame.
static auto build_new_token(const new_token_frame &f) -> std::vector< uint8_t >
Build NEW_TOKEN frame.
static auto build_max_data(const max_data_frame &f) -> std::vector< uint8_t >
Build MAX_DATA frame.
static auto build_ping() -> std::vector< uint8_t >
Build PING frame.
static auto build_new_connection_id(const new_connection_id_frame &f) -> std::vector< uint8_t >
Build NEW_CONNECTION_ID frame.
static auto build_crypto(const crypto_frame &f) -> std::vector< uint8_t >
Build CRYPTO frame.
static auto build(const frame &f) -> std::vector< uint8_t >
Build any frame from variant.
static void append_bytes(std::vector< uint8_t > &buffer, std::span< const uint8_t > data)
static auto build_path_challenge(const path_challenge_frame &f) -> std::vector< uint8_t >
Build PATH_CHALLENGE frame.
static auto build_connection_close(const connection_close_frame &f) -> std::vector< uint8_t >
Build CONNECTION_CLOSE frame.
static auto build_handshake_done() -> std::vector< uint8_t >
Build HANDSHAKE_DONE frame.
static void append_varint(std::vector< uint8_t > &buffer, uint64_t value)
static auto build_stream_data_blocked(const stream_data_blocked_frame &f) -> std::vector< uint8_t >
Build STREAM_DATA_BLOCKED frame.
static auto build_retire_connection_id(const retire_connection_id_frame &f) -> std::vector< uint8_t >
Build RETIRE_CONNECTION_ID frame.
static auto build_max_streams(const max_streams_frame &f) -> std::vector< uint8_t >
Build MAX_STREAMS frame.
Parser for QUIC frames (RFC 9000 Section 12)
static auto parse_connection_close(std::span< const uint8_t > data, bool is_app) -> Result< std::pair< frame, size_t > >
static auto parse_path_response(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_max_stream_data(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_ack(std::span< const uint8_t > data, bool has_ecn) -> Result< std::pair< frame, size_t > >
static auto peek_type(std::span< const uint8_t > data) -> Result< std::pair< uint64_t, size_t > >
Get the frame type from raw data without full parsing.
static auto parse_ping(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_all(std::span< const uint8_t > data) -> Result< std::vector< frame > >
Parse all frames from buffer.
static auto parse_reset_stream(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_data_blocked(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_retire_connection_id(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_max_streams(std::span< const uint8_t > data, bool bidi) -> Result< std::pair< frame, size_t > >
static auto parse_stream_data_blocked(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_stream(std::span< const uint8_t > data, uint8_t flags) -> Result< std::pair< frame, size_t > >
static auto parse_path_challenge(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_padding(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_new_connection_id(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_crypto(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_stop_sending(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_new_token(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
Parse a single frame from buffer.
static auto parse_max_data(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_handshake_done(std::span< const uint8_t > data) -> Result< std::pair< frame, size_t > >
static auto parse_streams_blocked(std::span< const uint8_t > data, bool bidi) -> Result< std::pair< frame, size_t > >
std::variant< padding_frame, ping_frame, ack_frame, reset_stream_frame, stop_sending_frame, crypto_frame, new_token_frame, stream_frame, max_data_frame, max_stream_data_frame, max_streams_frame, data_blocked_frame, stream_data_blocked_frame, streams_blocked_frame, new_connection_id_frame, retire_connection_id_frame, path_challenge_frame, path_response_frame, connection_close_frame, handshake_done_frame > frame
Variant type holding any QUIC frame.
Network-specific error and result type definitions.
ACK frame (RFC 9000 Section 19.3)
CONNECTION_CLOSE frame (RFC 9000 Section 19.19)
CRYPTO frame (RFC 9000 Section 19.6)
DATA_BLOCKED frame (RFC 9000 Section 19.12)
MAX_DATA frame (RFC 9000 Section 19.9)
MAX_STREAM_DATA frame (RFC 9000 Section 19.10)
MAX_STREAMS frame (RFC 9000 Section 19.11)
NEW_CONNECTION_ID frame (RFC 9000 Section 19.15)
NEW_TOKEN frame (RFC 9000 Section 19.7)
PATH_CHALLENGE frame (RFC 9000 Section 19.17)
PATH_RESPONSE frame (RFC 9000 Section 19.18)
RESET_STREAM frame (RFC 9000 Section 19.4)
RETIRE_CONNECTION_ID frame (RFC 9000 Section 19.16)
STOP_SENDING frame (RFC 9000 Section 19.5)
STREAM_DATA_BLOCKED frame (RFC 9000 Section 19.13)
STREAM frame (RFC 9000 Section 19.8)
STREAMS_BLOCKED frame (RFC 9000 Section 19.14)