code wiki / _hdl_build / nx_route_period_gate_t184.nx
nx_route_period_gate_t184.nx source
↩ module page · 41 lines · 2617 B
1import "nx_mcp_body_gate.nx"
2func r184_get(port:i64,path:*u8,out:*u8)->i64{
3 let addr:*u8=sys_mmap(16);nx_http_server_addr_loopback(addr,port)
4 let fd:i64=sys_socket(2,1,0);if fd<0{return -1}
5 if nx_connect_bounded(fd,addr,16,NX_CONN_DEFAULT_MS)<0{sys_close(fd);return -1}
6 sys_set_socket_timeout(fd,2)
7 let req:*u8=sys_mmap(MBG_REQ_HEADROOM_BYTES)
8 var n:i64=mbg_cat(req,0,"GET ");n=mbg_cat(req,n,path);n=mbg_cat(req,n," HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n")
9 var w:i64=0
10 while w<n{let k:i64=sys_write(fd,(req as i64+w) as *u8,n-w);if k<=0{sys_close(fd);return -1};w=w+k}
11 var p:i64=0;var run:i64=1
12 while run==1{if p>=MBG_RESP_CAP-1{run=0}else{let k:i64=sys_read(fd,(out as i64+p) as *u8,MBG_RESP_CAP-1-p);if k<=0{run=0}else{p=p+k}}}
13 sys_close(fd);return p
14}
15func r184_case(elf:*u8,root:*u8,c:*i64)->i64{
16 let log:*u8=sys_mmap(JR_PATH);mbg_path(log,root,"/server.log")
17 let port:i64=18998;let addr:*u8=sys_mmap(16);nx_http_server_addr_loopback(addr,port)
18 let fd:i64=sys_socket(2,1,0);if fd<0{return 3}
19 let occupied:i64=nx_connect_bounded(fd,addr,16,NX_CONN_DEFAULT_MS);sys_close(fd)
20 if occupied>=0{return 3}
21 let pid:i64=mbg_spawn_cwd(elf,port,log,root);if pid<=0{return 3};sys_sleep_ms(500)
22 let out:*u8=sys_mmap(MBG_RESP_CAP)
23 let n:i64=r184_get(port,"/api/cap/status",out)
24 gv_check("actual status route HTTP200",n>0 && mbg_has(out,n,"HTTP/1.1 200")==1,c)
25 gv_puts("ARTIFACT ");gv_puts(elf);gv_puts("\nSTATUS\n");if n>0{sys_write(1,out,n)}
26 let dn:i64=r184_get(port,"/api/cap/status.",out)
27 gv_check("period-suffixed token is HTTP404",dn>0 && mbg_has(out,dn,"HTTP/1.1 404")==1,c)
28 gv_puts("\nPERIOD\n");if dn>0{sys_write(1,out,dn)};gv_puts("\n")
29 gv_check("isolated daemon reaped",mbg_kill(pid)==1,c);return 0
30}
31func main()->i64{
32 let c:*i64=gv_ctr();gv_head("Routeguard literal versus actual HTTP contract")
33 let root:*u8=sys_mmap(JR_PATH);let n:i64=mbg_catn(root,mbg_cat(root,0,"/tmp/nishi-route-proof-t184-"),sys_now_ms());root[n]=0
34 if sys_mkdir(root,MODE_0755)!=0{return 3}
35 let p:*u8=sys_mmap(JR_PATH);mbg_path(p,root,"/knowledge");if sys_mkdir(p,MODE_0755)!=0{return 3}
36 mbg_path(p,root,"/knowledge/status");if sys_mkdir(p,MODE_0755)!=0{return 3}
37 mbg_path(p,root,"/knowledge/store");if sys_mkdir(p,MODE_0755)!=0{return 3}
38 if r184_case("/volume1/homes/elderwesto/nishihost/nx_tools_api_serve.elf",root,c)!=0{return 3}
39 if r184_case("/volume1/homes/elderwesto/nishihost/buildroot/_build/nx_tools_api_serve.sov.elf",root,c)!=0{return 3}
40 return gv_verdict("route-period-contract",c,"Actual incumbent and staged binaries in isolated CWD; no production restart or secret copied")
41}