code wiki / _hdl_build / nx_host_range_gate.nx

nx_host_range_gate.nx source

↩ module page · 65 lines · 5521 B

1import "nx_host_router.nx" 2import "nx_gate_verdict.nx" 3static hrg_plan: *i64 4const HRG_CASES: *u8="range-response-status-and-length\nrange-body-exact-and-reader-closed\nrange-reader-transferred-once\nrange-security-headers-retained\nunsatisfiable-416-and-total\nunsatisfiable-response-not-cacheable\nordinary-get-retains-body\nmultiple-ranges-retain-full-response\nif-range-retains-full-response\nhtml-transformation-path-retained\nexact-header-capacity\nundersized-header-retains-output\n" 5func hrg_has(b: *u8,n: i64,s: *u8) -> i64 { 6 let sn: i64=hr_slen(s);var i: i64=0;while i+sn<=n { if hr_eq(b+i,s,sn)==1 { return 1 };i=i+1 };return 0 7} 8func hrg_check(name: *u8,ok: i64,c: *i64) -> i64 { return gv_plan_check(hrg_plan,name,ok,c) } 9func hrg_write(p: *u8,b: *u8) -> i64 { 10 let fd: i64=sys_openat_wr(p,0x180);if fd<0 { return fd } 11 let r: *NxFileWriteResult=sys_mmap(__size_of(NxFileWriteResult)) as *NxFileWriteResult 12 let rc: i64=fio_write_sync_fd(fd,b,hr_slen(b),r);sys_munmap(r as *u8,__size_of(NxFileWriteResult));return rc 13} 14func hrg_serve(req: *u8,b: *u8,cap: i64,n: *i64) -> i64 { 15 let cfg: *u8="test.local .\n";let injected: *i64=sys_mmap(__size_of(i64)) as *i64 16 let result: i64=hr_serve3_slot(cfg,hr_slen(cfg),req,hr_slen(req),b,cap,n,0 as *u8,0,injected) 17 sys_munmap(injected as *u8,__size_of(i64));return result 18} 19func main(argc: i64,argv: *i64) -> i64 { 20 if argc!=2 { return 2 };if sys_mkdir(argv[1] as *u8,0x1c0)!=0 { return 2 };if sys_chdir(argv[1] as *u8)!=0 { return 2 } 21 if hrg_write("asset.nxa","NXANIM01payload")!=0 { return 3 } 22 if hrg_write("page.html","<html><body>page</body></html>")!=0 { return 3 } 23 let count: *i64=gv_ctr();hrg_plan=gv_plan_new(HRG_CASES) 24 let meta: *NxFileReadRegion=sys_mmap(__size_of(NxFileReadRegion)) as *NxFileReadRegion 25 fio_region_init(meta);meta.total=hr_slen("NXANIM01payload");meta.start=0;meta.length=hr_slen("NXANIM01") 26 let exact: i64=hr_emit_range_head(0 as *u8,0,"application/octet-stream",meta,0) 27 // Compatibility cases must satisfy the existing full-response emitter's minimum. 28 let cap: i64=HR_MAGIC_1024+exact+hr_slen("<html><body>page</body></html>")+meta.total 29 let b: *u8=sys_mmap(cap+1);let n: *i64=sys_mmap(__size_of(i64)) as *i64 30 let request: *u8="GET /asset.nxa HTTP/1.1\r\nHost: test.local\r\nRange: bytes=0-7\r\n\r\n" 31 let result: i64=hrg_serve(request,b,cap,n) 32 hrg_check("range-response-status-and-length",((result==HR_S2_FILE_STREAM)&&(hrg_has(b,n[0],"206 Partial Content")==1)&&(hrg_has(b,n[0],"Content-Length: 8\r\n")==1)&&(hrg_has(b,n[0],"Content-Range: bytes 0-7/15\r\n")==1)) as i64,count) 33 hrg_check("range-security-headers-retained",((hrg_has(b,n[0],"Cross-Origin-Embedder-Policy: require-corp")==1)&&(hrg_has(b,n[0],"Content-Security-Policy:")==1)) as i64,count) 34 let reader: *NxFileReadRegion=hr_take_file_reader() 35 var good: i64=0 36 if (reader as i64)!=0 { 37 let got: i64=fio_region_next(reader,b,cap) 38 good=((got==8)&&(reader.read_bytes==8)&&(reader.fd<0)&&(hr_eq(b,"NXANIM01",8)==1)) as i64 39 fio_region_close(reader);sys_munmap(reader as *u8,__size_of(NxFileReadRegion)) 40 } 41 hrg_check("range-body-exact-and-reader-closed",good,count) 42 hrg_check("range-reader-transferred-once",((hr_take_file_reader() as i64)==0) as i64,count) 43 let unsat: *u8="GET /asset.nxa HTTP/1.1\r\nHost: test.local\r\nRange: bytes=900-\r\n\r\n" 44 let ur: i64=hrg_serve(unsat,b,cap,n) 45 hrg_check("unsatisfiable-416-and-total",((ur==HR_S2_FILE_STREAM)&&(hrg_has(b,n[0],"416 Range Not Satisfiable")==1)&&(hrg_has(b,n[0],"Content-Length: 0\r\n")==1)&&(hrg_has(b,n[0],"Content-Range: bytes */15\r\n")==1)) as i64,count) 46 hrg_check("unsatisfiable-response-not-cacheable",((hrg_has(b,n[0],"Cache-Control: no-cache")==1)&&(hrg_has(b,n[0],"public, max-age=")==0)) as i64,count) 47 let ureader: *NxFileReadRegion=hr_take_file_reader();if (ureader as i64)!=0 { fio_region_close(ureader);sys_munmap(ureader as *u8,__size_of(NxFileReadRegion)) } 48 let normal: *u8="GET /asset.nxa HTTP/1.1\r\nHost: test.local\r\n\r\n" 49 hrg_check("ordinary-get-retains-body",((hrg_serve(normal,b,cap,n)==HR_S2_OK)&&(hrg_has(b,n[0],"NXANIM01payload")==1)) as i64,count) 50 let multi: *u8="GET /asset.nxa HTTP/1.1\r\nHost: test.local\r\nRange: bytes=0-1,4-5\r\n\r\n" 51 hrg_check("multiple-ranges-retain-full-response",((hrg_serve(multi,b,cap,n)==HR_S2_OK)&&(hrg_has(b,n[0],"200 OK")==1)&&(hrg_has(b,n[0],"NXANIM01payload")==1)) as i64,count) 52 let conditional: *u8="GET /asset.nxa HTTP/1.1\r\nHost: test.local\r\nRange: bytes=0-7\r\nIf-Range: \"old\"\r\n\r\n" 53 hrg_check("if-range-retains-full-response",((hrg_serve(conditional,b,cap,n)==HR_S2_OK)&&(hrg_has(b,n[0],"NXANIM01payload")==1)) as i64,count) 54 let html: *u8="GET /page.html HTTP/1.1\r\nHost: test.local\r\nRange: bytes=0-7\r\n\r\n" 55 hrg_check("html-transformation-path-retained",(hr_try_file_range(".",1,"/page.html",hr_slen("/page.html"),html,hr_slen(html),b,cap,n)==HR_S2_MISS) as i64,count) 56 b[exact]=77 as u8 57 let written: i64=hr_emit_range_head(b,exact,"application/octet-stream",meta,0) 58 hrg_check("exact-header-capacity",((written==exact)&&(b[exact]==(77 as u8))) as i64,count) 59 b[0]=77 as u8 60 let refused: i64=hr_emit_range_head(b,exact-1,"application/octet-stream",meta,0) 61 hrg_check("undersized-header-retains-output",((refused<0)&&(b[0]==(77 as u8))) as i64,count) 62 sys_munmap(meta as *u8,__size_of(NxFileReadRegion));sys_munmap(b,cap+1);sys_munmap(n as *u8,__size_of(i64)) 63 gv_plan_finish(hrg_plan,count) 64 return gv_verdict("HOST-RANGE-GATE",count,"real static router and bounded file reader; daemon transport separate") 65}