code wiki / _hdl_build / _h2_reach_probe.nx

_h2_reach_probe.nx source

↩ module page · 40 lines · 2974 B

1// _h2_reach_probe.nx -- does HTTP/2 (ALPN h2) grow REACH vs our h1.1 path? Fetches argv[1] over the 2// sovereign h2 stack (run_h2 + h2_tls_get) and reports :status + body-bytes. Compares against the h1.1 3// sweep (reuters 401 / imdb 202 soft-blocks) to see if looking like a browser (h2) unlocks them. 4import "nx_x509_trust_store.nx" 5import "nx_trust_store_load_from_certdata.nx" 6import "nx_tls13_client_validate_certificate.nx" 7import "nx_tls13_client_h2run.nx" 8import "nx_https_url_for_fetch.nx" 9import "nx_https_url_connect.nx" 10import "nx_h2_client_over_tls.nx" 11func p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 12func pn(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=48+(m%10);m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 } 13func main(argc: i64, argv: *i64) -> i64 { 14 if argc < 2 { p("usage: _h2_reach_probe <url>\n" as *u8); return 1 } 15 let url0: *u8 = argv[1] as *u8 16 let r: i64 = nx_trust_store_load_from_certdata("/tmp/mozilla_certdata.txt" as *u8, 512, 4194304) 17 if r <= 0 { p(" trust-store FAIL\n" as *u8); return 2 } 18 let store: *TrustStore = r as *TrustStore 19 let target_raw: *u8 = sys_mmap(64); let target: *NxHttpsTarget = target_raw as *NxHttpsTarget 20 target.url = nx_url_new(); target.port = 0 21 let urlbuf: *u8 = sys_mmap(4096); var ui: i64=0; while url0[ui]!=0 as u8 { urlbuf[ui]=url0[ui]; ui=ui+1 } urlbuf[ui]=0 as u8 22 p("h2 "); p(urlbuf); p(" -> ") 23 if nx_https_url_for_fetch(urlbuf, target) != NX_HTTPS_URL_OK { p("URL-parse FAIL\n" as *u8); return 3 } 24 let fd_p: *i64 = sys_mmap(16) as *i64 25 if nx_https_url_connect(target, urlbuf, sys_now_realtime_sec(), fd_p) != NX_HTTPS_CONNECT_OK { p("CONNECT FAIL\n" as *u8); return 4 } 26 let cfd: i64 = fd_p[0] 27 let vc_raw: *u8 = sys_mmap(64); let vc: *TlsValidationContext = vc_raw as *TlsValidationContext 28 vc.store = store; vc.sni_host = urlbuf + target.url.host_off; vc.sni_host_len = target.url.host_len; vc.now_epoch = sys_now_realtime_sec() 29 let cr2: *u8 = sys_mmap(32); var ei: i64=0; while ei<32 { cr2[ei]=(0xC0+ei) as u8; ei=ei+1 } 30 let priv2: *u8 = sys_mmap(32); ei=0; while ei<32 { priv2[ei]=(0xA0+ei) as u8; ei=ei+1 } 31 let sr: i64 = nx_tls13_client_session_run_h2(cfd, urlbuf + target.url.host_off, target.url.host_len, cr2, priv2, vc) 32 if sr <= 0 { p("h2-ALPN handshake FAIL rc="); pn(sr); p(" (host refused h2)\n" as *u8); sys_close(cfd); return 5 } 33 let session: *Tls13ClientSession = sr as *Tls13ClientSession 34 let body: *u8 = sys_mmap(1048576) 35 let st: *i64 = sys_mmap(16) as *i64 36 let bl: i64 = h2_tls_get(session, cfd, urlbuf + target.url.host_off, target.url.host_len, "/" as *u8, 1, body, 1048576, st) 37 sys_close(cfd) 38 p("h2 :status="); pn(st[0]); p(" body="); pn(bl); p("\n" as *u8) 39 return 0 40}