wired
libc-free QUIC/HTTP3 SDK in C for x86_64-linux
Loading...
Searching...
No Matches
recvpn.h
1#ifndef RECVPN_RECVPN_H
2#define RECVPN_RECVPN_H
3
5
6/* RFC 9000 13.2: a receiver tracks which packet numbers it has seen so it can
7 * drop duplicates and acknowledge the rest. We keep the largest number seen
8 * and a sliding bitmap of the window below it, which is enough to detect
9 * duplicates and to find the contiguous run for the ACK's first range. */
10
11#define RECVPN_WINDOW 64 /* packets below `largest` tracked in the bitmap */
12
14typedef struct {
17 int any;
18} recvpn;
19
20void recvpn_init(recvpn* r);
21
22/* Whether packet number pn has already been recorded (a duplicate). */
23int recvpn_seen(const recvpn* r, u64 pn);
24
25/* Record packet number pn as received. Numbers older than the window are
26 * ignored (treated as already acknowledged). */
27void recvpn_record(recvpn* r, u64 pn);
28
29/* The first ACK range: the count of contiguous packets ending at `largest`
30 * that have been received (0 if none recorded). */
31u64 recvpn_first_range(const recvpn* r);
32
33#endif
Sliding window of received packet numbers for one packet number space.
Definition recvpn.h:14
int any
whether anything has been recorded yet
Definition recvpn.h:17
u64 largest
highest packet number recorded (valid once any seen)
Definition recvpn.h:15
u64 bitmap
bit i set => (largest - 1 - i) was received
Definition recvpn.h:16
Linux direct syscalls.
unsigned long u64
unsigned 64-bit integer
Definition types.h:13