@salang/sa 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/bin/sa.js +13 -1
  2. package/package.json +8 -7
  3. package/sa_std/alloc/layout.sal +12 -0
  4. package/sa_std/alloc/prelude.sa +1 -0
  5. package/sa_std/alloc/prelude.sal +1 -0
  6. package/sa_std/alloc/string.sa +3 -0
  7. package/sa_std/alloc/vec.sa +684 -0
  8. package/sa_std/alloc/vec.sal +4 -0
  9. package/sa_std/any.sa +130 -0
  10. package/sa_std/any.sal +23 -0
  11. package/sa_std/array.sa +1876 -0
  12. package/sa_std/ascii.sa +2 -0
  13. package/sa_std/ascii.sal +1 -0
  14. package/sa_std/async.sla +116 -0
  15. package/sa_std/binary_heap.sa +3003 -0
  16. package/sa_std/binary_heap.sal +7 -0
  17. package/sa_std/borrow.sa +171 -0
  18. package/sa_std/borrow.sal +13 -0
  19. package/sa_std/btree_map.sa +2210 -0
  20. package/sa_std/btree_map.sal +11 -0
  21. package/sa_std/btree_set.sa +1072 -0
  22. package/sa_std/btree_set.sal +6 -0
  23. package/sa_std/char.sa +1309 -0
  24. package/sa_std/char.sal +50 -0
  25. package/sa_std/cmp.sa +554 -0
  26. package/sa_std/cmp.sal +14 -0
  27. package/sa_std/collections/binary_heap.sa +1 -0
  28. package/sa_std/collections/btree_map.sa +1 -0
  29. package/sa_std/collections/btree_set.sa +1 -0
  30. package/sa_std/collections/hashmap.sa +1 -0
  31. package/sa_std/collections/hashset.sa +1 -0
  32. package/sa_std/collections/linked_list.sa +1120 -0
  33. package/sa_std/collections/linked_list.sal +10 -0
  34. package/sa_std/collections/prelude.sa +7 -0
  35. package/sa_std/collections/prelude.sal +1 -0
  36. package/sa_std/collections/vec_deque.sa +1 -0
  37. package/sa_std/collections.sal +13 -0
  38. package/sa_std/convert.sa +1115 -0
  39. package/sa_std/convert.sal +24 -0
  40. package/sa_std/core/arc.sa +233 -0
  41. package/sa_std/core/arc.sal +4 -0
  42. package/sa_std/core/ascii.sa +784 -0
  43. package/sa_std/core/ascii.sal +34 -0
  44. package/sa_std/core/bit.sa +41 -0
  45. package/sa_std/core/box.sa +1 -0
  46. package/sa_std/core/box.sal +2 -0
  47. package/sa_std/core/cell.sa +108 -0
  48. package/sa_std/core/cell.sal +5 -0
  49. package/sa_std/core/cleanup.sa +26 -0
  50. package/sa_std/core/control.sa +20 -0
  51. package/sa_std/core/derive.sa +60 -0
  52. package/sa_std/core/derive.sal +1 -0
  53. package/sa_std/core/dispatch.sa +7 -0
  54. package/sa_std/core/dispatch.sal +5 -0
  55. package/sa_std/core/future.sa +777 -0
  56. package/sa_std/core/future.sal +73 -0
  57. package/sa_std/core/hash.sa +48 -0
  58. package/sa_std/core/iter.sa +2805 -0
  59. package/sa_std/core/iter.sal +4 -0
  60. package/sa_std/core/loop.sa +60 -0
  61. package/sa_std/core/mem.sa +220 -0
  62. package/sa_std/core/option.sa +825 -0
  63. package/sa_std/core/option.sal +11 -0
  64. package/sa_std/core/panic.sa +23 -0
  65. package/sa_std/core/panic.sal +12 -0
  66. package/sa_std/core/prelude.sa +18 -0
  67. package/sa_std/core/prelude.sal +18 -0
  68. package/sa_std/core/rc.sa +225 -0
  69. package/sa_std/core/rc.sal +4 -0
  70. package/sa_std/core/refcell.sa +283 -0
  71. package/sa_std/core/refcell.sal +13 -0
  72. package/sa_std/core/result.sa +708 -0
  73. package/sa_std/core/result.sal +6 -0
  74. package/sa_std/core/rust_patterns.sal +295 -0
  75. package/sa_std/core/sa_core.sa +84 -0
  76. package/sa_std/core/slice.sa +4021 -0
  77. package/sa_std/core/slice.sal +7 -0
  78. package/sa_std/core/task.sa +112 -0
  79. package/sa_std/core/task.sal +15 -0
  80. package/sa_std/core/trait_object.sa +26 -0
  81. package/sa_std/core/trait_object.sal +4 -0
  82. package/sa_std/core/waker.sa +289 -0
  83. package/sa_std/core/waker.sal +31 -0
  84. package/sa_std/core/weak.sa +2 -0
  85. package/sa_std/core/weak.sal +4 -0
  86. package/sa_std/cow.sa +3 -0
  87. package/sa_std/cow.sal +2 -0
  88. package/sa_std/cstring.sa +3 -0
  89. package/sa_std/cstring.sal +2 -0
  90. package/sa_std/default.sa +99 -0
  91. package/sa_std/duration.sa +3 -0
  92. package/sa_std/duration.sal +2 -0
  93. package/sa_std/encoding/json.sa +259 -0
  94. package/sa_std/encoding/json.sai +54 -0
  95. package/sa_std/encoding/json.sal +35 -0
  96. package/sa_std/encoding/prelude.sa +1 -0
  97. package/sa_std/encoding/prelude.sal +0 -0
  98. package/sa_std/env.sa +390 -0
  99. package/sa_std/env.sai +25 -0
  100. package/sa_std/error.sa +253 -0
  101. package/sa_std/error.sal +44 -0
  102. package/sa_std/ffi/cstring.sa +3 -0
  103. package/sa_std/ffi/cstring.sal +1 -0
  104. package/sa_std/ffi/prelude.sa +2 -0
  105. package/sa_std/ffi/prelude.sal +2 -0
  106. package/sa_std/ffi.sa +635 -0
  107. package/sa_std/ffi.sal +51 -0
  108. package/sa_std/fmt.sa +2 -0
  109. package/sa_std/fmt.sai +18 -0
  110. package/sa_std/fmt.sal +35 -0
  111. package/sa_std/fs.sa +1023 -0
  112. package/sa_std/fs.sai +127 -0
  113. package/sa_std/fs.sal +51 -0
  114. package/sa_std/future.sa +2 -0
  115. package/sa_std/future.sal +1 -0
  116. package/sa_std/hash.sa +1486 -0
  117. package/sa_std/hash.sal +13 -0
  118. package/sa_std/hashmap.sa +1962 -0
  119. package/sa_std/hashmap.sal +20 -0
  120. package/sa_std/hashset.sa +1004 -0
  121. package/sa_std/hashset.sal +18 -0
  122. package/sa_std/http2.sa +78 -0
  123. package/sa_std/http2.sai +26 -0
  124. package/sa_std/http2.sal +36 -0
  125. package/sa_std/instant.sa +3 -0
  126. package/sa_std/instant.sal +2 -0
  127. package/sa_std/io/buf_reader.sa +43 -0
  128. package/sa_std/io/buf_writer.sa +35 -0
  129. package/sa_std/io/bufio.sa +4 -0
  130. package/sa_std/io/bufio.sal +4 -0
  131. package/sa_std/io/prelude.sa +1 -0
  132. package/sa_std/io/prelude.sal +1 -0
  133. package/sa_std/io/print.sa +2 -0
  134. package/sa_std/io/print.sai +3 -0
  135. package/sa_std/io.sa +925 -0
  136. package/sa_std/io.sai +25 -0
  137. package/sa_std/io.sal +84 -0
  138. package/sa_std/iter.sa +2 -0
  139. package/sa_std/iter.sal +1 -0
  140. package/sa_std/join_handle.sa +3 -0
  141. package/sa_std/join_handle.sal +2 -0
  142. package/sa_std/libsa_async.sa +80 -0
  143. package/sa_std/m_async.sa +137 -0
  144. package/sa_std/m_async.sal +30 -0
  145. package/sa_std/m_async.sla +2 -0
  146. package/sa_std/manually_drop.sa +3 -0
  147. package/sa_std/manually_drop.sal +2 -0
  148. package/sa_std/marker/phantom_data.sa +3 -0
  149. package/sa_std/marker/phantom_data.sal +1 -0
  150. package/sa_std/marker/prelude.sa +4 -0
  151. package/sa_std/marker/prelude.sal +4 -0
  152. package/sa_std/marker.sa +220 -0
  153. package/sa_std/marker.sal +15 -0
  154. package/sa_std/math.sa +84 -0
  155. package/sa_std/math.sai +10 -0
  156. package/sa_std/mem/manually_drop.sa +3 -0
  157. package/sa_std/mem/manually_drop.sal +1 -0
  158. package/sa_std/mem/prelude.sa +2 -0
  159. package/sa_std/mem/prelude.sal +2 -0
  160. package/sa_std/mem.sa +564 -0
  161. package/sa_std/mem.sal +40 -0
  162. package/sa_std/modstate.sai +19 -0
  163. package/sa_std/net.sa +4227 -0
  164. package/sa_std/net.sai +239 -0
  165. package/sa_std/net.sal +159 -0
  166. package/sa_std/netx.sa +85 -0
  167. package/sa_std/netx.sai +11 -0
  168. package/sa_std/netx.sal +39 -0
  169. package/sa_std/nonzero.sa +3 -0
  170. package/sa_std/nonzero.sal +2 -0
  171. package/sa_std/num/nonzero.sa +3 -0
  172. package/sa_std/num/nonzero.sal +1 -0
  173. package/sa_std/num/prelude.sa +3 -0
  174. package/sa_std/num/prelude.sal +3 -0
  175. package/sa_std/num.sa +17302 -0
  176. package/sa_std/num.sai +11 -0
  177. package/sa_std/num.sal +341 -0
  178. package/sa_std/ops.sa +1884 -0
  179. package/sa_std/ops.sal +68 -0
  180. package/sa_std/option.sa +2 -0
  181. package/sa_std/option.sal +1 -0
  182. package/sa_std/os/fd.sa +96 -0
  183. package/sa_std/os/fd.sai +7 -0
  184. package/sa_std/os/fd.sal +11 -0
  185. package/sa_std/os/prelude.sa +2 -0
  186. package/sa_std/os/prelude.sal +1 -0
  187. package/sa_std/os/unix_ffi.sa +271 -0
  188. package/sa_std/panic.sa +1 -0
  189. package/sa_std/panic.sal +1 -0
  190. package/sa_std/path.sa +3170 -0
  191. package/sa_std/path.sal +12 -0
  192. package/sa_std/phantom_data.sa +3 -0
  193. package/sa_std/phantom_data.sal +2 -0
  194. package/sa_std/pin.sa +79 -0
  195. package/sa_std/pin.sal +5 -0
  196. package/sa_std/plugin_async.sa +90 -0
  197. package/sa_std/plugin_async.sal +29 -0
  198. package/sa_std/plugin_async.sla +4 -0
  199. package/sa_std/plugin_http_async.sa +46 -0
  200. package/sa_std/plugin_http_server.sa +61 -0
  201. package/sa_std/plugin_http_server.sla +2 -0
  202. package/sa_std/plugin_sqlite.sa +106 -0
  203. package/sa_std/plugin_sqlite.sla +2 -0
  204. package/sa_std/prelude.sa +60 -0
  205. package/sa_std/prelude.sal +55 -0
  206. package/sa_std/process.sa +916 -0
  207. package/sa_std/process.sai +57 -0
  208. package/sa_std/process.sal +27 -0
  209. package/sa_std/ptr.sa +503 -0
  210. package/sa_std/ptr.sal +2 -0
  211. package/sa_std/result.sa +2 -0
  212. package/sa_std/result.sal +1 -0
  213. package/sa_std/rust_core.sa +51 -0
  214. package/sa_std/rust_core.sal +26 -0
  215. package/sa_std/sa.mod +7 -0
  216. package/sa_std/sort.sa +156 -0
  217. package/sa_std/str.sla +13 -0
  218. package/sa_std/string.sa +12240 -0
  219. package/sa_std/string.sai +25 -0
  220. package/sa_std/string.sal +17 -0
  221. package/sa_std/string_format.sa +269 -0
  222. package/sa_std/sync/atomic.sa +1500 -0
  223. package/sa_std/sync/atomic.sal +45 -0
  224. package/sa_std/sync/barrier.sa +105 -0
  225. package/sa_std/sync/barrier.sal +7 -0
  226. package/sa_std/sync/condvar.sa +240 -0
  227. package/sa_std/sync/condvar.sal +4 -0
  228. package/sa_std/sync/mpsc.sa +758 -0
  229. package/sa_std/sync/mpsc.sal +42 -0
  230. package/sa_std/sync/mpsc_list.sa +255 -0
  231. package/sa_std/sync/mpsc_list.sal +3 -0
  232. package/sa_std/sync/mutex.sa +182 -0
  233. package/sa_std/sync/mutex.sal +7 -0
  234. package/sa_std/sync/once.sa +371 -0
  235. package/sa_std/sync/once.sal +31 -0
  236. package/sa_std/sync/poison.sa +36 -0
  237. package/sa_std/sync/poison.sal +11 -0
  238. package/sa_std/sync/prelude.sa +8 -0
  239. package/sa_std/sync/prelude.sal +7 -0
  240. package/sa_std/sync/rwlock.sa +369 -0
  241. package/sa_std/sync/rwlock.sal +13 -0
  242. package/sa_std/task.sa +2 -0
  243. package/sa_std/task.sal +1 -0
  244. package/sa_std/term.sa +2 -0
  245. package/sa_std/term.sai +10 -0
  246. package/sa_std/term.sal +33 -0
  247. package/sa_std/testing/assert.sai +4 -0
  248. package/sa_std/testing/mock_io.sa +174 -0
  249. package/sa_std/testing/mock_io.sal +5 -0
  250. package/sa_std/testing/prelude.sa +2 -0
  251. package/sa_std/testing/prelude.sal +1 -0
  252. package/sa_std/text/prelude.sa +1 -0
  253. package/sa_std/text/prelude.sal +1 -0
  254. package/sa_std/text/regex.sa +2 -0
  255. package/sa_std/text/regex.sai +9 -0
  256. package/sa_std/text/regex.sal +33 -0
  257. package/sa_std/thread/join_handle.sa +3 -0
  258. package/sa_std/thread/join_handle.sal +1 -0
  259. package/sa_std/thread/prelude.sa +4 -0
  260. package/sa_std/thread/prelude.sal +3 -0
  261. package/sa_std/thread.sa +160 -0
  262. package/sa_std/thread.sai +11 -0
  263. package/sa_std/thread.sal +4 -0
  264. package/sa_std/thread_local.sa +45 -0
  265. package/sa_std/thread_local.sai +9 -0
  266. package/sa_std/time/duration.sa +3 -0
  267. package/sa_std/time/duration.sal +1 -0
  268. package/sa_std/time/instant.sa +3 -0
  269. package/sa_std/time/instant.sal +1 -0
  270. package/sa_std/time/prelude.sa +4 -0
  271. package/sa_std/time/prelude.sal +4 -0
  272. package/sa_std/time.sa +850 -0
  273. package/sa_std/time.sai +37 -0
  274. package/sa_std/time.sal +35 -0
  275. package/sa_std/time.sla +67 -0
  276. package/sa_std/tls_client.sai +39 -0
  277. package/sa_std/vec.sa +5754 -0
  278. package/sa_std/vec.sal +1 -0
  279. package/sa_std/vec_deque.sa +4925 -0
  280. package/sa_std/vec_deque.sal +8 -0
  281. package/sa_std/vec_runtime_macros.sa +11 -0
  282. package/sa_std/ws_client.sai +57 -0
