code wiki / _hdl_build / nx_email_webmail_daemon.nx
nx_email_webmail_daemon.nx source
↩ module page · 42 lines · 1762 B
1// nx_email_webmail_daemon.nx -- runnable webmail server: bind 127.0.0.1:8025
2// and serve the mailbox UI in an accept loop. Browse http://127.0.0.1:8025/
3// (loopback only -- user opts in to any public bind separately).
4// license_tier: ORIGINAL
5import "nx_email_webmail.nx"
6import "nx_syscalls.nx"
7const WD_MAGIC_100000: i64 = 100000
8
9const WD_PORT: i64 = 0x1F59 // 8025
10const WD_PREFIX: *u8 = "knowledge/status/jmail/"
11const WD_BOX: *u8 = "self@jasonewest.com"
12
13func wd_addr(out: *u8, port: i64) -> i64 {
14 out[0] = 2 as u8; out[1] = 0 as u8
15 out[2] = ((port >> 8) & 0xff) as u8; out[3] = (port & 0xff) as u8
16 out[4] = 127 as u8; out[5] = 0 as u8; out[6] = 0 as u8; out[7] = 1 as u8
17 var i: i64 = 8
18 while i < 16 { out[i] = 0 as u8; i = i + 1 }
19 return 0
20}
21func wd_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
22
23func main() -> i64 {
24 let addr: *u8 = sys_mmap(16)
25 wd_addr(addr, WD_PORT)
26 let lfd: i64 = sys_socket(AF_INET, SOCK_STREAM, 0)
27 if lfd < 0 { wd_puts("socket fail\n" as *u8); sys_exit(1); return 1 }
28 if sys_bind(lfd, addr, 16) < 0 { wd_puts("bind fail (port in use?)\n" as *u8); sys_exit(1); return 1 }
29 if sys_listen(lfd, 16) < 0 { wd_puts("listen fail\n" as *u8); sys_exit(1); return 1 }
30 wd_puts("nishi webmail listening on http://127.0.0.1:8025/ (mailbox: self@jasonewest.com)\n" as *u8)
31 let segctr: *i64 = sys_mmap(8) as *i64
32 segctr[0] = WD_MAGIC_100000
33 var running: i64 = 1
34 while running == 1 {
35 let scfd: i64 = sys_accept(lfd)
36 if scfd < 0 { running = 1 } else {
37 nx_webmail_serve_conn(scfd, WD_PREFIX, WD_BOX, segctr)
38 sys_close(scfd)
39 }
40 }
41 return 0
42}