1use capsec_core::cap::Cap;
6use capsec_core::error::CapSecError;
7use capsec_core::has::Has;
8use capsec_core::permission::{NetBind, NetConnect};
9use std::net::{TcpListener, TcpStream, ToSocketAddrs, UdpSocket};
10
11pub fn tcp_connect(
14 addr: impl ToSocketAddrs,
15 cap: &impl Has<NetConnect>,
16) -> Result<TcpStream, CapSecError> {
17 let _proof: Cap<NetConnect> = cap.cap_ref();
18 Ok(TcpStream::connect(addr)?)
19}
20
21pub fn tcp_bind(
24 addr: impl ToSocketAddrs,
25 cap: &impl Has<NetBind>,
26) -> Result<TcpListener, CapSecError> {
27 let _proof: Cap<NetBind> = cap.cap_ref();
28 Ok(TcpListener::bind(addr)?)
29}
30
31pub fn udp_bind(
34 addr: impl ToSocketAddrs,
35 cap: &impl Has<NetBind>,
36) -> Result<UdpSocket, CapSecError> {
37 let _proof: Cap<NetBind> = cap.cap_ref();
38 Ok(UdpSocket::bind(addr)?)
39}