package/sa_std/net.sai ADDED
@@ -0,0 +1,239 @@
1
+ // SA-facing contracts for the Zig-backed sa_std.net module.
2
+ // TcpStream, TcpListener, UdpSocket, and NetAddr values are opaque u64 handles.
3
+ @extern sa_std_last_error() -> i32
4
+ @extern sa_std_net_error_code_from_status(status: i32) -> i32
5
+ @extern sa_std_net_error_code_from_posix_errno(errno: i32) -> i32
6
+ @extern sa_std_net_error_code_from_wsa_error(error: i32) -> i32
7
+ @extern sa_std_net_error_code_name(code: i32, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
8
+ @extern sa_std_net_error_platform() -> i32
9
+ @extern sa_std_net_error_code_from_native_error(error: i32) -> i32
10
+ @extern sa_std_net_hostname(&out: ptr, out_cap: u64, &out_len: ptr) -> i32
11
+ @extern sa_std_net_tcp_connect(&host: ptr, host_len: u64, port: u32, &out_handle: ptr) -> i32
12
+ @extern sa_std_net_tcp_connect_timeout(&host: ptr, host_len: u64, port: u32, timeout_ns: u64, &out_handle: ptr) -> i32
13
+ @extern sa_std_net_tcp_connect_timeout_addr(addr: u64, timeout_ns: u64, &out_handle: ptr) -> i32
14
+ @extern sa_std_net_tcp_connect_timeout_all(&host: ptr, host_len: u64, port: u32, timeout_ns: u64, &out_handle: ptr) -> i32
15
+ @extern sa_std_net_tcp_listen(&host: ptr, host_len: u64, port: u32, &out_handle: ptr, &out_bound_port: ptr) -> i32
16
+ @extern sa_std_net_tcp_accept(listener: u64, &out_handle: ptr) -> i32
17
+ @extern sa_std_net_tcp_accept_addr(listener: u64, &out_stream: ptr, &out_addr: ptr) -> i32
18
+ @extern sa_std_net_tcp_listener_local_addr(listener: u64, &out_handle: ptr) -> i32
19
+ @extern sa_std_net_tcp_stream_read(stream: u64, &buf: ptr, cap: u64, &out_read: ptr) -> i32
20
+ @extern sa_std_net_tcp_stream_peek(stream: u64, &buf: ptr, cap: u64, &out_read: ptr) -> i32
21
+ @extern sa_std_net_tcp_stream_read_vectored(stream: u64, &iovs: ptr, iov_count: u64, &out_read: ptr) -> i32
22
+ @extern sa_std_net_tcp_stream_write_vectored(stream: u64, &iovs: ptr, iov_count: u64, &out_written: ptr) -> i32
23
+ @extern sa_std_net_tcp_stream_write(stream: u64, &buf: ptr, len: u64, &out_written: ptr) -> i32
24
+ @extern sa_std_net_tcp_stream_set_read_timeout(stream: u64, timeout_ns: u64) -> i32
25
+ @extern sa_std_net_tcp_stream_set_write_timeout(stream: u64, timeout_ns: u64) -> i32
26
+ @extern sa_std_net_tcp_stream_set_nonblocking(stream: u64, enabled: i32) -> i32
27
+ @extern sa_std_net_tcp_stream_set_linger(stream: u64, enabled: i32, timeout_ns: u64) -> i32
28
+ @extern sa_std_net_tcp_stream_linger(stream: u64, &out_enabled: ptr, &out_timeout_ns: ptr) -> i32
29
+ @extern sa_std_net_tcp_stream_set_nodelay(stream: u64, enabled: i32) -> i32
30
+ @extern sa_std_net_tcp_stream_set_quickack(stream: u64, enabled: i32) -> i32
31
+ @extern sa_std_net_tcp_stream_quickack(stream: u64, &out_enabled: ptr) -> i32
32
+ @extern sa_std_net_tcp_stream_set_deferaccept(stream: u64, seconds: u32) -> i32
33
+ @extern sa_std_net_tcp_stream_deferaccept(stream: u64, &out_seconds: ptr) -> i32
34
+ @extern sa_std_net_tcp_stream_set_ttl(stream: u64, ttl: u32) -> i32
35
+ @extern sa_std_net_tcp_stream_read_timeout(stream: u64, &out_timeout_ns: ptr) -> i32
36
+ @extern sa_std_net_tcp_stream_write_timeout(stream: u64, &out_timeout_ns: ptr) -> i32
37
+ @extern sa_std_net_tcp_stream_set_recv_buffer_size(stream: u64, size: u32) -> i32
38
+ @extern sa_std_net_tcp_stream_recv_buffer_size(stream: u64, &out_size: ptr) -> i32
39
+ @extern sa_std_net_tcp_stream_set_send_buffer_size(stream: u64, size: u32) -> i32
40
+ @extern sa_std_net_tcp_stream_send_buffer_size(stream: u64, &out_size: ptr) -> i32
41
+ @extern sa_std_net_tcp_stream_nodelay(stream: u64, &out_enabled: ptr) -> i32
42
+ @extern sa_std_net_tcp_stream_ttl(stream: u64, &out_ttl: ptr) -> i32
43
+ @extern sa_std_net_tcp_stream_take_error(stream: u64, &out_error: ptr) -> i32
44
+ @extern sa_std_net_tcp_stream_peer_addr(stream: u64, &out_handle: ptr) -> i32
45
+ @extern sa_std_net_tcp_stream_local_addr(stream: u64, &out_handle: ptr) -> i32
46
+ @extern sa_std_net_to_socket_addr_first(&host: ptr, host_len: u64, port: u32, &out_handle: ptr) -> i32
47
+ @extern sa_std_net_to_socket_addr_list(&host: ptr, host_len: u64, port: u32, &out_handle: ptr) -> i32
48
+ @extern sa_std_net_addr_list_next(list: u64, &out_ok: ptr, &out_addr: ptr) -> i32
49
+ @extern sa_std_net_addr_list_remaining(list: u64, &out_remaining: ptr) -> i32
50
+ @extern sa_std_net_addr_list_reset(list: u64) -> i32
51
+ @extern sa_std_net_addr_list_free(list: u64) -> i32
52
+ @extern sa_std_net_tcp_listener_set_nonblocking(listener: u64, enabled: i32) -> i32
53
+ @extern sa_std_net_tcp_listener_set_ttl(listener: u64, ttl: u32) -> i32
54
+ @extern sa_std_net_tcp_listener_ttl(listener: u64, &out_ttl: ptr) -> i32
55
+ @extern sa_std_net_tcp_listener_take_error(listener: u64, &out_error: ptr) -> i32
56
+ @extern sa_std_net_tcp_listener_from_raw_fd(fd: i32, &out_handle: ptr) -> i32
57
+ @extern sa_std_net_tcp_stream_from_raw_fd(fd: i32, &out_handle: ptr) -> i32
58
+ @extern sa_std_net_tcp_stream_try_clone(stream: u64, &out_handle: ptr) -> i32
59
+ @extern sa_std_net_tcp_listener_try_clone(listener: u64, &out_handle: ptr) -> i32
60
+ @extern sa_std_net_udp_try_clone(socket: u64, &out_handle: ptr) -> i32
61
+
62
+ // Unix domain sockets (stream). Handles reuse the tcp_stream/tcp_listener kinds,
63
+ // so NET_TCP_STREAM_READ/WRITE/CLOSE and NET_TCP_LISTENER_CLOSE work on them.
64
+ @extern sa_std_net_unix_listen(&path: ptr, path_len: u64, &out_handle: ptr) -> i32
65
+ @extern sa_std_net_unix_accept(listener: u64, &out_handle: ptr) -> i32
66
+ @extern sa_std_net_unix_accept_addr(listener: u64, &out_stream: ptr, &out_addr: ptr) -> i32
67
+ @extern sa_std_net_unix_connect(&path: ptr, path_len: u64, &out_handle: ptr) -> i32
68
+ @extern sa_std_net_unix_pair(&out_left: ptr, &out_right: ptr) -> i32
69
+ @extern sa_std_net_unix_addr_from_abstract_name(&name: ptr, name_len: u64, &out_handle: ptr) -> i32
70
+ @extern sa_std_net_unix_addr_from_pathname(&path: ptr, path_len: u64, &out_handle: ptr) -> i32
71
+ @extern sa_std_net_unix_listen_addr(addr: u64, &out_handle: ptr) -> i32
72
+ @extern sa_std_net_unix_connect_addr(addr: u64, &out_handle: ptr) -> i32
73
+ @extern sa_std_net_unix_listener_local_addr(listener: u64, &out_handle: ptr) -> i32
74
+ @extern sa_std_net_unix_listener_try_clone(listener: u64, &out_handle: ptr) -> i32
75
+ @extern sa_std_net_unix_listener_from_raw_fd(fd: i32, &out_handle: ptr) -> i32
76
+ @extern sa_std_net_unix_stream_local_addr(stream: u64, &out_handle: ptr) -> i32
77
+ @extern sa_std_net_unix_stream_try_clone(stream: u64, &out_handle: ptr) -> i32
78
+ @extern sa_std_net_unix_stream_from_raw_fd(fd: i32, &out_handle: ptr) -> i32
79
+ @extern sa_std_net_unix_stream_peer_addr(stream: u64, &out_handle: ptr) -> i32
80
+ @extern sa_std_net_unix_stream_set_passcred(stream: u64, enabled: i32) -> i32
81
+ @extern sa_std_net_unix_stream_passcred(stream: u64, &out_enabled: ptr) -> i32
82
+ @extern sa_std_net_unix_stream_set_mark(stream: u64, mark: u32) -> i32
83
+ @extern sa_std_net_unix_stream_peer_cred(stream: u64, &out_pid: ptr, &out_uid: ptr, &out_gid: ptr) -> i32
84
+ @extern sa_std_net_unix_datagram_unbound(&out_handle: ptr) -> i32
85
+ @extern sa_std_net_unix_datagram_bind(&path: ptr, path_len: u64, &out_handle: ptr) -> i32
86
+ @extern sa_std_net_unix_datagram_bind_addr(addr: u64, &out_handle: ptr) -> i32
87
+ @extern sa_std_net_unix_datagram_pair(&out_left: ptr, &out_right: ptr) -> i32
88
+ @extern sa_std_net_unix_datagram_connect(socket: u64, &path: ptr, path_len: u64) -> i32
89
+ @extern sa_std_net_unix_datagram_connect_addr(socket: u64, addr: u64) -> i32
90
+ @extern sa_std_net_unix_datagram_try_clone(socket: u64, &out_handle: ptr) -> i32
91
+ @extern sa_std_net_unix_datagram_from_raw_fd(fd: i32, &out_handle: ptr) -> i32
92
+ @extern sa_std_net_unix_datagram_local_addr(socket: u64, &out_handle: ptr) -> i32
93
+ @extern sa_std_net_unix_datagram_peer_addr(socket: u64, &out_handle: ptr) -> i32
94
+ @extern sa_std_net_unix_datagram_set_passcred(socket: u64, enabled: i32) -> i32
95
+ @extern sa_std_net_unix_datagram_passcred(socket: u64, &out_enabled: ptr) -> i32
96
+ @extern sa_std_net_unix_datagram_set_mark(socket: u64, mark: u32) -> i32
97
+ @extern sa_std_net_unix_datagram_shutdown(socket: u64, how: u32) -> i32
98
+ @extern sa_std_net_unix_datagram_send_to(socket: u64, &buf: ptr, len: u64, &path: ptr, path_len: u64, &out_written: ptr) -> i32
99
+ @extern sa_std_net_unix_datagram_send_to_addr(socket: u64, &buf: ptr, len: u64, addr: u64, &out_written: ptr) -> i32
100
+ @extern sa_std_net_unix_datagram_recv_from(socket: u64, &buf: ptr, cap: u64, &out_read: ptr, &out_addr: ptr) -> i32
101
+ @extern sa_std_net_unix_datagram_peek_from(socket: u64, &buf: ptr, cap: u64, &out_read: ptr, &out_addr: ptr) -> i32
102
+
103
+ // Additional stream/listener socket options.
104
+ @extern sa_std_net_tcp_stream_set_keepalive(stream: u64, enabled: i32) -> i32
105
+ @extern sa_std_net_tcp_stream_keepalive(stream: u64, &out_enabled: ptr) -> i32
106
+ @extern sa_std_net_tcp_stream_set_keepalive_params(stream: u64, idle_secs: u32, intvl_secs: u32, cnt: u32) -> i32
107
+ @extern sa_std_net_tcp_listener_set_reuseaddr(listener: u64, enabled: i32) -> i32
108
+ @extern sa_std_net_tcp_listener_set_reuseport(listener: u64, enabled: i32) -> i32
109
+ @extern sa_std_net_tcp_listener_set_only_v6(listener: u64, enabled: i32) -> i32
110
+ @extern sa_std_net_tcp_listener_only_v6(listener: u64, &out_enabled: ptr) -> i32
111
+ @extern sa_std_net_udp_set_only_v6(socket: u64, enabled: i32) -> i32
112
+ @extern sa_std_net_udp_only_v6(socket: u64, &out_enabled: ptr) -> i32
113
+
114
+ // TLS ClientHello fingerprint digests (JA3 = MD5 hex, JA4 segment = SHA256 first 12 hex chars).
115
+ @extern sa_std_net_ja3_hash(&ja3: ptr, ja3_len: u64, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
116
+ @extern sa_std_net_ja4_hash12(&data: ptr, data_len: u64, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
117
+
118
+ // Shared WebSocket frame codec (downpushed from http_client/http_server/node/deno plugins).
119
+ @extern sa_std_ws_accept_key(&key: ptr, key_len: u64, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
120
+ @extern sa_std_ws_frame_parse(&data: ptr, data_len: u64, &out_fin: ptr, &out_opcode: ptr, &out_masked: ptr, &out_payload_offset: ptr, &out_payload_len: ptr, &out_frame_len: ptr, &out_mask: ptr) -> i32
121
+ @extern sa_std_ws_unmask(&payload: ptr, payload_len: u64, &mask: ptr) -> i32
122
+ @extern sa_std_ws_frame_build(opcode: u32, fin: u32, &payload: ptr, payload_len: u64, &mask: ptr, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
123
+ @extern sa_std_ws_frame_build_unmasked(opcode: u32, fin: u32, &payload: ptr, payload_len: u64, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
124
+
125
+ // Shared URL parser (scheme://host[:port][/path]). Any out buffer may be omitted.
126
+ @extern sa_std_url_parse(&url: ptr, url_len: u64, &scheme_out: ptr, scheme_cap: u64, &scheme_len: ptr, &host_out: ptr, host_cap: u64, &host_len: ptr, &path_out: ptr, path_cap: u64, &path_len: ptr, &out_port: ptr) -> i32
127
+
128
+ @extern sa_std_net_udp_bind(&host: ptr, host_len: u64, port: u32, &out_handle: ptr) -> i32
129
+ @extern sa_std_net_udp_from_raw_fd(fd: i32, &out_handle: ptr) -> i32
130
+ @extern sa_std_net_udp_local_addr(socket: u64, &out_handle: ptr) -> i32
131
+ @extern sa_std_net_udp_peer_addr(socket: u64, &out_handle: ptr) -> i32
132
+ @extern sa_std_net_udp_connect(socket: u64, &host: ptr, host_len: u64, port: u32) -> i32
133
+ @extern sa_std_net_udp_connect_addr(socket: u64, addr: u64) -> i32
134
+ @extern sa_std_net_udp_set_read_timeout(socket: u64, timeout_ns: u64) -> i32
135
+ @extern sa_std_net_udp_set_write_timeout(socket: u64, timeout_ns: u64) -> i32
136
+ @extern sa_std_net_udp_set_nonblocking(socket: u64, enabled: i32) -> i32
137
+ @extern sa_std_net_udp_set_broadcast(socket: u64, enabled: i32) -> i32
138
+ @extern sa_std_net_udp_set_ttl(socket: u64, ttl: u32) -> i32
139
+ @extern sa_std_net_udp_set_multicast_loop_v4(socket: u64, enabled: i32) -> i32
140
+ @extern sa_std_net_udp_set_multicast_ttl_v4(socket: u64, ttl: u32) -> i32
141
+ @extern sa_std_net_udp_set_multicast_loop_v6(socket: u64, enabled: i32) -> i32
142
+ @extern sa_std_net_udp_set_multicast_hops_v6(socket: u64, hops: u32) -> i32
143
+ @extern sa_std_net_udp_read_timeout(socket: u64, &out_timeout_ns: ptr) -> i32
144
+ @extern sa_std_net_udp_write_timeout(socket: u64, &out_timeout_ns: ptr) -> i32
145
+ @extern sa_std_net_udp_set_recv_buffer_size(socket: u64, size: u32) -> i32
146
+ @extern sa_std_net_udp_recv_buffer_size(socket: u64, &out_size: ptr) -> i32
147
+ @extern sa_std_net_udp_set_send_buffer_size(socket: u64, size: u32) -> i32
148
+ @extern sa_std_net_udp_send_buffer_size(socket: u64, &out_size: ptr) -> i32
149
+ @extern sa_std_net_udp_broadcast(socket: u64, &out_enabled: ptr) -> i32
150
+ @extern sa_std_net_udp_ttl(socket: u64, &out_ttl: ptr) -> i32
151
+ @extern sa_std_net_udp_multicast_loop_v4(socket: u64, &out_enabled: ptr) -> i32
152
+ @extern sa_std_net_udp_multicast_ttl_v4(socket: u64, &out_ttl: ptr) -> i32
153
+ @extern sa_std_net_udp_multicast_loop_v6(socket: u64, &out_enabled: ptr) -> i32
154
+ @extern sa_std_net_udp_multicast_hops_v6(socket: u64, &out_hops: ptr) -> i32
155
+ @extern sa_std_net_udp_set_multicast_if_v4(socket: u64, &interface_addr: ptr) -> i32
156
+ @extern sa_std_net_udp_multicast_if_v4(socket: u64, &out_interface_addr: ptr) -> i32
157
+ @extern sa_std_net_udp_set_multicast_if_v6(socket: u64, interface_index: u32) -> i32
158
+ @extern sa_std_net_udp_multicast_if_v6(socket: u64, &out_interface_index: ptr) -> i32
159
+ @extern sa_std_net_udp_take_error(socket: u64, &out_error: ptr) -> i32
160
+ @extern sa_std_net_udp_send(socket: u64, &buf: ptr, len: u64, &out_written: ptr) -> i32
161
+ @extern sa_std_net_udp_recv(socket: u64, &buf: ptr, cap: u64, &out_read: ptr) -> i32
162
+ @extern sa_std_net_udp_peek(socket: u64, &buf: ptr, cap: u64, &out_read: ptr) -> i32
163
+ @extern sa_std_net_udp_send_to(socket: u64, &buf: ptr, len: u64, &host: ptr, host_len: u64, port: u32, &out_written: ptr) -> i32
164
+ @extern sa_std_net_udp_recv_from(socket: u64, &buf: ptr, cap: u64, &out_read: ptr, &out_addr: ptr) -> i32
165
+ @extern sa_std_net_udp_peek_from(socket: u64, &buf: ptr, cap: u64, &out_read: ptr, &out_addr: ptr) -> i32
166
+ @extern sa_std_net_udp_send_vectored(socket: u64, &iovs: ptr, iov_count: u64, &out_written: ptr) -> i32
167
+ @extern sa_std_net_udp_send_to_vectored(socket: u64, &iovs: ptr, iov_count: u64, &host: ptr, host_len: u64, port: u32, &out_written: ptr) -> i32
168
+ @extern sa_std_net_udp_recv_from_vectored(socket: u64, &iovs: ptr, iov_count: u64, &out_read: ptr, &out_addr: ptr) -> i32
169
+ @extern sa_std_net_udp_join_multicast_v4(socket: u64, &multi_host: ptr, multi_host_len: u64, &interface_host: ptr, interface_host_len: u64) -> i32
170
+ @extern sa_std_net_udp_leave_multicast_v4(socket: u64, &multi_host: ptr, multi_host_len: u64, &interface_host: ptr, interface_host_len: u64) -> i32
171
+ @extern sa_std_net_udp_join_multicast_v6(socket: u64, &multi_host: ptr, multi_host_len: u64, interface_index: u32) -> i32
172
+ @extern sa_std_net_udp_leave_multicast_v6(socket: u64, &multi_host: ptr, multi_host_len: u64, interface_index: u32) -> i32
173
+
174
+ @extern sa_net_tcp_connect(&host: ptr, host_len: u64, port: u32) -> u64!
175
+ @extern sa_net_tcp_stream_read(stream: u64, &buf: ptr, cap: u64) -> u64!
176
+ @extern sa_net_tcp_stream_peek(stream: u64, &buf: ptr, cap: u64) -> i32
177
+ @extern sa_net_tcp_stream_set_read_timeout(stream: u64, timeout_ns: u64) -> i32
178
+ @extern sa_net_tcp_stream_set_write_timeout(stream: u64, timeout_ns: u64) -> i32
179
+ @extern sa_net_tcp_stream_set_nonblocking(stream: u64, enabled: i32) -> i32
180
+ @extern sa_net_tcp_stream_set_nodelay(stream: u64, enabled: i32) -> i32
181
+ @extern sa_net_tcp_stream_set_ttl(stream: u64, ttl: u32) -> i32
182
+ @extern sa_net_tcp_stream_write(stream: u64, &buf: ptr, len: u64) -> i32
183
+ @extern sa_net_tcp_stream_write_all(stream: u64, &buf: ptr, len: u64) -> i32!
184
+ @extern sa_net_tcp_stream_read_exact(stream: u64, &buf: ptr, len: u64) -> i32!
185
+ @extern sa_net_tcp_stream_flush(stream: u64) -> i32
186
+ @extern sa_net_tcp_stream_peer_addr(stream: u64) -> i32
187
+ @extern sa_net_tcp_stream_shutdown(stream: u64, how: u32) -> i32
188
+ @extern sa_net_tcp_stream_close(stream: u64) -> i32!
189
+
190
+ @extern sa_net_tcp_listener_bind(&host: ptr, host_len: u64, port: u16) -> u64!
191
+ @extern sa_net_tcp_listener_accept(listener: u64) -> u64!
192
+ @extern sa_net_tcp_listener_local_addr(listener: u64) -> u64!
193
+ @extern sa_net_tcp_listener_close(listener: u64) -> i32!
194
+
195
+ @extern sa_net_udp_bind(&host: ptr, host_len: u64, port: u16) -> i32
196
+ @extern sa_net_udp_connect(socket: u64, &host: ptr, host_len: u64, port: u16) -> i32
197
+ @extern sa_net_udp_local_addr(socket: u64) -> i32
198
+ @extern sa_net_udp_set_read_timeout(socket: u64, timeout_ns: u64) -> i32
199
+ @extern sa_net_udp_set_write_timeout(socket: u64, timeout_ns: u64) -> i32
200
+ @extern sa_net_udp_set_nonblocking(socket: u64, enabled: i32) -> i32
201
+ @extern sa_net_udp_set_broadcast(socket: u64, enabled: i32) -> i32
202
+ @extern sa_net_udp_set_ttl(socket: u64, ttl: u32) -> i32
203
+ @extern sa_net_udp_set_multicast_loop_v4(socket: u64, enabled: i32) -> i32
204
+ @extern sa_net_udp_set_multicast_ttl_v4(socket: u64, ttl: u32) -> i32
205
+ @extern sa_net_udp_send(socket: u64, &buf: ptr, len: u64) -> i32
206
+ @extern sa_net_udp_recv(socket: u64, &buf: ptr, cap: u64) -> i32
207
+ @extern sa_net_udp_peek(socket: u64, &buf: ptr, cap: u64) -> i32
208
+ @extern sa_net_udp_send_to(socket: u64, &buf: ptr, len: u64, &host: ptr, host_len: u64, port: u16) -> i32
209
+ @extern sa_net_udp_recv_from(socket: u64, &buf: ptr, cap: u64, &out_addr: ptr) -> i32
210
+ @extern sa_net_udp_peek_from(socket: u64, &buf: ptr, cap: u64, &out_addr: ptr) -> i32
211
+ @extern sa_net_udp_join_multicast_v4(socket: u64, &multi_host: ptr, multi_host_len: u64, &interface_host: ptr, interface_host_len: u64) -> i32
212
+ @extern sa_net_udp_leave_multicast_v4(socket: u64, &multi_host: ptr, multi_host_len: u64, &interface_host: ptr, interface_host_len: u64) -> i32
213
+ @extern sa_net_udp_join_multicast_v6(socket: u64, &multi_host: ptr, multi_host_len: u64, interface_index: u32) -> i32
214
+ @extern sa_net_udp_leave_multicast_v6(socket: u64, &multi_host: ptr, multi_host_len: u64, interface_index: u32) -> i32
215
+ @extern sa_net_udp_close(socket: u64) -> i32
216
+
217
+ // Owned SaNetAddr values are returned by address query APIs and must be freed.
218
+ @extern sa_net_addr_host(addr: u64) -> &ptr
219
+ @extern sa_net_addr_host_len(addr: u64) -> u64
220
+ @extern sa_net_addr_port(addr: u64) -> u32
221
+ @extern sa_net_addr_family(addr: u64) -> u32
222
+ @extern sa_net_addr_scope_id(addr: u64) -> u64
223
+ @extern sa_std_net_addr_format(addr: u64, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
224
+ @extern sa_net_addr_free(addr: u64) -> i32!
225
+ @extern sa_net_unix_addr_kind(addr: u64) -> u32
226
+ @extern sa_net_unix_addr_is_unnamed(addr: u64) -> u8
227
+ @extern sa_net_unix_addr_path_ptr(addr: u64) -> &ptr
228
+ @extern sa_net_unix_addr_path_len(addr: u64) -> u64
229
+ @extern sa_net_unix_addr_abstract_ptr(addr: u64) -> &ptr
230
+ @extern sa_net_unix_addr_abstract_len(addr: u64) -> u64
231
+ @extern sa_net_unix_addr_free(addr: u64) -> i32!
232
+ @extern sa_net_ipv4_parse_ascii(&text: ptr, text_len: u64, &out_addr: ptr) -> i32
233
+ @extern sa_net_socket_addr_v4_parse_ascii(&text: ptr, text_len: u64, &out_socket_addr: ptr) -> i32
234
+ @extern sa_net_ipv6_parse_ascii(&text: ptr, text_len: u64, &out_addr: ptr) -> i32
235
+ @extern sa_net_socket_addr_v6_parse_ascii(&text: ptr, text_len: u64, &out_socket_addr: ptr) -> i32
236
+ @extern sa_net_ipv4_format_ascii(&addr: ptr, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
237
+ @extern sa_net_ipv6_format_ascii(&addr: ptr, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
238
+ @extern sa_net_socket_addr_v4_format_ascii(&addr: ptr, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
239
+ @extern sa_net_socket_addr_v6_format_ascii(&addr: ptr, &out: ptr, out_cap: u64, &out_len: ptr) -> i32
package/sa_std/net.sal ADDED
@@ -0,0 +1,159 @@
1
+ #def SA_NET_OK = 0
2
+ #def SA_NET_ERR_UNKNOWN = 1
3
+ #def SA_NET_ERR_DNS = 2
4
+ #def SA_NET_ERR_REFUSED = 3
5
+ #def SA_NET_ERR_TIMEOUT = 4
6
+ #def SA_NET_ERR_CLOSED = 5
7
+ #def SA_NET_ERR_WOULD_BLOCK = 6
8
+ #def SA_NET_ERR_INVALID_ADDR = 7
9
+ #def SA_NET_ERR_ACCESS = 4
10
+ #def SA_NET_ERR_UNSUPPORTED = 8
11
+ #def SA_NET_ERROR_CODE_OK = 0
12
+ #def SA_NET_ERROR_CODE_UNKNOWN = 1
13
+ #def SA_NET_ERROR_CODE_DNS = 2
14
+ #def SA_NET_ERROR_CODE_CONNECTION_REFUSED = 3
15
+ #def SA_NET_ERROR_CODE_TIMED_OUT = 4
16
+ #def SA_NET_ERROR_CODE_CONNECTION_CLOSED = 5
17
+ #def SA_NET_ERROR_CODE_WOULD_BLOCK = 6
18
+ #def SA_NET_ERROR_CODE_INVALID_ADDRESS = 7
19
+ #def SA_NET_ERROR_CODE_ACCESS_DENIED = 8
20
+ #def SA_NET_ERROR_CODE_UNSUPPORTED = 9
21
+ #def SA_NET_ERROR_CODE_INVALID_ARGUMENT = 10
22
+ #def SA_NET_ERROR_CODE_INVALID_HANDLE = 11
23
+ #def SA_NET_ERROR_CODE_NOT_FOUND = 12
24
+ #def SA_NET_ERROR_CODE_NO_MEMORY = 13
25
+ #def SA_NET_ERROR_CODE_IO = 14
26
+ #def SA_NET_ERROR_CODE_NETWORK_UNREACHABLE = 15
27
+ #def SA_NET_ERROR_CODE_ADDR_IN_USE = 16
28
+ #def SA_NET_ERROR_CODE_ADDR_NOT_AVAILABLE = 17
29
+ #def SA_NET_ERROR_CODE_CONNECTION_RESET = 18
30
+ #def SA_NET_ERROR_CODE_CONNECTION_ABORTED = 19
31
+ #def SA_NET_ERROR_CODE_NOT_CONNECTED = 20
32
+ #def SA_NET_ERROR_CODE_HOST_UNREACHABLE = 21
33
+ #def SA_NET_ERROR_CODE_BROKEN_PIPE = 22
34
+ #def SA_NET_ERROR_CODE_ALREADY_EXISTS = 23
35
+ #def SA_NET_ERROR_CODE_INTERRUPTED = 24
36
+ #def SA_NET_ERROR_CODE_UNEXPECTED_EOF = 25
37
+ #def SA_NET_ERROR_CODE_INVALID_DATA = 26
38
+ #def SA_NET_ERROR_CODE_NETWORK_DOWN = 27
39
+ #def SA_NET_ERROR_CODE_WRITE_ZERO = 28
40
+
41
+ #def SA_NET_ERROR_PLATFORM_NONE = 0
42
+ #def SA_NET_ERROR_PLATFORM_POSIX = 1
43
+ #def SA_NET_ERROR_PLATFORM_WINDOWS = 2
44
+
45
+ #def SaNetError_SIZE = 16
46
+ #def SaNetError_ALIGN = 4
47
+ #def SaNetError_code = +0
48
+ #def SaNetError_platform = +4
49
+ #def SaNetError_raw = +8
50
+ #def SaNetError_status = +12
51
+
52
+ #def SA_NET_AF_UNSPEC = 0
53
+ #def SA_NET_AF_IPV4 = 4
54
+ #def SA_NET_AF_IPV6 = 6
55
+
56
+ #def SA_NET_SHUTDOWN_READ = 0
57
+ #def SA_NET_SHUTDOWN_WRITE = 1
58
+ #def SA_NET_SHUTDOWN_BOTH = 2
59
+
60
+ #def SA_NET_AF_INET = 2
61
+ #def SA_NET_AF_INET6 = 10
62
+
63
+ #def SA_NET_UNIX_ADDR_UNNAMED = 0
64
+ #def SA_NET_UNIX_ADDR_PATHNAME = 1
65
+ #def SA_NET_UNIX_ADDR_ABSTRACT = 2
66
+
67
+ #def SA_NET_SOCKET_OPTION_ENABLE = 1
68
+ #def SA_NET_SOCKET_OPTION_DISABLE = 0
69
+
70
+ #def SA_NET_IOV_MAX = 1024
71
+ #def SaNetIov_SIZE = 16
72
+ #def SaNetIov_ALIGN = 8
73
+ #def SaNetIov_base = +0
74
+ #def SaNetIov_len = +8
75
+
76
+ #def SaNetAddr_SIZE = 32
77
+ #def SaNetAddr_family = +0
78
+ #def SaNetAddr_port = +4
79
+ #def SaNetAddr_host_ptr = +8
80
+ #def SaNetAddr_host_len = +16
81
+ #def SaNetAddr_scope_id = +24
82
+
83
+ #def NetIpv4Addr_SIZE = 4
84
+ #def NET_IPV4_BITS_VALUE = 32
85
+ #def NetIpv4Addr_a = +0
86
+ #def NetIpv4Addr_b = +1
87
+ #def NetIpv4Addr_c = +2
88
+ #def NetIpv4Addr_d = +3
89
+
90
+ #def NetIpv6Addr_SIZE = 16
91
+ #def NET_IPV6_BITS_VALUE = 128
92
+ #def NET_IPV6_MULTICAST_SCOPE_INTERFACE_LOCAL = 1
93
+ #def NET_IPV6_MULTICAST_SCOPE_LINK_LOCAL = 2
94
+ #def NET_IPV6_MULTICAST_SCOPE_REALM_LOCAL = 3
95
+ #def NET_IPV6_MULTICAST_SCOPE_ADMIN_LOCAL = 4
96
+ #def NET_IPV6_MULTICAST_SCOPE_SITE_LOCAL = 5
97
+ #def NET_IPV6_MULTICAST_SCOPE_ORGANIZATION_LOCAL = 8
98
+ #def NET_IPV6_MULTICAST_SCOPE_GLOBAL = 14
99
+ #def NET_IPV6_MULTICAST_SCOPE_RESERVED_ZERO = 0
100
+ #def NET_IPV6_MULTICAST_SCOPE_UNASSIGNED6 = 6
101
+ #def NET_IPV6_MULTICAST_SCOPE_UNASSIGNED7 = 7
102
+ #def NET_IPV6_MULTICAST_SCOPE_UNASSIGNED9 = 9
103
+ #def NET_IPV6_MULTICAST_SCOPE_UNASSIGNED_A = 10
104
+ #def NET_IPV6_MULTICAST_SCOPE_UNASSIGNED_B = 11
105
+ #def NET_IPV6_MULTICAST_SCOPE_UNASSIGNED_C = 12
106
+ #def NET_IPV6_MULTICAST_SCOPE_UNASSIGNED_D = 13
107
+ #def NET_IPV6_MULTICAST_SCOPE_RESERVED_F = 15
108
+ #def NetIpv6Addr_s0 = +0
109
+ #def NetIpv6Addr_s1 = +2
110
+ #def NetIpv6Addr_s2 = +4
111
+ #def NetIpv6Addr_s3 = +6
112
+ #def NetIpv6Addr_s4 = +8
113
+ #def NetIpv6Addr_s5 = +10
114
+ #def NetIpv6Addr_s6 = +12
115
+ #def NetIpv6Addr_s7 = +14
116
+
117
+ #def NetIpAddr_SIZE = 24
118
+ #def NetIpAddr_tag = +0
119
+ #def NetIpAddr_payload = +8
120
+ #def NET_IP_ADDR_V4 = 4
121
+ #def NET_IP_ADDR_V6 = 6
122
+
123
+ #def NetSocketAddrV4_SIZE = 8
124
+ #def NetSocketAddrV4_ip = +0
125
+ #def NetSocketAddrV4_port = +4
126
+
127
+ #def NetSocketAddrV6_SIZE = 32
128
+ #def NetSocketAddrV6_ip = +0
129
+ #def NetSocketAddrV6_port = +16
130
+ #def NetSocketAddrV6_flowinfo = +20
131
+ #def NetSocketAddrV6_scope_id = +24
132
+
133
+ #def NetSocketAddr_SIZE = 40
134
+ #def NetSocketAddr_tag = +0
135
+ #def NetSocketAddr_payload = +8
136
+
137
+ #def NetTcpIncoming_SIZE = 8
138
+ #def NetTcpIncoming_listener = +0
139
+
140
+ #def AddrParseError_SIZE = 8
141
+ #def AddrParseError_ALIGN = 8
142
+ #def AddrParseError_kind = +0
143
+ #def ADDR_PARSE_ERROR_IP = 0
144
+ #def ADDR_PARSE_ERROR_IPV4 = 1
145
+ #def ADDR_PARSE_ERROR_IPV6 = 2
146
+ #def ADDR_PARSE_ERROR_SOCKET = 3
147
+ #def ADDR_PARSE_ERROR_SOCKET_V4 = 4
148
+ #def ADDR_PARSE_ERROR_SOCKET_V6 = 5
149
+ #def SA_NET_STATUS_OK = 0
150
+ #def SA_NET_STATUS_INVALID_ARGUMENT = 1
151
+ #def SA_NET_STATUS_INVALID_HANDLE = 2
152
+ #def SA_NET_STATUS_NOT_FOUND = 3
153
+ #def SA_NET_STATUS_ACCESS = 4
154
+ #def SA_NET_STATUS_NO_MEMORY = 5
155
+ #def SA_NET_STATUS_IO = 6
156
+ #def SA_NET_STATUS_NET = 7
157
+ #def SA_NET_STATUS_UNSUPPORTED = 8
158
+ #def SA_NET_STATUS_TRUNCATED = 9
159
+ #def SA_NET_STATUS_UNKNOWN = 127
package/sa_std/netx.sa ADDED
@@ -0,0 +1,85 @@
1
+ @import "netx.sal"
2
+ @import "netx.sai"
3
+
4
+ // Netx (io_uring 网络引擎) 的 SA 宏层。
5
+ // 运行时 (src/runtime/sa_net_uring.zig) 拥有 socket/槽位池/解析/io_uring 编排;
6
+ // 这些宏只是对 sa_netx_* C-ABI 的薄封装,全部返回 SA_NETX_* 状态码 (i32)。
7
+ // 传缓冲区的参数遵循 net.sa 约定:调用方传缓冲区符号,宏内部取地址。
8
+
9
+ // ---- 引擎生命周期 ----
10
+
11
+ [MACRO] NETX_INIT %out_status, %slot_capacity, %reactor_count
12
+ %out_status = call @sa_netx_init(%slot_capacity, %reactor_count)
13
+ [END_MACRO]
14
+
15
+ [MACRO] NETX_LISTEN %out_status, %host, %host_len, %port
16
+ %out_status = call @sa_netx_listen(&%host, %host_len, %port)
17
+ [END_MACRO]
18
+
19
+ [MACRO] NETX_SHUTDOWN %out_status
20
+ %out_status = call @sa_netx_shutdown()
21
+ [END_MACRO]
22
+
23
+ // ---- 事件消费与出站 ----
24
+
25
+ // %ticket 必须指向一块至少 Ticket_SIZE 字节的缓冲区 (stack_alloc Ticket_SIZE)。
26
+ // 阻塞直到有票据;返回 SA_NETX_OK 时 %ticket 被填充,SA_NETX_ERR_NOT_FOUND 表示引擎已关停。
27
+ [MACRO] NETX_RECV_TICKET %out_status, %reactor_id, %ticket
28
+ %out_status = call @sa_netx_recv_ticket(%reactor_id, &%ticket)
29
+ [END_MACRO]
30
+
31
+ [MACRO] NETX_PUSH_OUTBOUND %out_status, %reactor_id, %slot_id, %msg, %len
32
+ %out_status = call @sa_netx_push_outbound(%reactor_id, %slot_id, &%msg, %len)
33
+ [END_MACRO]
34
+
35
+ // %slot_ids 指向 %n 个连续 u32 槽位 id;同一条 %msg 扇出给全部槽位。
36
+ [MACRO] NETX_BROADCAST %out_status, %reactor_id, %slot_ids, %n, %msg, %len
37
+ %out_status = call @sa_netx_broadcast(%reactor_id, &%slot_ids, %n, &%msg, %len)
38
+ [END_MACRO]
39
+
40
+ [MACRO] NETX_CLOSE_SLOT %out_status, %slot_id
41
+ %out_status = call @sa_netx_close_slot(%slot_id)
42
+ [END_MACRO]
43
+
44
+ // ---- Ticket 字段直读 ----
45
+ // %ticket 是 NETX_RECV_TICKET 填充的缓冲区地址;以下宏按 netx.sal 偏移直读,无拷贝。
46
+
47
+ [MACRO] NETX_TICKET_SLOT_ID %out_slot_id, %ticket
48
+ %out_slot_id = load %ticket+Ticket_slot_id as u32
49
+ [END_MACRO]
50
+
51
+ [MACRO] NETX_TICKET_OP_CODE %out_op, %ticket
52
+ %out_op = load %ticket+Ticket_op_code as u16
53
+ [END_MACRO]
54
+
55
+ [MACRO] NETX_TICKET_PROTO %out_proto, %ticket
56
+ %out_proto = load %ticket+Ticket_proto as u8
57
+ [END_MACRO]
58
+
59
+ [MACRO] NETX_TICKET_FLAGS %out_flags, %ticket
60
+ %out_flags = load %ticket+Ticket_flags as u8
61
+ [END_MACRO]
62
+
63
+ [MACRO] NETX_TICKET_PAYLOAD %out_ptr, %ticket
64
+ %out_ptr = load %ticket+Ticket_payload as ptr
65
+ [END_MACRO]
66
+
67
+ [MACRO] NETX_TICKET_PAYLOAD_LEN %out_len, %ticket
68
+ %out_len = load %ticket+Ticket_payload_len as u32
69
+ [END_MACRO]
70
+
71
+ // ---- 复合便利宏 ----
72
+
73
+ // 一次性把 op_code / slot_id / proto 三个最常用字段读出。
74
+ [MACRO] NETX_TICKET_HEADER %out_op, %out_slot_id, %out_proto, %ticket
75
+ %out_op = load %ticket+Ticket_op_code as u16
76
+ %out_slot_id = load %ticket+Ticket_slot_id as u32
77
+ %out_proto = load %ticket+Ticket_proto as u8
78
+ [END_MACRO]
79
+
80
+ // 判定票据是否为某个 TicketOp (见 netx.sal 的 NETX_OP_*)。
81
+ [MACRO] NETX_TICKET_IS_OP %out_flag, %ticket, %op
82
+ __netx_ticket_op_%out_flag = load %ticket+Ticket_op_code as u16
83
+ %out_flag = eq __netx_ticket_op_%out_flag, %op
84
+ !__netx_ticket_op_%out_flag
85
+ [END_MACRO]
@@ -0,0 +1,11 @@
1
+ // SA-facing contracts for the Zig-backed sa_netx runtime module.
2
+ // The runtime owns sockets, slot pools, parsing, and io_uring orchestration.
3
+ // Every entry returns a plain i32 status code (SA_NETX_OK / SA_NETX_ERR_*),
4
+ // matching the `pub export fn ... i32` signatures in src/runtime/sa_net_uring.zig.
5
+ @extern sa_netx_init(slot_capacity: u64, reactor_count: u32) -> i32
6
+ @extern sa_netx_listen(&host: ptr, host_len: u64, port: u16) -> i32
7
+ @extern sa_netx_recv_ticket(reactor_id: u32, &out_ticket: ptr) -> i32
8
+ @extern sa_netx_push_outbound(reactor_id: u32, slot_id: u32, &msg: ptr, len: u32) -> i32
9
+ @extern sa_netx_broadcast(reactor_id: u32, &slot_ids: ptr, n: u32, &msg: ptr, len: u32) -> i32
10
+ @extern sa_netx_close_slot(slot_id: u32) -> i32
11
+ @extern sa_netx_shutdown() -> i32
@@ -0,0 +1,39 @@
1
+ #def Ticket_SIZE = 24
2
+ #def Ticket_slot_id = +0
3
+ #def Ticket_op_code = +4
4
+ #def Ticket_proto = +6
5
+ #def Ticket_flags = +7
6
+ #def Ticket_payload = +8
7
+ #def Ticket_payload_len = +16
8
+ #def Ticket_pad = +20
9
+
10
+ #def NetxProto_HTTP = 1
11
+ #def NetxProto_WS = 2
12
+ #def NetxProto_RAW = 3
13
+
14
+ #def SA_NETX_OK = 0
15
+ #def SA_NETX_ERR_INVALID_ARGUMENT = 1
16
+ #def SA_NETX_ERR_INVALID_HANDLE = 2
17
+ #def SA_NETX_ERR_NOT_FOUND = 3
18
+ #def SA_NETX_ERR_ACCESS = 4
19
+ #def SA_NETX_ERR_NO_MEMORY = 5
20
+ #def SA_NETX_ERR_IO = 6
21
+ #def SA_NETX_ERR_NET = 7
22
+ #def SA_NETX_ERR_UNSUPPORTED = 8
23
+ #def SA_NETX_ERR_TRUNCATED = 9
24
+
25
+ #def NETX_OP_ACCEPT = 1
26
+ #def NETX_OP_HTTP_REQUEST = 2
27
+ #def NETX_OP_WEBSOCKET_UPGRADE = 3
28
+ #def NETX_OP_WS_FRAME = 4
29
+ #def NETX_OP_RAW_BYTES = 5
30
+ #def NETX_OP_PEER_CLOSE = 6
31
+ #def NETX_OP_SEND_DONE = 7
32
+ #def NETX_OP_ERR = 8
33
+
34
+ #def NETX_FLAG_TRUNCATED = 1
35
+ #def NETX_FLAG_UPGRADE = 2
36
+ #def NETX_FLAG_EOF = 4
37
+ #def NETX_FLAG_MASKED = 8
38
+ #def NETX_FLAG_ZC = 16
39
+ #def NETX_FLAG_FIN_CONTINUATION = 32
@@ -0,0 +1,3 @@
1
+ // Public NonZero integer facade over num.sa.
2
+ @import "num.sal"
3
+ @import "num.sa"
@@ -0,0 +1,2 @@
1
+ // NonZero integer layout and constants.
2
+ @import "num.sal"
@@ -0,0 +1,3 @@
1
+ // NonZero integer namespace facade.
2
+ @import "../num.sal"
3
+ @import "../num.sa"
@@ -0,0 +1 @@
1
+ @import "../num.sal"
@@ -0,0 +1,3 @@
1
+ // Stable numeric namespace aggregation.
2
+ @import "nonzero.sa"
3
+ @import "../num.sa"
@@ -0,0 +1,3 @@
1
+ // ABI/layout companion for numeric namespace aggregation.
2
+ @import "nonzero.sal"
3
+ @import "../num.sal"