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}