code wiki / _hdl_build / nx_video_sniff_api_gate.nx
nx_video_sniff_api_gate.nx source
↩ module page · 58 lines · 3280 B
1import "nx_gate_gn.nx"
2import "nx_gate_base.nx"
3// nx_video_sniff_api_gate.nx -- proves the API layer: the sniff result formats as a JSON API response and a
4// `?url=` request query parses (URL-decoded). This is the contract a daemon route / MCP tool returns + reads. license_tier: ORIGINAL expect_exit: 0
5import "nx_syscalls.nx"
6import "nx_js_eval.nx"
7import "nx_media_jsexec.nx"
8import "nx_video_sniff.nx"
9
10func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw("
11" as *u8); return ok }
12func gsl(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
13func streq(a: *u8, b: *u8) -> i64 { var i: i64=0; while 1==1 { let x: i64=a[i]&0xff; let y: i64=b[i]&0xff; if x!=y { return 0 } if x==0 { return 1 } i=i+1 } return 0 }
14
15func chk_json(kind: i64, plan: *u8, want: *u8) -> i64 {
16 let out: *u8 = sys_mmap(2560)
17 vs_result_json(kind, plan, out, 2560)
18 if streq(out, want) == 1 { return 1 }
19 gw(" got=[" as *u8); gw(out); gw("]\n" as *u8); return 0
20}
21func chk_query(q: *u8, want: *u8) -> i64 {
22 let out: *u8 = sys_mmap(2048)
23 vs_query_url(q, gsl(q), out, 2048)
24 if streq(out, want) == 1 { return 1 }
25 gw(" got=[" as *u8); gw(out); gw("]\n" as *u8); return 0
26}
27
28func main() -> i64 {
29 gw("video-sniff API gate (result -> JSON + request ?url= -> decoded)\n" as *u8)
30 var pass: i64 = 0
31 var ttl: i64 = 0
32
33 // --- result -> JSON ---
34 ttl=ttl+1; pass=pass+grow("J1 hls -> found+route+url\x00" as *u8,
35 chk_json(VSK_HLS, "ROUTE=hls URL=https://cdn/x.m3u8" as *u8, "{\"found\":true,\"route\":\"hls\",\"url\":\"https://cdn/x.m3u8\"}" as *u8))
36 ttl=ttl+1; pass=pass+grow("J2 none -> found:false url:null\x00" as *u8,
37 chk_json(VSK_NONE, "ROUTE=none URL=-" as *u8, "{\"found\":false,\"route\":\"none\",\"url\":null}" as *u8))
38 ttl=ttl+1; pass=pass+grow("J3 guard-killed -> found:false\x00" as *u8,
39 chk_json(VSK_KILLED, "ROUTE=guard-killed URL=- (runaway)" as *u8, "{\"found\":false,\"route\":\"guard-killed\",\"url\":null}" as *u8))
40 ttl=ttl+1; pass=pass+grow("J4 direct -> found+mp4\x00" as *u8,
41 chk_json(VSK_DIRECT, "ROUTE=direct URL=https://c/v.mp4" as *u8, "{\"found\":true,\"route\":\"direct\",\"url\":\"https://c/v.mp4\"}" as *u8))
42 // --- request ?url= parse (URL-decoded) ---
43 ttl=ttl+1; pass=pass+grow("Q1 percent-decode https%3A%2F%2F...\x00" as *u8,
44 chk_query("url=https%3A%2F%2Fx.com%2Fp%2Fm.m3u8" as *u8, "https://x.com/p/m.m3u8" as *u8))
45 ttl=ttl+1; pass=pass+grow("Q2 url= amid other params\x00" as *u8,
46 chk_query("foo=1&url=https://a.b/c&bar=2" as *u8, "https://a.b/c" as *u8))
47 ttl=ttl+1; pass=pass+grow("Q3 '+' -> space\x00" as *u8,
48 chk_query("url=a+b+c" as *u8, "a b c" as *u8))
49 ttl=ttl+1
50 let q4o: *u8 = sys_mmap(2048)
51 let q4q: *u8 = "noturl=1&x=2" as *u8
52 let q4n: i64 = vs_query_url(q4q, gsl(q4q), q4o, 2048)
53 pass=pass+grow("Q4 no url param -> empty (len 0)\x00" as *u8, (q4n == 0) as i64)
54
55 gw("pass=" as *u8); gn(pass); gw("/" as *u8); gn(ttl); gw("\n" as *u8)
56 if pass == ttl { gw("verdict=GREEN (sniff result -> JSON API response + request ?url= parsing)\n" as *u8); sys_exit(0); return 0 }
57 gw("verdict=RED\n" as *u8); sys_exit(1); return 1
58}