21#ifndef DETERMINISTICESPASYNCWEBSERVER_QUIC_PACKET_H
22#define DETERMINISTICESPASYNCWEBSERVER_QUIC_PACKET_H
31#define QUIC_VERSION_1 0x00000001u
32#define QUIC_MAX_CID_LEN 20
37 static constexpr uint8_t QUIC_LP_INITIAL = 0x00;
38 static constexpr uint8_t QUIC_LP_0RTT = 0x01;
39 static constexpr uint8_t QUIC_LP_HANDSHAKE = 0x02;
40 static constexpr uint8_t QUIC_LP_RETRY = 0x03;
50 uint8_t dcid[QUIC_MAX_CID_LEN];
52 uint8_t scid[QUIC_MAX_CID_LEN];
64 uint8_t dcid[QUIC_MAX_CID_LEN];
69bool quic_is_long_header(uint8_t first);
72bool quic_parse_long_header(
const uint8_t *buf,
size_t len, QuicLongHeader *out);
80size_t quic_build_long_header(uint8_t *out,
size_t cap, uint8_t type, uint32_t version,
const uint8_t *dcid,
81 uint8_t dcid_len,
const uint8_t *scid, uint8_t scid_len, uint8_t pn_len);
84bool quic_parse_short_header(
const uint8_t *buf,
size_t len, uint8_t dcid_len, QuicShortHeader *out);
91size_t quic_build_version_negotiation(uint8_t *out,
size_t cap,
const uint8_t *dcid, uint8_t dcid_len,
92 const uint8_t *scid, uint8_t scid_len,
const uint32_t *versions,
98uint8_t quic_pn_length(uint64_t full_pn, int64_t largest_acked);
101size_t quic_pn_encode(uint8_t *out,
size_t cap, uint64_t full_pn, int64_t largest_acked);
104uint64_t quic_pn_decode(uint64_t largest_pn, uint64_t truncated_pn, uint8_t pn_nbits);
User-facing configuration for DeterministicESPAsyncWebServer.