wired
libc-free QUIC/HTTP3 SDK in C for x86_64-linux
Loading...
Searching...
No Matches
version.h
1#ifndef VERSION_VERSION_H
2#define VERSION_VERSION_H
3
5
6/* QUIC version numbers and the version_information transport parameter
7 * (RFC 9368) used for compatible version negotiation. */
8
9#define VERSION_1 0x00000001u
10#define VERSION_2 0x6b3343cfu /* RFC 9369 */
11
12/* A reserved version matches the 0x?a?a?a?a GREASE pattern (RFC 8999 6) and
13 * is never selected. */
14int version_is_reserved(u32 version);
15
16/* version_information transport parameter id (RFC 9368 3). */
17#define TP_VERSION_INFORMATION 0x11
18#define VI_MAX_AVAILABLE 16
19
21typedef struct {
24 u32 available[VI_MAX_AVAILABLE];
26
28typedef struct {
29 const u32* list;
31} verlist;
32
33static inline verlist verlist_of(const u32* list, usz n) {
34 verlist v = {list, n};
35 return v;
36}
37
38/* Encode the version_information TP (id, length, Chosen Version, Available
39 * Versions) into buf of cap bytes. Returns bytes written, or 0. */
40usz version_info_encode(u8* buf, usz cap, const version_info* vi);
41
42/* Decode a version_information TP at buf (n readable). Returns bytes
43 * consumed, or 0 on malformed input. Chosen must appear in Available for a
44 * client-sent parameter; the caller validates that per RFC 9368 4. */
45usz version_info_decode(const u8* buf, usz n, version_info* vi);
46
47#endif
A read-only view of a version-number list (offered, supported, etc).
Definition version.h:28
usz n
number of entries at list
Definition version.h:30
const u32 * list
first version number
Definition version.h:29
A decoded version_information transport parameter (RFC 9368 3).
Definition version.h:21
usz n_available
entries used in available[]
Definition version.h:23
u32 available[VI_MAX_AVAILABLE]
in preference order (client)
Definition version.h:24
u32 chosen
Chosen Version.
Definition version.h:22
Linux direct syscalls.
unsigned int u32
unsigned 32-bit integer
Definition types.h:15
u64 usz
unsigned size (size_t equivalent)
Definition types.h:20
unsigned char u8
unsigned 8-bit integer / byte
Definition types.h:18