wired
libc-free QUIC/HTTP3 SDK in C for x86_64-linux
Loading...
Searching...
No Matches
recv_spaces.h
1#ifndef PNSPACES_RECV_SPACES_H
2#define PNSPACES_RECV_SPACES_H
3
5#include "transport/conn/lifecycle/conn/pnspace.h"
6#include "transport/conn/pnspace/recvpn/recvpn.h"
7#include "transport/recovery/detect/ackgen/ackrange.h"
8
9/* RFC 9000 13.1: each packet number space independently records the packet
10 * numbers it has received and builds its own ACK ranges from them. */
11
12/* Holds largest + the window below it, so at most window+1 received PNs feed
13 * the ACK-range builder. */
14#define PNSPACES_ACK_CAP (RECVPN_WINDOW + 1)
15
18typedef struct {
19 recvpn r[PNS_COUNT];
21
22void pnspaces_recv_init(pnspaces_recv* s);
23
24/* Record packet number pn as received in `space` only. */
25void pnspaces_on_recv(pnspaces_recv* s, int space, u64 pn);
26
32
33/* Build the ACK ranges for `space` from its received PNs (layout per
34 * ackgen_build_ranges / RFC 9000 19.3). Returns 1 on success, 0 if the
35 * space has received nothing or cap is too small. */
36int pnspaces_ack_ranges(
37 const pnspaces_recv* s, int space, const pnspaces_ack_out* out);
38
39#endif
Where pnspaces_ack_ranges writes the largest acked and the ranges.
Definition recv_spaces.h:28
u64 * largest
out: highest received packet number in space
Definition recv_spaces.h:29
u64obuf * ranges
out: encoded ACK ranges, see ackgen_build_ranges
Definition recv_spaces.h:30
Per-space received-packet-number tracking (recvpn), one per PNS_*.
Definition recv_spaces.h:18
recvpn r[PNS_COUNT]
indexed by PNS_INITIAL/HANDSHAKE/APP
Definition recv_spaces.h:19
Sliding window of received packet numbers for one packet number space.
Definition recvpn.h:14
A fixed-capacity u64 output buffer; the callee fills *len.
Definition ackrange.h:13
Linux direct syscalls.
unsigned long u64
unsigned 64-bit integer
Definition types.h:13