Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/wasi/src/p2/network.rs
1692 views
1
use crate::TrappableError;
2
use crate::p2::bindings::sockets::network::ErrorCode;
3
use crate::sockets::{SocketAddrCheck, SocketAddrUse};
4
use std::net::SocketAddr;
5
6
pub type SocketResult<T> = Result<T, SocketError>;
7
8
pub type SocketError = TrappableError<ErrorCode>;
9
10
impl From<wasmtime::component::ResourceTableError> for SocketError {
11
fn from(error: wasmtime::component::ResourceTableError) -> Self {
12
Self::trap(error)
13
}
14
}
15
16
impl From<std::io::Error> for SocketError {
17
fn from(error: std::io::Error) -> Self {
18
ErrorCode::from(error).into()
19
}
20
}
21
22
impl From<rustix::io::Errno> for SocketError {
23
fn from(error: rustix::io::Errno) -> Self {
24
ErrorCode::from(error).into()
25
}
26
}
27
28
impl From<crate::sockets::util::ErrorCode> for SocketError {
29
fn from(error: crate::sockets::util::ErrorCode) -> Self {
30
ErrorCode::from(error).into()
31
}
32
}
33
34
impl From<crate::sockets::util::ErrorCode> for ErrorCode {
35
fn from(error: crate::sockets::util::ErrorCode) -> Self {
36
match error {
37
crate::sockets::util::ErrorCode::Unknown => Self::Unknown,
38
crate::sockets::util::ErrorCode::AccessDenied => Self::AccessDenied,
39
crate::sockets::util::ErrorCode::NotSupported => Self::NotSupported,
40
crate::sockets::util::ErrorCode::InvalidArgument => Self::InvalidArgument,
41
crate::sockets::util::ErrorCode::OutOfMemory => Self::OutOfMemory,
42
crate::sockets::util::ErrorCode::Timeout => Self::Timeout,
43
crate::sockets::util::ErrorCode::InvalidState => Self::InvalidState,
44
crate::sockets::util::ErrorCode::AddressNotBindable => Self::AddressNotBindable,
45
crate::sockets::util::ErrorCode::AddressInUse => Self::AddressInUse,
46
crate::sockets::util::ErrorCode::RemoteUnreachable => Self::RemoteUnreachable,
47
crate::sockets::util::ErrorCode::ConnectionRefused => Self::ConnectionRefused,
48
crate::sockets::util::ErrorCode::ConnectionReset => Self::ConnectionReset,
49
crate::sockets::util::ErrorCode::ConnectionAborted => Self::ConnectionAborted,
50
crate::sockets::util::ErrorCode::DatagramTooLarge => Self::DatagramTooLarge,
51
crate::sockets::util::ErrorCode::NotInProgress => Self::NotInProgress,
52
crate::sockets::util::ErrorCode::ConcurrencyConflict => Self::ConcurrencyConflict,
53
}
54
}
55
}
56
57
pub struct Network {
58
pub(crate) socket_addr_check: SocketAddrCheck,
59
pub(crate) allow_ip_name_lookup: bool,
60
}
61
62
impl Network {
63
pub(crate) async fn check_socket_addr(
64
&self,
65
addr: SocketAddr,
66
reason: SocketAddrUse,
67
) -> std::io::Result<()> {
68
self.socket_addr_check.check(addr, reason).await
69
}
70
}
71
72