code wiki / _hdl_build / nx_smtp_server_gate.nx

nx_smtp_server_gate.nx

buildroot/runtime/_hdl_build/nx_smtp_server_gate.nx

9334 B196 linesdepth 2pulls 3 transitivereach 0 importersview sourcekind gate/prooftopic smtp
docsdependenciesstructsconstsfunctions

about

nx_smtp_server_gate.nx -- GATE for EMAIL R2 (SMTP server, nx_smtp_server). Drives the REAL nx_smtp_server parser + reply builders + un-dot-stuff + sequence machine over scripted CLIENT transcripts (no network, fully deterministic) and asserts: COMPLETENESS : EHLO/HELO/MAIL/RCPT/DATA/QUIT/RSET/NOOP classify with the correct verb; the EHLO domain and the MAIL/RCPT <addr> spans extract exactly; reply builders emit exact CRLF-framed bytes for 250/354/503/220; un-dot-stuff reverses the client's leading-dot stuffing AND flags the lone "." terminator (complete=1); the sequence machine walks the full happy path INIT->GREETED->MAIL->RCPT->RCPT->DATA->(body)->GREETED->QUIT with codes 250/250/250/250/354/250/221. NEG-CONTROL : MAIL before EHLO -> 503 (state unchanged); RCPT before MAIL -> 503; DATA before RCPT -> 503 -- no envelope is ever accepted out of sequence. TAMPER : "MAILBOX ..." does NOT classify as MAIL (verb-delimiter guard); "ZZZZ ..." -> UNKNOWN and advances to 500; a stuffed "..world" line un-stuffs to ".world" and is NOT mistaken for the end-of-DATA terminator (complete stays 0) -- the inverse of nx_smtp_dot_stuff, receive-side truncation/injection defense (RFC 5321 4.5.2). Evidence -> knowledge/status/smtp_server.log (SMTPSRVGATE authored=organ ... verdict=GREEN) license_tier: ORIGINAL

dependencies 2 imports · 0 importers

nx_smtp_server.nx nx_syscalls.nx nx_smtp_server_gate.nx

imports: nx_smtp_server.nxnx_syscalls.nx

imported by: nobody (leaf or entry point)

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main sys_mmap nx_smtp_srv_parse ss_verb_is ss_kw_ci ss_upper ss_is_delim ss_span_after_sp ss_addr_angle slen memeq nx_smtp_srv_reply ss_cat nx_smtp_srv_undot nx_smtp_srv_advance nx_smtp_srv_data_complete ew sys_write ewn sys_mmap ↻ sys_write ↻ sys_openat_append sys_close

structs

none

consts

31const SMTPS_LOG: *u8 = "knowledge/status/smtp_server.log"

functions

33func ew(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 }
called by 1: main calls 1: sys_write
34func ewn(fd: i64, v: i64) -> i64
called by 1: main calls 2: sys_mmapsys_write
43func slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
called by 1: main
44func memeq(a: *u8, b: *u8, len: i64) -> i64 { var i: i64 = 0; while i < len { if a[i] != b[i] { return 0 } i = i + 1 } return 1 }
called by 1: main
46func main() -> i64