code wiki / _hdl_build / nx_quic_transport_params_test.nx
nx_quic_transport_params_test.nx source
↩ module page · 46 lines · 2747 B
1// nx_quic_transport_params_gate.nx -- RUNG 6a gate: QUIC transport parameters (RFC 9000 sec 18) round-trip
2// + the max_datagram_frame_size negotiation (RFC 9221) that gates the whole FEC'd-video transport. Native.
3// license_tier: ORIGINAL
4import "nx_quic_transport_params.nx"
5import "nx_g_pn_lite_lib.nx"
6import "nx_g_check_lib.nx"
7import "nx_g_puts_lib.nx"
8
9func main() -> i64 {
10 g_puts("nx_quic_transport_params gate -- RFC 9000 sec 18 + RFC 9221 datagram negotiation\n" as *u8)
11 var pass: i64=0; var total: i64=0
12
13 // ---- build a parameter block: idle, max_data, max_datagram_frame_size, initial_src_cid ----
14 let blk: *u8 = sys_mmap(256)
15 var o: i64 = 0
16 o = o + quic_tp_put_int((blk as i64 + o) as *u8, QTP_MAX_IDLE_TIMEOUT, 30000)
17 o = o + quic_tp_put_int((blk as i64 + o) as *u8, QTP_INITIAL_MAX_DATA, 1048576)
18 o = o + quic_tp_put_int((blk as i64 + o) as *u8, QTP_MAX_DATAGRAM_FRAME_SIZE, 65535)
19 let cid: *u8 = sys_mmap(8)
20 var z: i64=0; while z<8 { cid[z]=((z+1)*17 & 255) as u8; z=z+1 }
21 o = o + quic_tp_put_bytes((blk as i64 + o) as *u8, QTP_INITIAL_SRC_CONN_ID, cid, 8)
22 g_puts(" [encoded, total bytes=" as *u8); g_pn(o); g_puts("]\n" as *u8)
23
24 // ---- parse the first tuple (id 0x01 idle=30000) via a single parse_next ----
25 let info: *i64 = sys_mmap(8*3) as *i64
26 let nx0: i64 = quic_tp_parse_next(blk, o, 0, info)
27 var t0_ok: i64=0
28 if nx0 > 0 { if info[0]==QTP_MAX_IDLE_TIMEOUT { if quic_tp_read_int(blk, info[1], info[2])==30000 { t0_ok=1 } } }
29 pass = pass + g_check("parse_next tuple0: id=max_idle_timeout, value=30000" as *u8, t0_ok); total=total+1
30 g_puts(" [tuple0 next-off=" as *u8); g_pn(nx0); g_puts("]\n" as *u8)
31
32 // ---- datagram negotiation scan ----
33 pass = pass + g_check("quic_tp_datagram_size finds max_datagram_frame_size == 65535 (DATAGRAMs enabled)" as *u8, (quic_tp_datagram_size(blk, o) == 65535) as i64); total=total+1
34
35 // ---- a block WITHOUT max_datagram_frame_size -> 0 (DATAGRAMs forbidden) ----
36 let blk2: *u8 = sys_mmap(64)
37 var o2: i64 = 0
38 o2 = o2 + quic_tp_put_int((blk2 as i64 + o2) as *u8, QTP_MAX_IDLE_TIMEOUT, 30000)
39 o2 = o2 + quic_tp_put_int((blk2 as i64 + o2) as *u8, QTP_INITIAL_MAX_DATA, 1048576)
40 pass = pass + g_check("absent param -> quic_tp_datagram_size == 0 (DATAGRAMs forbidden, fail-closed)" as *u8, (quic_tp_datagram_size(blk2, o2) == 0) as i64); total=total+1
41
42 g_puts("---- quic_transport_params gate: passed " as *u8); g_pn(pass); g_puts(" / " as *u8); g_pn(total); g_puts(" ----\n" as *u8)
43 if pass == total { g_puts("VERDICT: GREEN (QUIC transport params + datagram negotiation, RFC 9000/9221, sovereign)\n" as *u8); return 0 }
44 g_puts("VERDICT: RED\n" as *u8)
45 return 1
46}