@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.
- package/bin/sa.js +13 -1
- package/package.json +8 -7
- package/sa_std/alloc/layout.sal +12 -0
- package/sa_std/alloc/prelude.sa +1 -0
- package/sa_std/alloc/prelude.sal +1 -0
- package/sa_std/alloc/string.sa +3 -0
- package/sa_std/alloc/vec.sa +684 -0
- package/sa_std/alloc/vec.sal +4 -0
- package/sa_std/any.sa +130 -0
- package/sa_std/any.sal +23 -0
- package/sa_std/array.sa +1876 -0
- package/sa_std/ascii.sa +2 -0
- package/sa_std/ascii.sal +1 -0
- package/sa_std/async.sla +116 -0
- package/sa_std/binary_heap.sa +3003 -0
- package/sa_std/binary_heap.sal +7 -0
- package/sa_std/borrow.sa +171 -0
- package/sa_std/borrow.sal +13 -0
- package/sa_std/btree_map.sa +2210 -0
- package/sa_std/btree_map.sal +11 -0
- package/sa_std/btree_set.sa +1072 -0
- package/sa_std/btree_set.sal +6 -0
- package/sa_std/char.sa +1309 -0
- package/sa_std/char.sal +50 -0
- package/sa_std/cmp.sa +554 -0
- package/sa_std/cmp.sal +14 -0
- package/sa_std/collections/binary_heap.sa +1 -0
- package/sa_std/collections/btree_map.sa +1 -0
- package/sa_std/collections/btree_set.sa +1 -0
- package/sa_std/collections/hashmap.sa +1 -0
- package/sa_std/collections/hashset.sa +1 -0
- package/sa_std/collections/linked_list.sa +1120 -0
- package/sa_std/collections/linked_list.sal +10 -0
- package/sa_std/collections/prelude.sa +7 -0
- package/sa_std/collections/prelude.sal +1 -0
- package/sa_std/collections/vec_deque.sa +1 -0
- package/sa_std/collections.sal +13 -0
- package/sa_std/convert.sa +1115 -0
- package/sa_std/convert.sal +24 -0
- package/sa_std/core/arc.sa +233 -0
- package/sa_std/core/arc.sal +4 -0
- package/sa_std/core/ascii.sa +784 -0
- package/sa_std/core/ascii.sal +34 -0
- package/sa_std/core/bit.sa +41 -0
- package/sa_std/core/box.sa +1 -0
- package/sa_std/core/box.sal +2 -0
- package/sa_std/core/cell.sa +108 -0
- package/sa_std/core/cell.sal +5 -0
- package/sa_std/core/cleanup.sa +26 -0
- package/sa_std/core/control.sa +20 -0
- package/sa_std/core/derive.sa +60 -0
- package/sa_std/core/derive.sal +1 -0
- package/sa_std/core/dispatch.sa +7 -0
- package/sa_std/core/dispatch.sal +5 -0
- package/sa_std/core/future.sa +777 -0
- package/sa_std/core/future.sal +73 -0
- package/sa_std/core/hash.sa +48 -0
- package/sa_std/core/iter.sa +2805 -0
- package/sa_std/core/iter.sal +4 -0
- package/sa_std/core/loop.sa +60 -0
- package/sa_std/core/mem.sa +220 -0
- package/sa_std/core/option.sa +825 -0
- package/sa_std/core/option.sal +11 -0
- package/sa_std/core/panic.sa +23 -0
- package/sa_std/core/panic.sal +12 -0
- package/sa_std/core/prelude.sa +18 -0
- package/sa_std/core/prelude.sal +18 -0
- package/sa_std/core/rc.sa +225 -0
- package/sa_std/core/rc.sal +4 -0
- package/sa_std/core/refcell.sa +283 -0
- package/sa_std/core/refcell.sal +13 -0
- package/sa_std/core/result.sa +708 -0
- package/sa_std/core/result.sal +6 -0
- package/sa_std/core/rust_patterns.sal +295 -0
- package/sa_std/core/sa_core.sa +84 -0
- package/sa_std/core/slice.sa +4021 -0
- package/sa_std/core/slice.sal +7 -0
- package/sa_std/core/task.sa +112 -0
- package/sa_std/core/task.sal +15 -0
- package/sa_std/core/trait_object.sa +26 -0
- package/sa_std/core/trait_object.sal +4 -0
- package/sa_std/core/waker.sa +289 -0
- package/sa_std/core/waker.sal +31 -0
- package/sa_std/core/weak.sa +2 -0
- package/sa_std/core/weak.sal +4 -0
- package/sa_std/cow.sa +3 -0
- package/sa_std/cow.sal +2 -0
- package/sa_std/cstring.sa +3 -0
- package/sa_std/cstring.sal +2 -0
- package/sa_std/default.sa +99 -0
- package/sa_std/duration.sa +3 -0
- package/sa_std/duration.sal +2 -0
- package/sa_std/encoding/json.sa +259 -0
- package/sa_std/encoding/json.sai +54 -0
- package/sa_std/encoding/json.sal +35 -0
- package/sa_std/encoding/prelude.sa +1 -0
- package/sa_std/encoding/prelude.sal +0 -0
- package/sa_std/env.sa +390 -0
- package/sa_std/env.sai +25 -0
- package/sa_std/error.sa +253 -0
- package/sa_std/error.sal +44 -0
- package/sa_std/ffi/cstring.sa +3 -0
- package/sa_std/ffi/cstring.sal +1 -0
- package/sa_std/ffi/prelude.sa +2 -0
- package/sa_std/ffi/prelude.sal +2 -0
- package/sa_std/ffi.sa +635 -0
- package/sa_std/ffi.sal +51 -0
- package/sa_std/fmt.sa +2 -0
- package/sa_std/fmt.sai +18 -0
- package/sa_std/fmt.sal +35 -0
- package/sa_std/fs.sa +1023 -0
- package/sa_std/fs.sai +127 -0
- package/sa_std/fs.sal +51 -0
- package/sa_std/future.sa +2 -0
- package/sa_std/future.sal +1 -0
- package/sa_std/hash.sa +1486 -0
- package/sa_std/hash.sal +13 -0
- package/sa_std/hashmap.sa +1962 -0
- package/sa_std/hashmap.sal +20 -0
- package/sa_std/hashset.sa +1004 -0
- package/sa_std/hashset.sal +18 -0
- package/sa_std/http2.sa +78 -0
- package/sa_std/http2.sai +26 -0
- package/sa_std/http2.sal +36 -0
- package/sa_std/instant.sa +3 -0
- package/sa_std/instant.sal +2 -0
- package/sa_std/io/buf_reader.sa +43 -0
- package/sa_std/io/buf_writer.sa +35 -0
- package/sa_std/io/bufio.sa +4 -0
- package/sa_std/io/bufio.sal +4 -0
- package/sa_std/io/prelude.sa +1 -0
- package/sa_std/io/prelude.sal +1 -0
- package/sa_std/io/print.sa +2 -0
- package/sa_std/io/print.sai +3 -0
- package/sa_std/io.sa +925 -0
- package/sa_std/io.sai +25 -0
- package/sa_std/io.sal +84 -0
- package/sa_std/iter.sa +2 -0
- package/sa_std/iter.sal +1 -0
- package/sa_std/join_handle.sa +3 -0
- package/sa_std/join_handle.sal +2 -0
- package/sa_std/libsa_async.sa +80 -0
- package/sa_std/m_async.sa +137 -0
- package/sa_std/m_async.sal +30 -0
- package/sa_std/m_async.sla +2 -0
- package/sa_std/manually_drop.sa +3 -0
- package/sa_std/manually_drop.sal +2 -0
- package/sa_std/marker/phantom_data.sa +3 -0
- package/sa_std/marker/phantom_data.sal +1 -0
- package/sa_std/marker/prelude.sa +4 -0
- package/sa_std/marker/prelude.sal +4 -0
- package/sa_std/marker.sa +220 -0
- package/sa_std/marker.sal +15 -0
- package/sa_std/math.sa +84 -0
- package/sa_std/math.sai +10 -0
- package/sa_std/mem/manually_drop.sa +3 -0
- package/sa_std/mem/manually_drop.sal +1 -0
- package/sa_std/mem/prelude.sa +2 -0
- package/sa_std/mem/prelude.sal +2 -0
- package/sa_std/mem.sa +564 -0
- package/sa_std/mem.sal +40 -0
- package/sa_std/modstate.sai +19 -0
- package/sa_std/net.sa +4227 -0
- package/sa_std/net.sai +239 -0
- package/sa_std/net.sal +159 -0
- package/sa_std/netx.sa +85 -0
- package/sa_std/netx.sai +11 -0
- package/sa_std/netx.sal +39 -0
- package/sa_std/nonzero.sa +3 -0
- package/sa_std/nonzero.sal +2 -0
- package/sa_std/num/nonzero.sa +3 -0
- package/sa_std/num/nonzero.sal +1 -0
- package/sa_std/num/prelude.sa +3 -0
- package/sa_std/num/prelude.sal +3 -0
- package/sa_std/num.sa +17302 -0
- package/sa_std/num.sai +11 -0
- package/sa_std/num.sal +341 -0
- package/sa_std/ops.sa +1884 -0
- package/sa_std/ops.sal +68 -0
- package/sa_std/option.sa +2 -0
- package/sa_std/option.sal +1 -0
- package/sa_std/os/fd.sa +96 -0
- package/sa_std/os/fd.sai +7 -0
- package/sa_std/os/fd.sal +11 -0
- package/sa_std/os/prelude.sa +2 -0
- package/sa_std/os/prelude.sal +1 -0
- package/sa_std/os/unix_ffi.sa +271 -0
- package/sa_std/panic.sa +1 -0
- package/sa_std/panic.sal +1 -0
- package/sa_std/path.sa +3170 -0
- package/sa_std/path.sal +12 -0
- package/sa_std/phantom_data.sa +3 -0
- package/sa_std/phantom_data.sal +2 -0
- package/sa_std/pin.sa +79 -0
- package/sa_std/pin.sal +5 -0
- package/sa_std/plugin_async.sa +90 -0
- package/sa_std/plugin_async.sal +29 -0
- package/sa_std/plugin_async.sla +4 -0
- package/sa_std/plugin_http_async.sa +46 -0
- package/sa_std/plugin_http_server.sa +61 -0
- package/sa_std/plugin_http_server.sla +2 -0
- package/sa_std/plugin_sqlite.sa +106 -0
- package/sa_std/plugin_sqlite.sla +2 -0
- package/sa_std/prelude.sa +60 -0
- package/sa_std/prelude.sal +55 -0
- package/sa_std/process.sa +916 -0
- package/sa_std/process.sai +57 -0
- package/sa_std/process.sal +27 -0
- package/sa_std/ptr.sa +503 -0
- package/sa_std/ptr.sal +2 -0
- package/sa_std/result.sa +2 -0
- package/sa_std/result.sal +1 -0
- package/sa_std/rust_core.sa +51 -0
- package/sa_std/rust_core.sal +26 -0
- package/sa_std/sa.mod +7 -0
- package/sa_std/sort.sa +156 -0
- package/sa_std/str.sla +13 -0
- package/sa_std/string.sa +12240 -0
- package/sa_std/string.sai +25 -0
- package/sa_std/string.sal +17 -0
- package/sa_std/string_format.sa +269 -0
- package/sa_std/sync/atomic.sa +1500 -0
- package/sa_std/sync/atomic.sal +45 -0
- package/sa_std/sync/barrier.sa +105 -0
- package/sa_std/sync/barrier.sal +7 -0
- package/sa_std/sync/condvar.sa +240 -0
- package/sa_std/sync/condvar.sal +4 -0
- package/sa_std/sync/mpsc.sa +758 -0
- package/sa_std/sync/mpsc.sal +42 -0
- package/sa_std/sync/mpsc_list.sa +255 -0
- package/sa_std/sync/mpsc_list.sal +3 -0
- package/sa_std/sync/mutex.sa +182 -0
- package/sa_std/sync/mutex.sal +7 -0
- package/sa_std/sync/once.sa +371 -0
- package/sa_std/sync/once.sal +31 -0
- package/sa_std/sync/poison.sa +36 -0
- package/sa_std/sync/poison.sal +11 -0
- package/sa_std/sync/prelude.sa +8 -0
- package/sa_std/sync/prelude.sal +7 -0
- package/sa_std/sync/rwlock.sa +369 -0
- package/sa_std/sync/rwlock.sal +13 -0
- package/sa_std/task.sa +2 -0
- package/sa_std/task.sal +1 -0
- package/sa_std/term.sa +2 -0
- package/sa_std/term.sai +10 -0
- package/sa_std/term.sal +33 -0
- package/sa_std/testing/assert.sai +4 -0
- package/sa_std/testing/mock_io.sa +174 -0
- package/sa_std/testing/mock_io.sal +5 -0
- package/sa_std/testing/prelude.sa +2 -0
- package/sa_std/testing/prelude.sal +1 -0
- package/sa_std/text/prelude.sa +1 -0
- package/sa_std/text/prelude.sal +1 -0
- package/sa_std/text/regex.sa +2 -0
- package/sa_std/text/regex.sai +9 -0
- package/sa_std/text/regex.sal +33 -0
- package/sa_std/thread/join_handle.sa +3 -0
- package/sa_std/thread/join_handle.sal +1 -0
- package/sa_std/thread/prelude.sa +4 -0
- package/sa_std/thread/prelude.sal +3 -0
- package/sa_std/thread.sa +160 -0
- package/sa_std/thread.sai +11 -0
- package/sa_std/thread.sal +4 -0
- package/sa_std/thread_local.sa +45 -0
- package/sa_std/thread_local.sai +9 -0
- package/sa_std/time/duration.sa +3 -0
- package/sa_std/time/duration.sal +1 -0
- package/sa_std/time/instant.sa +3 -0
- package/sa_std/time/instant.sal +1 -0
- package/sa_std/time/prelude.sa +4 -0
- package/sa_std/time/prelude.sal +4 -0
- package/sa_std/time.sa +850 -0
- package/sa_std/time.sai +37 -0
- package/sa_std/time.sal +35 -0
- package/sa_std/time.sla +67 -0
- package/sa_std/tls_client.sai +39 -0
- package/sa_std/vec.sa +5754 -0
- package/sa_std/vec.sal +1 -0
- package/sa_std/vec_deque.sa +4925 -0
- package/sa_std/vec_deque.sal +8 -0
- package/sa_std/vec_runtime_macros.sa +11 -0
- 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]
|
package/sa_std/netx.sai
ADDED
|
@@ -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
|
package/sa_std/netx.sal
ADDED
|
@@ -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 @@
|
|
|
1
|
+
@import "../num.sal"
|