code wiki / _hdl_build / nx_connect_call.nx

nx_connect_call.nx source

↩ module page · 149 lines · 7230 B

1// nx_connect_call.nx -- FUNCTIONALITY rung: call SESSION SIGNALING (the control plane of voice/ 2// video calls) + group call rooms. This is the gateable LOGIC of calling -- the media plane 3// (audio/video codec + transport) is a separate substrate and stays ABSENT in the census until built. 4// 5// 1:1 call state machine (valid transitions ONLY): IDLE -> RINGING -> CONNECTED -> ENDED, with 6// RINGING -> REJECTED (callee) / CANCELLED (caller) / and illegal jumps refused. Actor rules: only 7// the callee accepts/rejects; only the caller cancels; either ends a connected call. SAFETY by 8// construction: you cannot cold-call a non-contact and cannot call a BLOCKED user (anti-harassment). 9// Group rooms: host create / join / leave / host-only end. 7 checks incl. negative controls. 10// 100% sovereign. license_tier: ORIGINAL expect_exit: 0 11import "nx_syscalls.nx" 12 13const C_IDLE: i64 = 0 14const C_RINGING: i64 = 1 15const C_CONNECTED:i64 = 2 16const C_ENDED: i64 = 3 17const C_REJECTED: i64 = 4 18const C_CANCELLED:i64 = 5 19// call layout: c[0]=state c[1]=caller c[2]=callee 20 21func sw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 22func sn(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 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;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 } 23 24// rel < 0 means "no relationship" (cannot cold-call); blocked==1 means anti-harassment block 25func call_initiate(c: *i64, caller: i64, callee: i64, rel: i64, blocked: i64) -> i64 { 26 if c[0]!=C_IDLE { return 0 } // already in a call 27 if rel<0 { return 0 } // no relationship -> no cold-calling strangers 28 if blocked==1 { return 0 } // blocked -> anti-harassment by construction 29 c[0]=C_RINGING; c[1]=caller; c[2]=callee 30 return 1 31} 32func call_accept(c: *i64, actor: i64) -> i64 { 33 if c[0]!=C_RINGING { return 0 } 34 if actor!=c[2] { return 0 } // only the callee may accept 35 c[0]=C_CONNECTED; return 1 36} 37func call_reject(c: *i64, actor: i64) -> i64 { 38 if c[0]!=C_RINGING { return 0 } 39 if actor!=c[2] { return 0 } // only the callee may reject 40 c[0]=C_REJECTED; return 1 41} 42func call_cancel(c: *i64, actor: i64) -> i64 { 43 if c[0]!=C_RINGING { return 0 } 44 if actor!=c[1] { return 0 } // only the caller may cancel 45 c[0]=C_CANCELLED; return 1 46} 47func call_end(c: *i64, actor: i64) -> i64 { 48 if c[0]!=C_CONNECTED { return 0 } // can only end a CONNECTED call 49 if actor!=c[1] { if actor!=c[2] { return 0 } } // either party 50 c[0]=C_ENDED; return 1 51} 52 53// group call room: r[0]=host r[1]=count ; mem = participant uids 54func room_create(r: *i64, mem: *i64, host: i64) -> i64 { r[0]=host; r[1]=1; mem[0]=host; return 0 } 55func room_find(r: *i64, mem: *i64, uid: i64) -> i64 { var i: i64=0; while i<r[1] { if mem[i]==uid { return i } i=i+1 } return 0-1 } 56func room_join(r: *i64, mem: *i64, uid: i64) -> i64 { if room_find(r,mem,uid)>=0 { return 1 } let c: i64=r[1]; mem[c]=uid; r[1]=c+1; return 1 } 57func room_leave(r: *i64, mem: *i64, uid: i64) -> i64 { let idx: i64=room_find(r,mem,uid); if idx<0 { return 0 } let c: i64=r[1]; mem[idx]=mem[c-1]; r[1]=c-1; return 1 } 58func room_end(r: *i64, mem: *i64, actor: i64) -> i64 { if actor!=r[0] { return 0 } r[1]=0; return 1 } 59 60func tcheck(pass: i64, label: *u8, fails: *i64) -> i64 { 61 sw(" " as *u8); sw(label); sw(": " as *u8) 62 if pass==1 { sw("PASS\n" as *u8) } else { sw("FAIL\n" as *u8); fails[0]=fails[0]+1 } 63 return 0 64} 65 66func main() -> i64 { 67 let fails: *i64 = sys_mmap(16) as *i64 68 fails[0]=0 69 let c: *i64 = sys_mmap(32) as *i64 70 71 // T1 happy path 72 c[0]=C_IDLE 73 let i1: i64 = call_initiate(c, 1, 2, 0, 0) 74 let s_ring: i64 = c[0] 75 let a1: i64 = call_accept(c, 2) 76 let s_conn: i64 = c[0] 77 let e1: i64 = call_end(c, 1) 78 let s_end: i64 = c[0] 79 80 // T2 reject 81 c[0]=C_IDLE; call_initiate(c,1,2,0,0) 82 let rj: i64 = call_reject(c, 2); let s_rej: i64 = c[0] 83 84 // T3 cancel (only caller) 85 c[0]=C_IDLE; call_initiate(c,1,2,0,0) 86 let cc_callee: i64 = call_cancel(c, 2) // callee cannot cancel 87 let cc_caller: i64 = call_cancel(c, 1) // caller cancels 88 let s_can: i64 = c[0] 89 90 // T4 illegal transitions refused 91 c[0]=C_IDLE 92 let ill_accept_idle: i64 = call_accept(c, 2) // accept with no ringing call 93 call_initiate(c,1,2,0,0) 94 let ill_end_ring: i64 = call_end(c, 1) // end a non-connected call 95 let dbl_init: i64 = call_initiate(c,1,2,0,0) // initiate while already ringing 96 97 // T5 actor enforcement 98 c[0]=C_IDLE; call_initiate(c,1,2,0,0) 99 let caller_accepts_own: i64 = call_accept(c, 1) // caller cannot accept own call 100 let s_still_ring: i64 = c[0] 101 102 // T6 safety: no cold-call + no calling a blocked user 103 c[0]=C_IDLE 104 let no_rel: i64 = call_initiate(c, 1, 9, 0-1, 0) // no relationship 105 let blk: i64 = call_initiate(c, 1, 2, 0, 1) // blocked 106 let ok_call: i64 = call_initiate(c, 1, 2, 0, 0) // friend, not blocked 107 108 // T7 group room 109 let r: *i64 = sys_mmap(64) as *i64 110 let rm: *i64 = sys_mmap(512) as *i64 111 room_create(r, rm, 1) 112 room_join(r,rm,2); room_join(r,rm,3); room_join(r,rm,4) 113 let c4: i64 = r[1] 114 room_leave(r,rm,3) 115 let c3: i64 = r[1] 116 let end_nonhost: i64 = room_end(r,rm,2) 117 let end_host: i64 = room_end(r,rm,1) 118 119 sw("=== nx_connect_call -- call session signaling + group rooms (control plane) ===\n" as *u8) 120 sw(" 1:1 lifecycle states: ring=" as *u8); sn(s_ring); sw(" conn=" as *u8); sn(s_conn); sw(" end=" as *u8); sn(s_end); sw("\n" as *u8) 121 sw("-- gate checks --\n" as *u8) 122 123 var t1: i64=0; if i1==1 { if s_ring==C_RINGING { if a1==1 { if s_conn==C_CONNECTED { if e1==1 { if s_end==C_ENDED { t1=1 } } } } } } 124 tcheck(t1, "T1 happy path IDLE->RINGING->CONNECTED->ENDED" as *u8, fails) 125 126 var t2: i64=0; if rj==1 { if s_rej==C_REJECTED { t2=1 } } 127 tcheck(t2, "T2 callee reject -> REJECTED" as *u8, fails) 128 129 var t3: i64=0; if cc_callee==0 { if cc_caller==1 { if s_can==C_CANCELLED { t3=1 } } } 130 tcheck(t3, "T3 cancel is caller-only -> CANCELLED" as *u8, fails) 131 132 var t4: i64=0; if ill_accept_idle==0 { if ill_end_ring==0 { if dbl_init==0 { t4=1 } } } 133 tcheck(t4, "T4 illegal transitions refused (state machine enforced)" as *u8, fails) 134 135 var t5: i64=0; if caller_accepts_own==0 { if s_still_ring==C_RINGING { t5=1 } } 136 tcheck(t5, "T5 actor enforcement (caller cannot accept own call)" as *u8, fails) 137 138 var t6: i64=0; if no_rel==0 { if blk==0 { if ok_call==1 { t6=1 } } } 139 tcheck(t6, "T6 SAFETY no cold-call + no calling a blocked user (NEG-CTRL)" as *u8, fails) 140 141 var t7: i64=0; if c4==4 { if c3==3 { if end_nonhost==0 { if end_host==1 { if r[1]==0 { t7=1 } } } } } 142 tcheck(t7, "T7 group room join/leave/host-only-end" as *u8, fails) 143 144 sw(" fails=" as *u8); sn(fails[0]); sw("\n" as *u8) 145 if fails[0]==0 { sw("VERDICT: GREEN (call signaling state machine + rooms correct; anti-harassment by construction)\n" as *u8); sys_exit(0) } 146 sw("VERDICT: RED\n" as *u8) 147 sys_exit(1) 148 return 1 149}