code wiki / _hdl_build / nx_vroom_gate.nx

nx_vroom_gate.nx source

↩ module page · 88 lines · 4644 B

1// nx_vroom_gate.nx -- proves the sovereign video-room handler (nx_vroom) end to end 2// WITHOUT sockets/TLS: POST stores a peer's frame; GET /frames returns OTHER peers' 3// frames as [id u64][len u32][bytes] records (not self); GET /roster returns JSON; 4// rooms stay isolated. Built nx_cc_sovereign -> nxasm_x86 (no gcc, no .sh). 5// license_tier: ORIGINAL 6import "nx_syscalls.nx" 7import "nx_gate_emit_lib.nx" 8import "nx_room_relay.nx" 9import "nx_vroom.nx" 10import "nx_gate_verdict.nx" 11 12func rd_u64(b: *u8, o: i64) -> i64 { var v: i64=0; var i: i64=0; while i<8 { v = v | ((b[o+i] as i64) << (i*8)); i=i+1 } return v } 13func rd_u32(b: *u8, o: i64) -> i64 { var v: i64=0; var i: i64=0; while i<4 { v = v | ((b[o+i] as i64) << (i*8)); i=i+1 } return v } 14 15func main() -> i64 { 16 g_puts("nx_vroom gate (sovereign video-room handler, server-relay, no WebRTC)\n" as *u8) 17 var pass: i64 = 0; var total: i64 = 0 18 19 let N: i64 = 8 20 let SB: i64 = 65536 21 let st: *i64 = sys_mmap((2 + 5*N) * 8) as *i64 22 let arena: *u8 = sys_mmap(N * SB) 23 rr_init(st, N, SB) 24 let ids: *i64 = sys_mmap(N * 8) as *i64 25 let out: *u8 = sys_mmap(131072) 26 let now: i64 = 1000 27 let ttl: i64 = 8000 28 29 let req_p100: *u8 = "POST /video/post?room=fam&id=100 HTTP/1.1\r\nContent-Length: 5\r\n\r\nHELLO" as *u8 30 let req_p101: *u8 = "POST /video/post?room=fam&id=101 HTTP/1.1\r\nContent-Length: 6\r\n\r\nWORLD!" as *u8 31 let req_fr: *u8 = "GET /video/frames?room=fam&id=100 HTTP/1.1\r\n\r\n" as *u8 32 let req_ros: *u8 = "GET /video/roster?room=fam&id=100 HTTP/1.1\r\n\r\n" as *u8 33 let req_iso: *u8 = "GET /video/frames?room=other&id=999 HTTP/1.1\r\n\r\n" as *u8 34 35 let rm_fam: i64 = vr_room_hash(req_p100, vr_strlen(req_p100)) 36 37 // 1) POST 100 -> 200 + stored frame "HELLO" 38 let rp1: i64 = vr_handle(req_p100, vr_strlen(req_p100), st, arena, now, ttl, out, 131072, ids) 39 var c1: i64 = vr_contains(out, rp1, "200 OK" as *u8, 6) 40 let s100: i64 = rr_live(st, rm_fam, 100, now, ttl) 41 if s100 < 0 { c1 = 0 } else { 42 if rr_flen(st, s100) != 5 { c1 = 0 } 43 if arena[s100*SB+0] != (72 as u8) { c1 = 0 } // 'H' 44 if arena[s100*SB+4] != (79 as u8) { c1 = 0 } // 'O' 45 } 46 pass = pass + g_check("POST stores peer 100 frame (HELLO), returns 200" as *u8, c1); total=total+1 47 48 // 2) POST 101 49 let rp2: i64 = vr_handle(req_p101, vr_strlen(req_p101), st, arena, now, ttl, out, 131072, ids) 50 let c2: i64 = vr_contains(out, rp2, "200 OK" as *u8, 6) 51 pass = pass + g_check("POST stores peer 101 (WORLD!), returns 200" as *u8, c2); total=total+1 52 53 // 3) GET frames from 100 -> exactly peer 101's record [101][6]["WORLD!"], not self 54 let rf: i64 = vr_handle(req_fr, vr_strlen(req_fr), st, arena, now, ttl, out, 131072, ids) 55 let bs: i64 = vr_body_start(out, rf) 56 var c3: i64 = 1 57 let blen: i64 = rf - bs 58 if blen != 18 { c3 = 0 } // exactly one record: 12 + 6 59 if c3 == 1 { 60 if rd_u64(out, bs) != 101 { c3 = 0 } 61 if rd_u32(out, bs+8) != 6 { c3 = 0 } 62 if out[bs+12] != (87 as u8) { c3 = 0 } // 'W' 63 if out[bs+17] != (33 as u8) { c3 = 0 } // '!' 64 } 65 pass = pass + g_check("GET /frames returns other peer 101's frame (not self 100)" as *u8, c3); total=total+1 66 67 // 4) roster from 100 -> JSON contains 101, not 100 68 let rr: i64 = vr_handle(req_ros, vr_strlen(req_ros), st, arena, now, ttl, out, 131072, ids) 69 var c4: i64 = vr_contains(out, rr, "101" as *u8, 3) 70 if vr_contains(out, rr, "100" as *u8, 3) == 1 { c4 = 0 } 71 pass = pass + g_check("GET /roster lists 101 (other), excludes self 100" as *u8, c4); total=total+1 72 73 // 5) room isolation -- different room sees nothing 74 let ri: i64 = vr_handle(req_iso, vr_strlen(req_iso), st, arena, now, ttl, out, 131072, ids) 75 let bsi: i64 = vr_body_start(out, ri) 76 pass = pass + g_check("room isolation: other room has 0 frames" as *u8, (ri - bsi) == 0); total=total+1 77 78 g_puts("---- vroom gate: passed " as *u8); g_pn(pass); g_puts(" / " as *u8); g_pn(total); g_puts(" ----\n" as *u8) 79 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 80 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 81 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 82 let ctr__dry: *i64 = gv_ctr() 83 ctr__dry[0] = pass 84 ctr__dry[1] = total 85 let rc__dry: i64 = gv_verdict("VROOM-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8) 86 sys_exit(rc__dry) 87 return rc__dry 88}