wasm-nats-producer-client/wit/deps/wasi-sockets-0.2.0/package.wit

180 lines
5.7 KiB
Plaintext
Raw Permalink Normal View History

2024-12-14 01:15:08 +00:00
package wasi:sockets@0.2.0;
interface network {
resource network;
enum error-code {
unknown,
access-denied,
not-supported,
invalid-argument,
out-of-memory,
timeout,
concurrency-conflict,
not-in-progress,
would-block,
invalid-state,
new-socket-limit,
address-not-bindable,
address-in-use,
remote-unreachable,
connection-refused,
connection-reset,
connection-aborted,
datagram-too-large,
name-unresolvable,
temporary-resolver-failure,
permanent-resolver-failure,
}
enum ip-address-family {
ipv4,
ipv6,
}
type ipv4-address = tuple<u8, u8, u8, u8>;
type ipv6-address = tuple<u16, u16, u16, u16, u16, u16, u16, u16>;
variant ip-address {
ipv4(ipv4-address),
ipv6(ipv6-address),
}
record ipv4-socket-address {
port: u16,
address: ipv4-address,
}
record ipv6-socket-address {
port: u16,
flow-info: u32,
address: ipv6-address,
scope-id: u32,
}
variant ip-socket-address {
ipv4(ipv4-socket-address),
ipv6(ipv6-socket-address),
}
}
interface instance-network {
use network.{network};
instance-network: func() -> network;
}
interface udp {
use wasi:io/poll@0.2.0.{pollable};
use network.{network, error-code, ip-socket-address, ip-address-family};
record incoming-datagram {
data: list<u8>,
remote-address: ip-socket-address,
}
record outgoing-datagram {
data: list<u8>,
remote-address: option<ip-socket-address>,
}
resource udp-socket {
start-bind: func(network: borrow<network>, local-address: ip-socket-address) -> result<_, error-code>;
finish-bind: func() -> result<_, error-code>;
%stream: func(remote-address: option<ip-socket-address>) -> result<tuple<incoming-datagram-stream, outgoing-datagram-stream>, error-code>;
local-address: func() -> result<ip-socket-address, error-code>;
remote-address: func() -> result<ip-socket-address, error-code>;
address-family: func() -> ip-address-family;
unicast-hop-limit: func() -> result<u8, error-code>;
set-unicast-hop-limit: func(value: u8) -> result<_, error-code>;
receive-buffer-size: func() -> result<u64, error-code>;
set-receive-buffer-size: func(value: u64) -> result<_, error-code>;
send-buffer-size: func() -> result<u64, error-code>;
set-send-buffer-size: func(value: u64) -> result<_, error-code>;
subscribe: func() -> pollable;
}
resource incoming-datagram-stream {
receive: func(max-results: u64) -> result<list<incoming-datagram>, error-code>;
subscribe: func() -> pollable;
}
resource outgoing-datagram-stream {
check-send: func() -> result<u64, error-code>;
send: func(datagrams: list<outgoing-datagram>) -> result<u64, error-code>;
subscribe: func() -> pollable;
}
}
interface udp-create-socket {
use network.{network, error-code, ip-address-family};
use udp.{udp-socket};
create-udp-socket: func(address-family: ip-address-family) -> result<udp-socket, error-code>;
}
interface tcp {
use wasi:io/streams@0.2.0.{input-stream, output-stream};
use wasi:io/poll@0.2.0.{pollable};
use wasi:clocks/monotonic-clock@0.2.0.{duration};
use network.{network, error-code, ip-socket-address, ip-address-family};
enum shutdown-type {
receive,
send,
both,
}
resource tcp-socket {
start-bind: func(network: borrow<network>, local-address: ip-socket-address) -> result<_, error-code>;
finish-bind: func() -> result<_, error-code>;
start-connect: func(network: borrow<network>, remote-address: ip-socket-address) -> result<_, error-code>;
finish-connect: func() -> result<tuple<input-stream, output-stream>, error-code>;
start-listen: func() -> result<_, error-code>;
finish-listen: func() -> result<_, error-code>;
accept: func() -> result<tuple<tcp-socket, input-stream, output-stream>, error-code>;
local-address: func() -> result<ip-socket-address, error-code>;
remote-address: func() -> result<ip-socket-address, error-code>;
is-listening: func() -> bool;
address-family: func() -> ip-address-family;
set-listen-backlog-size: func(value: u64) -> result<_, error-code>;
keep-alive-enabled: func() -> result<bool, error-code>;
set-keep-alive-enabled: func(value: bool) -> result<_, error-code>;
keep-alive-idle-time: func() -> result<duration, error-code>;
set-keep-alive-idle-time: func(value: duration) -> result<_, error-code>;
keep-alive-interval: func() -> result<duration, error-code>;
set-keep-alive-interval: func(value: duration) -> result<_, error-code>;
keep-alive-count: func() -> result<u32, error-code>;
set-keep-alive-count: func(value: u32) -> result<_, error-code>;
hop-limit: func() -> result<u8, error-code>;
set-hop-limit: func(value: u8) -> result<_, error-code>;
receive-buffer-size: func() -> result<u64, error-code>;
set-receive-buffer-size: func(value: u64) -> result<_, error-code>;
send-buffer-size: func() -> result<u64, error-code>;
set-send-buffer-size: func(value: u64) -> result<_, error-code>;
subscribe: func() -> pollable;
shutdown: func(shutdown-type: shutdown-type) -> result<_, error-code>;
}
}
interface tcp-create-socket {
use network.{network, error-code, ip-address-family};
use tcp.{tcp-socket};
create-tcp-socket: func(address-family: ip-address-family) -> result<tcp-socket, error-code>;
}
interface ip-name-lookup {
use wasi:io/poll@0.2.0.{pollable};
use network.{network, error-code, ip-address};
resource resolve-address-stream {
resolve-next-address: func() -> result<option<ip-address>, error-code>;
subscribe: func() -> pollable;
}
resolve-addresses: func(network: borrow<network>, name: string) -> result<resolve-address-stream, error-code>;
}