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}