code wiki / (root) / nx_lsd.nx

nx_lsd.nx

buildroot/runtime/nx_lsd.nx

10197 B131 linesdepth 3pulls 3 transitivereach 0 importersview sourcekind tool
docsdependenciesstructsconstsfunctions

about

nx_lsd.nx -- SOVEREIGN BitTorrent Local Service Discovery (BEP-14): find/announce peers on the LAN via multicast 239.192.152.143:6771, no tracker. Two halves: ANNOUNCE (multicast BT-SEARCH for each seeded info_hash) + LISTEN (join the group, receive BT-SEARCH, map the info_hash -> a local download via SHA1(download.meta), append the sender's ip:port to that download.pex -> the worker's peer set folds it in). Verbs: announce <ih_hex> [port] | announceall <seed_registry> [port] | listen <area..> <seconds> | selftest. license_tier: ORIGINAL depends: nx_syscalls, nx_sha1

dependencies 2 imports · 0 importers

nx_syscalls.nx nx_sha1.nx nx_lsd.nx

imports: nx_syscalls.nxnx_sha1.nx

imported by: nobody (leaf or entry point)

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

main lsd_streq lp sys_write sys_exit lsd_atoi lsd_announce_one sys_socket sys_mmap lsd_sock4 lsd_build lsd_app lsd_appn sys_mmap ↻ sys_sendto sys_close sys_mmap ↻ lsd_read_file sys_openat_rd sys_read sys_close ↻ lsd_find lpn sys_write ↻ sys_mmap ↻ sys_socket ↻ sys_setsockopt lsd_sock4 ↻ sys_bind sys_close ↻ lsd_join sys_mmap ↻ lsd_group sys_setsockopt ↻ sys_set_socket_timeout sys_mmap ↻ sys_setsockopt ↻ sys_munmap sys_now_realtime_sec sys_mmap ↻

structs

none

consts

9const LSD_MAGIC_6881: i64 = 6881
10const LSD_MAGIC_131072: i64 = 131072
11const LSD_MAGIC_131071: i64 = 131071
12const LSD_MAGIC_2048: i64 = 2048
13const LSD_MAGIC_2047: i64 = 2047
15const LSD_PORT: i64 = 6771

functions

17func lsd_group(oct: *u8) -> i64 { oct[0]=239 as u8; oct[1]=192 as u8; oct[2]=152 as u8; oct[3]=143 as u8; return 0 }
called by 1: lsd_join
19func lp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
called by 1: main calls 1: sys_write
20func lpn(v: i64) -> i64 { if v==0 { sys_write(1,"0" as *u8,1); return 0 } var m: i64=v; if m<0 { sys_write(1,"-" as *u8,1); m=0-m } let t: *u8=sys_mmap(28); var k: i64=0; while m>0 { t[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } while k>0 { k=k-1; sys_write(1,(((t as i64)+k) as *u8),1) } return 0 }
called by 1: main calls 2: sys_writesys_mmap
21func lsd_sock4(out: *u8, port: i64, a: i64, b: i64, c: i64, d: i64) -> i64
26func lsd_app(dst: *u8, o: i64, s: *u8) -> i64 { var i: i64=0; while s[i]!=(0 as u8) { dst[o]=s[i]; o=o+1; i=i+1 } return o }
called by 1: lsd_build
27func lsd_appn(dst: *u8, o: i64, v: i64) -> i64 { if v==0 { dst[o]=48 as u8; return o+1 } var m: i64=v; let t: *u8=sys_mmap(28); var k: i64=0; while m>0 { t[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } while k>0 { k=k-1; dst[o]=t[k]; o=o+1 } return o }
called by 1: lsd_build calls 1: sys_mmap
28func lsd_find(buf: *u8, n: i64, start: i64, ndl: *u8, nl: i64) -> i64 { if nl<=0 { return 0-1 } var s: i64=start; while s+nl<=n { var m: i64=1; var k: i64=0; while k<nl { if buf[s+k]!=ndl[k] { m=0; k=nl } else { k=k+1 } } if m==1 { return s } s=s+1 } return 0-1 }
called by 2: lsd_parsemain
29func lsd_streq(a: *u8, b: *u8) -> i64 { var i: i64=0; while a[i]!=(0 as u8) { if a[i]!=b[i] { return 0 } i=i+1 } if b[i]!=(0 as u8) { return 0 } return 1 }
called by 1: main
30func lsd_atoi(s: *u8) -> i64 { var v: i64=0; var i: i64=0; while s[i]!=(0 as u8) { if s[i]>=(48 as u8) { if s[i]<=(57 as u8) { v=v*10+((s[i] as i64)-48) } } i=i+1 } return v }
called by 1: main
33func lsd_build(ih_hex: *u8, port: i64, out: *u8) -> i64
41func lsd_parse(buf: *u8, n: i64, out_ih: *u8, out_port: *i64) -> i64
called by 1: main calls 1: lsd_find
52func lsd_join(fd: i64) -> i64
59func lsd_announce_one(ih_hex: *u8, port: i64) -> i64
66func lsd_read_file(path: *u8, buf: *u8, cap: i64) -> i64 { let fd: i64=sys_openat_rd(path); if fd<0 { return 0-1 } var t: i64=0; var r: i64=1; while r>0 { r=sys_read(fd,(((buf as i64)+t) as *u8),cap-t); if r>0 { t=t+r } } sys_close(fd); return t }
called by 1: main calls 3: sys_openat_rdsys_readsys_close
68func main(argc: i64, argv: *i64) -> i64