32#ifndef DETERMINISTICESPASYNCWEBSERVER_QUIC_CONN_H
33#define DETERMINISTICESPASYNCWEBSERVER_QUIC_CONN_H
44#ifndef DETWS_QUIC_MAX_DATAGRAM
45#define DETWS_QUIC_MAX_DATAGRAM 1350
47#ifndef DETWS_QUIC_CRYPTO_RX
48#define DETWS_QUIC_CRYPTO_RX 2048
50#ifndef DETWS_QUIC_MAX_STREAMS
51#define DETWS_QUIC_MAX_STREAMS DETWS_H3_MAX_STREAMS
53#ifndef DETWS_QUIC_STREAM_RX
54#define DETWS_QUIC_STREAM_RX 2048
56#ifndef DETWS_QUIC_STREAM_TX
57#define DETWS_QUIC_STREAM_TX 2048
59#ifndef DETWS_QUIC_PTO_MS
60#define DETWS_QUIC_PTO_MS 1000
72 uint8_t rx[DETWS_QUIC_STREAM_RX];
74 uint8_t tx[DETWS_QUIC_STREAM_TX];
82struct QuicConnCallbacks
85 void (*on_stream_data)(
void *app, QuicConn *qc, uint64_t stream_id,
const uint8_t *data,
size_t len,
bool fin);
87 void (*on_handshake_done)(
void *app, QuicConn *qc);
95 int64_t largest_acked;
99 bool ack_eliciting_rx;
101 uint64_t crypto_rx_off;
102 uint8_t crypto_rx[DETWS_QUIC_CRYPTO_RX];
103 size_t crypto_rx_have;
104 uint64_t crypto_tx_off;
110 uint8_t scid[QUIC_MAX_CID_LEN];
112 uint8_t dcid[QUIC_MAX_CID_LEN];
114 uint8_t odcid[QUIC_MAX_CID_LEN];
117 QuicInitialSecrets initial;
120 QuicPnSpace space[3];
122 QuicStream streams[DETWS_QUIC_MAX_STREAMS];
124 QuicConnCallbacks cb;
126 bool handshake_done_queued;
127 bool handshake_done_sent;
132 bool address_validated;
136 uint32_t pto_deadline_ms;
140 uint64_t close_error;
141 uint64_t close_frame_type;
158void quic_conn_init(QuicConn *qc,
const QuicTlsConfig *cfg,
const uint8_t *odcid, uint8_t odcid_len,
159 const uint8_t *peer_scid, uint8_t peer_scid_len,
const uint8_t *our_scid, uint8_t our_scid_len,
160 const QuicConnCallbacks *cb);
167bool quic_conn_recv(QuicConn *qc,
const uint8_t *datagram,
size_t len);
174size_t quic_conn_send(QuicConn *qc, uint8_t *out,
size_t cap);
183void quic_conn_on_timeout(QuicConn *qc, uint32_t now_ms);
189size_t quic_conn_stream_send(QuicConn *qc, uint64_t stream_id,
const uint8_t *data,
size_t len,
bool fin);
197void quic_conn_close(QuicConn *qc, uint64_t error_code);
200bool quic_conn_established(
const QuicConn *qc);
203bool quic_conn_is_closed(
const QuicConn *qc);
User-facing configuration for DeterministicESPAsyncWebServer.
QUIC packet protection: Initial secrets, AEAD payload protection, header protection,...
TLS 1.3 server handshake state machine for QUIC (RFC 9001 / RFC 8446).