nx_lib_probe.nx source
↩ module page · 42 lines · 1822 B
1// nx_lib_probe.nx -- sovereign HTTP CLIENT that hits the live nx_lib_httpd
2// (127.0.0.1:8095) and prints the response. Proves the read API serves over
3// real TCP, all .nx -- no curl, no python. Reuses the socket syscalls via
4// nx_lib_serve's nx_syscalls import.
5import "nx_lib_serve.nx"
6import "nx_connect.nx" // bounded connect: a raw sys_connect hangs ~127s on a black-holed host
7const K_MAGIC_8095: i64 = 8095
8const K_MAGIC_262144: i64 = 262144
9
10func lp_sockaddr(addr: *u8, port: i64) -> i64 {
11 addr[0] = 2 as u8 // AF_INET
12 addr[1] = 0 as u8
13 addr[2] = ((port / 256) & 255) as u8 // port hi (network order)
14 addr[3] = (port & 255) as u8 // port lo
15 addr[4] = 127 as u8 // 127.0.0.1
16 addr[5] = 0 as u8
17 addr[6] = 0 as u8
18 addr[7] = 1 as u8
19 var i: i64 = 8
20 while i < 16 { addr[i] = 0 as u8; i = i + 1 }
21 return 0
22}
23
24func main() -> i64 {
25 let fd: i64 = sys_socket(2, 1, 0)
26 if fd < 0 { sys_write(1, "probe: socket fail\n" as *u8, 19); return 1 }
27 let addr: *u8 = sys_mmap(16)
28 lp_sockaddr(addr, K_MAGIC_8095)
29 if nx_connect_bounded(fd, addr, 16, NX_CONN_DEFAULT_MS) < 0 {
30 sys_write(1, "probe: connect FAIL (daemon not listening on :8095)\n" as *u8, 51)
31 return 2
32 }
33 let req: *u8 = "GET /work/GBIF_1000003 HTTP/1.0\r\nHost: nishi\r\n\r\n" as *u8
34 sys_write(fd, req, ls_strlen(req))
35 let buf: *u8 = sys_mmap(K_MAGIC_262144)
36 let n: i64 = sys_read(fd, buf, K_MAGIC_262144)
37 sys_close(fd)
38 sys_write(1, "=== live reader page over TCP (:8095 GET /work/GBIF_1000003, a REAL taxon) ===\n" as *u8, 78)
39 if n > 0 { sys_write(1, buf, n) }
40 sys_write(1, "\n=== end (real 16K-taxon catalog, server-rendered by nx_lib_httpd; no python/curl) ===\n" as *u8, 87)
41 return 0
42}