]>
Commit | Line | Data |
---|---|---|
c295e0f8 XL |
1 | use crate::os::raw::{c_char, c_uint, c_void}; |
2 | pub use libc::{c_int, c_long, size_t, ssize_t, suseconds_t, time_t, timeval}; | |
3 | ||
4 | pub const SOLID_NET_ERR_BASE: c_int = -2000; | |
5 | pub const EINPROGRESS: c_int = SOLID_NET_ERR_BASE - libc::EINPROGRESS; | |
6 | ||
7 | pub const AF_INET6: i32 = 10; | |
8 | pub const AF_INET: i32 = 2; | |
9 | pub const IPPROTO_IP: i32 = 0; | |
10 | pub const IPPROTO_IPV6: i32 = 41; | |
11 | pub const IPPROTO_TCP: i32 = 6; | |
12 | pub const IPV6_ADD_MEMBERSHIP: i32 = 12; | |
13 | pub const IPV6_DROP_MEMBERSHIP: i32 = 13; | |
14 | pub const IPV6_MULTICAST_LOOP: i32 = 19; | |
15 | pub const IPV6_V6ONLY: i32 = 27; | |
16 | pub const IP_TTL: i32 = 2; | |
17 | pub const IP_MULTICAST_TTL: i32 = 5; | |
18 | pub const IP_MULTICAST_LOOP: i32 = 7; | |
19 | pub const IP_ADD_MEMBERSHIP: i32 = 3; | |
20 | pub const IP_DROP_MEMBERSHIP: i32 = 4; | |
21 | pub const SHUT_RD: i32 = 0; | |
22 | pub const SHUT_RDWR: i32 = 2; | |
23 | pub const SHUT_WR: i32 = 1; | |
24 | pub const SOCK_DGRAM: i32 = 2; | |
25 | pub const SOCK_STREAM: i32 = 1; | |
26 | pub const SOL_SOCKET: i32 = 4095; | |
27 | pub const SO_BROADCAST: i32 = 32; | |
28 | pub const SO_ERROR: i32 = 4103; | |
29 | pub const SO_RCVTIMEO: i32 = 4102; | |
30 | pub const SO_REUSEADDR: i32 = 4; | |
31 | pub const SO_SNDTIMEO: i32 = 4101; | |
32 | pub const SO_LINGER: i32 = 128; | |
33 | pub const TCP_NODELAY: i32 = 1; | |
34 | pub const MSG_PEEK: c_int = 1; | |
35 | pub const FIONBIO: c_long = 0x8008667eu32 as c_long; | |
36 | pub const EAI_NONAME: i32 = -2200; | |
37 | pub const EAI_SERVICE: i32 = -2201; | |
38 | pub const EAI_FAIL: i32 = -2202; | |
39 | pub const EAI_MEMORY: i32 = -2203; | |
40 | pub const EAI_FAMILY: i32 = -2204; | |
41 | ||
42 | pub type sa_family_t = u8; | |
43 | pub type socklen_t = u32; | |
44 | pub type in_addr_t = u32; | |
45 | pub type in_port_t = u16; | |
46 | ||
47 | #[repr(C)] | |
48 | #[derive(Debug, Copy, Clone)] | |
49 | pub struct in_addr { | |
50 | pub s_addr: in_addr_t, | |
51 | } | |
52 | ||
53 | #[repr(C)] | |
54 | #[derive(Debug, Copy, Clone)] | |
55 | pub struct in6_addr { | |
56 | pub s6_addr: [u8; 16], | |
57 | } | |
58 | ||
59 | #[repr(C)] | |
60 | #[derive(Debug, Copy, Clone)] | |
61 | pub struct ip_mreq { | |
62 | pub imr_multiaddr: in_addr, | |
63 | pub imr_interface: in_addr, | |
64 | } | |
65 | ||
66 | #[repr(C)] | |
67 | #[derive(Debug, Copy, Clone)] | |
68 | pub struct ipv6_mreq { | |
69 | pub ipv6mr_multiaddr: in6_addr, | |
70 | pub ipv6mr_interface: c_uint, | |
71 | } | |
72 | ||
73 | #[repr(C)] | |
74 | #[derive(Debug, Copy, Clone)] | |
75 | pub struct msghdr { | |
76 | pub msg_name: *mut c_void, | |
77 | pub msg_namelen: socklen_t, | |
78 | pub msg_iov: *mut iovec, | |
79 | pub msg_iovlen: c_int, | |
80 | pub msg_control: *mut c_void, | |
81 | pub msg_controllen: socklen_t, | |
82 | pub msg_flags: c_int, | |
83 | } | |
84 | ||
85 | #[repr(C)] | |
86 | #[derive(Debug, Copy, Clone)] | |
87 | pub struct sockaddr { | |
88 | pub sa_len: u8, | |
89 | pub sa_family: sa_family_t, | |
90 | pub sa_data: [c_char; 14usize], | |
91 | } | |
92 | ||
93 | #[repr(C)] | |
94 | #[derive(Debug, Copy, Clone)] | |
95 | pub struct sockaddr_in { | |
96 | pub sin_len: u8, | |
97 | pub sin_family: sa_family_t, | |
98 | pub sin_port: in_port_t, | |
99 | pub sin_addr: in_addr, | |
100 | pub sin_zero: [c_char; 8usize], | |
101 | } | |
102 | ||
103 | #[repr(C)] | |
104 | #[derive(Copy, Clone)] | |
105 | pub struct sockaddr_in6 { | |
106 | pub sin6_len: u8, | |
107 | pub sin6_family: sa_family_t, | |
108 | pub sin6_port: in_port_t, | |
109 | pub sin6_flowinfo: u32, | |
110 | pub sin6_addr: in6_addr, | |
111 | pub sin6_scope_id: u32, | |
112 | } | |
113 | ||
114 | #[repr(C)] | |
115 | #[derive(Debug, Copy, Clone)] | |
116 | pub struct sockaddr_storage { | |
117 | pub s2_len: u8, | |
118 | pub ss_family: sa_family_t, | |
119 | pub s2_data1: [c_char; 2usize], | |
120 | pub s2_data2: [u32; 3usize], | |
121 | } | |
122 | ||
123 | #[repr(C)] | |
124 | #[derive(Debug, Copy, Clone)] | |
125 | pub struct addrinfo { | |
126 | pub ai_flags: c_int, | |
127 | pub ai_family: c_int, | |
128 | pub ai_socktype: c_int, | |
129 | pub ai_protocol: c_int, | |
130 | pub ai_addrlen: socklen_t, | |
131 | pub ai_addr: *mut sockaddr, | |
132 | pub ai_canonname: *mut c_char, | |
133 | pub ai_next: *mut addrinfo, | |
134 | } | |
135 | ||
136 | #[repr(C)] | |
137 | #[derive(Debug, Copy, Clone)] | |
138 | pub struct linger { | |
139 | pub l_onoff: c_int, | |
140 | pub l_linger: c_int, | |
141 | } | |
142 | ||
143 | #[repr(C)] | |
144 | #[derive(Debug, Copy, Clone)] | |
145 | pub struct iovec { | |
146 | pub iov_base: *mut c_void, | |
147 | pub iov_len: usize, | |
148 | } | |
149 | ||
150 | /// This value can be chosen by an application | |
151 | pub const SOLID_NET_FD_SETSIZE: usize = 1; | |
152 | ||
153 | #[repr(C)] | |
154 | #[derive(Debug, Copy, Clone)] | |
155 | pub struct fd_set { | |
156 | pub num_fds: usize, | |
157 | pub fds: [c_int; SOLID_NET_FD_SETSIZE], | |
158 | } | |
159 | ||
160 | extern "C" { | |
161 | #[link_name = "SOLID_NET_StrError"] | |
162 | pub fn strerror(errnum: c_int) -> *const c_char; | |
163 | ||
164 | pub fn SOLID_NET_GetLastError() -> c_int; | |
165 | ||
166 | #[link_name = "SOLID_NET_Accept"] | |
167 | pub fn accept(s: c_int, addr: *mut sockaddr, addrlen: *mut socklen_t) -> c_int; | |
168 | ||
169 | #[link_name = "SOLID_NET_Bind"] | |
170 | pub fn bind(s: c_int, name: *const sockaddr, namelen: socklen_t) -> c_int; | |
171 | ||
172 | #[link_name = "SOLID_NET_Connect"] | |
173 | pub fn connect(s: c_int, name: *const sockaddr, namelen: socklen_t) -> c_int; | |
174 | ||
175 | #[link_name = "SOLID_NET_Close"] | |
176 | pub fn close(s: c_int) -> c_int; | |
177 | ||
5099ac24 FG |
178 | #[link_name = "SOLID_NET_Dup"] |
179 | pub fn dup(s: c_int) -> c_int; | |
180 | ||
c295e0f8 XL |
181 | #[link_name = "SOLID_NET_GetPeerName"] |
182 | pub fn getpeername(s: c_int, name: *mut sockaddr, namelen: *mut socklen_t) -> c_int; | |
183 | ||
184 | #[link_name = "SOLID_NET_GetSockName"] | |
185 | pub fn getsockname(s: c_int, name: *mut sockaddr, namelen: *mut socklen_t) -> c_int; | |
186 | ||
187 | #[link_name = "SOLID_NET_GetSockOpt"] | |
188 | pub fn getsockopt( | |
189 | s: c_int, | |
190 | level: c_int, | |
191 | optname: c_int, | |
192 | optval: *mut c_void, | |
193 | optlen: *mut socklen_t, | |
194 | ) -> c_int; | |
195 | ||
196 | #[link_name = "SOLID_NET_SetSockOpt"] | |
197 | pub fn setsockopt( | |
198 | s: c_int, | |
199 | level: c_int, | |
200 | optname: c_int, | |
201 | optval: *const c_void, | |
202 | optlen: socklen_t, | |
203 | ) -> c_int; | |
204 | ||
205 | #[link_name = "SOLID_NET_Ioctl"] | |
206 | pub fn ioctl(s: c_int, cmd: c_long, argp: *mut c_void) -> c_int; | |
207 | ||
208 | #[link_name = "SOLID_NET_Listen"] | |
209 | pub fn listen(s: c_int, backlog: c_int) -> c_int; | |
210 | ||
211 | #[link_name = "SOLID_NET_Recv"] | |
212 | pub fn recv(s: c_int, mem: *mut c_void, len: size_t, flags: c_int) -> ssize_t; | |
213 | ||
214 | #[link_name = "SOLID_NET_Read"] | |
215 | pub fn read(s: c_int, mem: *mut c_void, len: size_t) -> ssize_t; | |
216 | ||
217 | #[link_name = "SOLID_NET_Readv"] | |
218 | pub fn readv(s: c_int, bufs: *const iovec, bufcnt: c_int) -> ssize_t; | |
219 | ||
220 | #[link_name = "SOLID_NET_RecvFrom"] | |
221 | pub fn recvfrom( | |
222 | s: c_int, | |
223 | mem: *mut c_void, | |
224 | len: size_t, | |
225 | flags: c_int, | |
226 | from: *mut sockaddr, | |
227 | fromlen: *mut socklen_t, | |
228 | ) -> ssize_t; | |
229 | ||
230 | #[link_name = "SOLID_NET_Send"] | |
231 | pub fn send(s: c_int, mem: *const c_void, len: size_t, flags: c_int) -> ssize_t; | |
232 | ||
233 | #[link_name = "SOLID_NET_SendMsg"] | |
234 | pub fn sendmsg(s: c_int, message: *const msghdr, flags: c_int) -> ssize_t; | |
235 | ||
236 | #[link_name = "SOLID_NET_SendTo"] | |
237 | pub fn sendto( | |
238 | s: c_int, | |
239 | mem: *const c_void, | |
240 | len: size_t, | |
241 | flags: c_int, | |
242 | to: *const sockaddr, | |
243 | tolen: socklen_t, | |
244 | ) -> ssize_t; | |
245 | ||
246 | #[link_name = "SOLID_NET_Shutdown"] | |
247 | pub fn shutdown(s: c_int, how: c_int) -> c_int; | |
248 | ||
249 | #[link_name = "SOLID_NET_Socket"] | |
250 | pub fn socket(domain: c_int, type_: c_int, protocol: c_int) -> c_int; | |
251 | ||
252 | #[link_name = "SOLID_NET_Write"] | |
253 | pub fn write(s: c_int, mem: *const c_void, len: size_t) -> ssize_t; | |
254 | ||
255 | #[link_name = "SOLID_NET_Writev"] | |
256 | pub fn writev(s: c_int, bufs: *const iovec, bufcnt: c_int) -> ssize_t; | |
257 | ||
258 | #[link_name = "SOLID_NET_FreeAddrInfo"] | |
259 | pub fn freeaddrinfo(ai: *mut addrinfo); | |
260 | ||
261 | #[link_name = "SOLID_NET_GetAddrInfo"] | |
262 | pub fn getaddrinfo( | |
263 | nodename: *const c_char, | |
264 | servname: *const c_char, | |
265 | hints: *const addrinfo, | |
266 | res: *mut *mut addrinfo, | |
267 | ) -> c_int; | |
268 | ||
269 | #[link_name = "SOLID_NET_Select"] | |
270 | pub fn select( | |
271 | maxfdp1: c_int, | |
272 | readset: *mut fd_set, | |
273 | writeset: *mut fd_set, | |
274 | exceptset: *mut fd_set, | |
275 | timeout: *mut timeval, | |
276 | ) -> c_int; | |
277 | } |