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}