code wiki / _hdl_build / nx_room_relay_gate.nx
nx_room_relay_gate.nx source
↩ module page · 78 lines · 3685 B
1// nx_room_relay_gate.nx -- proves the sovereign server-relay core (nx_room_relay):
2// 1) roster lists OTHER live peers in a room (not self), correct ids
3// 2) room isolation -- peers in different rooms never see each other
4// 3) frame update -- re-post replaces a peer's latest frame + seq (no dup slot)
5// 4) staleness -- peers past TTL drop out of the roster
6// 5) neg-control -- a ghost peer that never posted is not found
7// Built nx_cc_sovereign -> nxasm_x86 (no gcc, no .sh). Composes with nx_room_stream.
8// license_tier: ORIGINAL
9import "nx_syscalls.nx"
10import "nx_gate_emit_lib.nx"
11import "nx_room_relay.nx"
12
13func main() -> i64 {
14 g_puts("nx_room_relay gate (sovereign server-relay core, no WebRTC/STUN/TURN)\n" as *u8)
15 var pass: i64 = 0; var total: i64 = 0
16
17 let N: i64 = 8
18 let SB: i64 = 512
19 let st: *i64 = sys_mmap((2 + 5*N) * 8) as *i64
20 let arena: *u8 = sys_mmap(N * SB)
21 rr_init(st, N, SB)
22
23 // distinct frame payloads per peer
24 let fa: *u8 = sys_mmap(64); var i: i64=0; while i<20 { fa[i]=(100+i) as u8; i=i+1 }
25 let fb: *u8 = sys_mmap(64); i=0; while i<20 { fb[i]=(40+i) as u8; i=i+1 }
26 let fc: *u8 = sys_mmap(64); i=0; while i<20 { fc[i]=(7+i) as u8; i=i+1 }
27 let fb2: *u8 = sys_mmap(64); i=0; while i<20 { fb2[i]=(200-i) as u8; i=i+1 }
28 let fd: *u8 = sys_mmap(64); i=0; while i<20 { fd[i]=(3*i) as u8; i=i+1 }
29
30 let ROOM_A: i64 = 0xAAA111
31 let ROOM_B: i64 = 0xBBB222
32
33 rr_post(st, arena, ROOM_A, 100, 1000, 1, fa, 20)
34 rr_post(st, arena, ROOM_A, 101, 1000, 1, fb, 20)
35 rr_post(st, arena, ROOM_A, 102, 1000, 1, fc, 20)
36
37 // 1) roster from peer 100 in room A -> [101,102]
38 let out: *i64 = sys_mmap(N * 8) as *i64
39 var c: i64 = rr_roster(st, ROOM_A, 100, 1000, 8000, out)
40 var r1: i64 = 1
41 if c != 2 { r1 = 0 }
42 if out[0] != 101 { r1 = 0 }
43 if out[1] != 102 { r1 = 0 }
44 pass = pass + g_check("roster lists other live peers (101,102), not self" as *u8, r1); total=total+1
45
46 // 2) room isolation -- peer 200 in room B; A unchanged, B alone
47 rr_post(st, arena, ROOM_B, 200, 1000, 1, fd, 20)
48 let ca: i64 = rr_roster(st, ROOM_A, 100, 1000, 8000, out)
49 let cb: i64 = rr_roster(st, ROOM_B, 200, 1000, 8000, out)
50 var r2: i64 = 1
51 if ca != 2 { r2 = 0 }
52 if cb != 0 { r2 = 0 }
53 pass = pass + g_check("room isolation (A still 2, B alone)" as *u8, r2); total=total+1
54
55 // 3) frame update -- re-post peer 101 with new seq + new frame; no dup slot
56 rr_post(st, arena, ROOM_A, 101, 1100, 5, fb2, 20)
57 let c3: i64 = rr_roster(st, ROOM_A, 100, 1100, 8000, out) // still exactly 2 (no dup)
58 let s101: i64 = rr_live(st, ROOM_A, 101, 1100, 8000)
59 var r3: i64 = 1
60 if c3 != 2 { r3 = 0 }
61 if s101 < 0 { r3 = 0 } else {
62 if rr_seq(st, s101) != 5 { r3 = 0 }
63 var k: i64 = 0; while k < 20 { if arena[s101*SB + k] != fb2[k] { r3 = 0 } k = k + 1 }
64 }
65 pass = pass + g_check("re-post replaces frame+seq, no duplicate slot" as *u8, r3); total=total+1
66
67 // 4) staleness -- advance now past TTL; everyone drops out
68 let c4: i64 = rr_roster(st, ROOM_A, 100, 20000, 8000, out)
69 pass = pass + g_check("stale peers (past TTL) drop from roster" as *u8, c4 == 0); total=total+1
70
71 // 5) neg-control -- ghost peer never posted
72 let ghost: i64 = rr_find(st, ROOM_A, 999)
73 pass = pass + g_check("ghost peer not found (neg-control)" as *u8, ghost < 0); total=total+1
74
75 g_puts("---- room-relay gate: passed " as *u8); g_pn(pass); g_puts(" / " as *u8); g_pn(total); g_puts(" ----\n" as *u8)
76 if pass == total { g_puts("verdict=GREEN\n" as *u8); sys_exit(0); return 0 }
77 g_puts("verdict=RED\n" as *u8); sys_exit(1); return 1
78}