code wiki / (root) / nx_fetch_decode_capture_t253.nx

nx_fetch_decode_capture_t253.nx source

↩ module page · 22 lines · 2022 B

1import "nx_fetch_status_live_gate_t252.nx" 2import "nx_fs_create_lib.nx" 3import "nx_sha256.nx" 4func hd_save(path:*u8,b:*u8,n:i64)->i64{let rc:i64=fxc_create(path,b,n);if rc!=n{return rc};let d:*u8=sys_mmap_try(32);sha256_digest(b,n,d);let hex:*u8="0123456789abcdef";fa_puts("compressed_sha256=");var i:i64=0;while i<32{sys_write(1,(hex as i64+(d[i] as i64)/16) as *u8,1);sys_write(1,(hex as i64+(d[i] as i64)%16) as *u8,1);i=i+1};fa_puts("\n");sys_munmap_direct(d,32);return n} 5func main(argc:i64,argv:*i64)->i64{ 6 if argc!=4{return 2};let cap:i64=hsl_size(argv[2] as *u8);if cap<=0{return 2} 7 let store:i64=hf_store_load();if store<=0{return 3} 8 let raw:*u8=sys_mmap_try(cap);let body:*u8=sys_mmap_try(cap);if (raw as i64)==0||(body as i64)==0{return 4} 9 let n:i64=hf_fetch_mode(store,argv[1] as *u8,0,0,raw,cap,0);if n<=0{return 5} 10 let he:i64=hf_body_off(raw,n);if he<=0{return 6} 11 let chunk:i64=hfd_hdr_chunked(raw,he);let enc:i64=hfd_hdr_enc(raw,he) 12 var len:i64=n-he;var payload:*u8=(raw as i64+he) as *u8 13 if chunk==1{len=hfd_dechunk(payload,len,body,cap);if len<0{return 7};payload=body} 14 fa_puts("status=");fa_putn(fa_status(raw,n));fa_puts(" raw_bytes=");fa_putn(n);fa_puts(" header_bytes=");fa_putn(he);fa_puts(" chunked=");fa_putn(chunk);fa_puts(" encoding_enum=");fa_putn(enc);fa_puts(" compressed_bytes=");fa_putn(len);fa_puts("\n") 15 if hd_save(argv[3] as *u8,payload,len)!=len{return 8} 16 if enc!=1{return 9} 17 let gz:*NxGzipResult=nx_gzip_inflate(payload,len,cap) 18 fa_puts("gzip_error=");fa_putn(gz.error_code);fa_puts(" output=");fa_putn(gz.output_size);fa_puts(" consumed=");fa_putn(gz.bytes_consumed);fa_puts(" crc_expected=");fa_putn(gz.crc_expected);fa_puts(" crc_computed=");fa_putn(gz.crc_computed);fa_puts(" size_expected=");fa_putn(gz.size_expected);fa_puts("\n") 19 let dr:*NxDeflateResult=nx_deflate_inflate(payload+10,len-18,cap) 20 fa_puts("deflate_error=");fa_putn(dr.error_code);fa_puts(" output=");fa_putn(dr.output_size);fa_puts(" consumed=");fa_putn(dr.bytes_consumed);fa_puts("\n") 21 return 0 22}