Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / metadata / w32socket.h
1 /**
2  * \file
3  * System.Net.Sockets.Socket support
4  *
5  * Author:
6  *      Dick Porter (dick@ximian.com)
7  *
8  * (C) 2001 Ximian, Inc.
9  */
10
11 #ifndef _MONO_METADATA_W32SOCKET_H_
12 #define _MONO_METADATA_W32SOCKET_H_
13
14 #include <config.h>
15 #include <glib.h>
16
17 #include <mono/metadata/object-internals.h>
18
19 #ifndef HOST_WIN32
20 #define INVALID_SOCKET ((SOCKET)(guint32)(~0))
21 #define SOCKET_ERROR (-1)
22
23 typedef gint SOCKET;
24
25 typedef struct {
26         guint32 len;
27         gpointer buf;
28 } WSABUF, *LPWSABUF;
29 #endif
30
31 /* This is a copy of System.Net.Sockets.SocketType */
32 typedef enum {
33         SocketType_Stream=1,
34         SocketType_Dgram=2,
35         SocketType_Raw=3,
36         SocketType_Rdm=4,
37         SocketType_Seqpacket=5,
38         SocketType_Unknown=-1
39 } MonoSocketType;
40
41 /* This is a copy of System.Net.Sockets.AddressFamily */
42 typedef enum {
43         AddressFamily_Unknown=-1,
44         AddressFamily_Unspecified=0,
45         AddressFamily_Unix=1,
46         AddressFamily_InterNetwork=2,
47         AddressFamily_ImpLink=3,
48         AddressFamily_Pup=4,
49         AddressFamily_Chaos=5,
50         AddressFamily_NS=6,
51         AddressFamily_Ipx=6,
52         AddressFamily_Iso=7,
53         AddressFamily_Osi=7,
54         AddressFamily_Ecma=8,
55         AddressFamily_DataKit=9,
56         AddressFamily_Ccitt=10,
57         AddressFamily_Sna=11,
58         AddressFamily_DecNet=12,
59         AddressFamily_DataLink=13,
60         AddressFamily_Lat=14,
61         AddressFamily_HyperChannel=15,
62         AddressFamily_AppleTalk=16,
63         AddressFamily_NetBios=17,
64         AddressFamily_VoiceView=18,
65         AddressFamily_FireFox=19,
66         AddressFamily_Banyan=21,
67         AddressFamily_Atm=22,
68         AddressFamily_InterNetworkV6=23,
69         AddressFamily_Cluster=24,
70         AddressFamily_Ieee12844=25,
71         AddressFamily_Irda=26,
72         AddressFamily_NetworkDesigners=28
73 } MonoAddressFamily;
74
75 /* This is a copy of System.Net.Sockets.ProtocolType */
76 typedef enum {
77         ProtocolType_IP=0,
78         ProtocolType_Icmp=1,
79         ProtocolType_Igmp=2,
80         ProtocolType_Ggp=3,
81         ProtocolType_Tcp=6,
82         ProtocolType_Pup=12,
83         ProtocolType_Udp=17,
84         ProtocolType_Idp=22,
85         ProtocolType_IPv6=41,
86         ProtocolType_ND=77,
87         ProtocolType_Raw=255,
88         ProtocolType_Unspecified=0,
89         ProtocolType_Ipx=1000,
90         ProtocolType_Spx=1256,
91         ProtocolType_SpxII=1257,
92         ProtocolType_Unknown=-1
93 } MonoProtocolType;
94
95 /* This is a copy of System.Net.Sockets.SocketOptionLevel */
96 typedef enum {
97         SocketOptionLevel_Socket=65535,
98         SocketOptionLevel_IP=0,
99         SocketOptionLevel_IPv6=41,
100         SocketOptionLevel_Tcp=6,
101         SocketOptionLevel_Udp=17
102 } MonoSocketOptionLevel;
103
104 /* This is a copy of System.Net.Sockets.SocketOptionName */
105 typedef enum {
106         SocketOptionName_Debug=1,
107         SocketOptionName_AcceptConnection=2,
108         SocketOptionName_ReuseAddress=4,
109         SocketOptionName_KeepAlive=8,
110         SocketOptionName_DontRoute=16,
111         SocketOptionName_IPProtectionLevel = 23,
112         SocketOptionName_IPv6Only = 27,
113         SocketOptionName_Broadcast=32,
114         SocketOptionName_UseLoopback=64,
115         SocketOptionName_Linger=128,
116         SocketOptionName_OutOfBandInline=256,
117         SocketOptionName_DontLinger= -129,
118         SocketOptionName_ExclusiveAddressUse= -5,
119         SocketOptionName_SendBuffer= 4097,
120         SocketOptionName_ReceiveBuffer=4098,
121         SocketOptionName_SendLowWater=4099,
122         SocketOptionName_ReceiveLowWater=4100,
123         SocketOptionName_SendTimeout=4101,
124         SocketOptionName_ReceiveTimeout=4102,
125         SocketOptionName_Error=4103,
126         SocketOptionName_Type=4104,
127         SocketOptionName_MaxConnections=2147483647,
128         SocketOptionName_IPOptions=1,
129         SocketOptionName_HeaderIncluded=2,
130         SocketOptionName_TypeOfService=3,
131         SocketOptionName_IpTimeToLive=4,
132         SocketOptionName_MulticastInterface=9,
133         SocketOptionName_MulticastTimeToLive=10,
134         SocketOptionName_MulticastLoopback=11,
135         SocketOptionName_AddMembership=12,
136         SocketOptionName_DropMembership=13,
137         SocketOptionName_DontFragment=14,
138         SocketOptionName_AddSourceMembership=15,
139         SocketOptionName_DropSourceMembership=16,
140         SocketOptionName_BlockSource=17,
141         SocketOptionName_UnblockSource=18,
142         SocketOptionName_PacketInformation=19,
143         SocketOptionName_NoDelay=1,
144         SocketOptionName_BsdUrgent=2,
145         SocketOptionName_Expedited=2,
146         SocketOptionName_NoChecksum=1,
147         SocketOptionName_ChecksumCoverage=20,
148         SocketOptionName_HopLimit=21,
149
150         /* This is Mono-specific, keep it in sync with
151          * Mono.Posix/PeerCred.cs
152          */
153         SocketOptionName_PeerCred=10001
154 } MonoSocketOptionName;
155
156 /* This is a copy of System.Net.Sockets.SocketFlags */
157 typedef enum {
158         SocketFlags_None = 0x0000,
159         SocketFlags_OutOfBand = 0x0001,
160         SocketFlags_MaxIOVectorLength = 0x0010,
161         SocketFlags_Peek = 0x0002,
162         SocketFlags_DontRoute = 0x0004,
163         SocketFlags_Partial = 0x8000
164 } MonoSocketFlags;
165
166 typedef struct
167 {
168         MonoObject obj;
169         gint pid;
170         gint uid;
171         gint gid;
172 } MonoPeerCredData;
173
174 /* Safely access Mono.Posix.PeerCredData from native code */
175 TYPED_HANDLE_DECL (MonoPeerCredData);
176
177 gpointer
178 ves_icall_System_Net_Sockets_Socket_Socket_internal (MonoObjectHandle this_obj, gint32 family, gint32 type,
179                                                      gint32 proto, gint32 *werror, MonoError *error);
180
181 void
182 ves_icall_System_Net_Sockets_Socket_Close_internal (gsize sock, gint32 *werror, MonoError *error);
183
184 gint32
185 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal (void);
186
187 gint32
188 ves_icall_System_Net_Sockets_Socket_Available_internal (gsize sock, gint32 *werror, MonoError *error);
189
190 void
191 ves_icall_System_Net_Sockets_Socket_Blocking_internal (gsize sock, gboolean block, gint32 *werror, MonoError *error);
192
193 gpointer
194 ves_icall_System_Net_Sockets_Socket_Accept_internal (gsize sock, gint32 *werror, gboolean blocking, MonoError *error);
195
196 void
197 ves_icall_System_Net_Sockets_Socket_Listen_internal (gsize sock, guint32 backlog, gint32 *werror, MonoError *error);
198
199 MonoObjectHandle
200 ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal (gsize sock, gint32 af, gint32 *werror, MonoError *error);
201
202 MonoObjectHandle
203 ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal (gsize sock, gint32 af, gint32 *werror, MonoError *error);
204
205 void
206 ves_icall_System_Net_Sockets_Socket_Bind_internal (gsize sock, MonoObjectHandle sockaddr, gint32 *werror, MonoError *error);
207
208 void
209 ves_icall_System_Net_Sockets_Socket_Connect_internal (gsize sock, MonoObjectHandle sockaddr, gint32 *werror, gboolean blocking, MonoError *error);
210
211 gint32
212 ves_icall_System_Net_Sockets_Socket_Receive_internal (gsize sock, gchar *buffer, gint32 count,
213                                                       gint32 flags, gint32 *werror, gboolean blocking, MonoError *error);
214
215 gint32
216 ves_icall_System_Net_Sockets_Socket_Receive_array_internal (gsize sock, WSABUF *buffers, gint32 count, gint32 flags,
217                                                             gint32 *werror, gboolean blocking, MonoError *error);
218
219 gint32
220 ves_icall_System_Net_Sockets_Socket_ReceiveFrom_internal (gsize sock, gchar *buffer, gint32 count,
221                                                           gint32 flags, MonoObjectHandle sockaddr, gint32 *werror, gboolean blocking, MonoError *error);
222
223
224 gint32
225 ves_icall_System_Net_Sockets_Socket_Send_internal (gsize sock, gchar *buffer, gint32 count,
226                                                    gint32 flags, gint32 *werror, gboolean blocking, MonoError *error);
227
228 gint32
229 ves_icall_System_Net_Sockets_Socket_Send_array_internal (gsize sock, WSABUF *buffers, gint32 count, gint32 flags,
230                                                          gint32 *werror, gboolean blocking, MonoError *error);
231
232 gint32
233 ves_icall_System_Net_Sockets_Socket_SendTo_internal (gsize sock, gchar *buffer, gint32 count,
234                                                      gint32 flags, MonoObjectHandle sockaddr, gint32 *werror,
235                                                      gboolean blocking, MonoError *error);
236
237 void
238 ves_icall_System_Net_Sockets_Socket_Select_internal (MonoArrayHandle sockets, gint32 timeout, gint32 *werror, MonoError *error);
239
240 void
241 ves_icall_System_Net_Sockets_Socket_Shutdown_internal (gsize sock, gint32 how, gint32 *werror, MonoError *error);
242
243 void
244 ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal (gsize sock, gint32 level, gint32 name,
245                                                                   MonoObjectHandle obj_val, gint32 *werror,
246                                                                   MonoError *error);
247
248 void
249 ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal (gsize sock, gint32 level, gint32 name,
250                                                                   MonoArrayHandle byte_val, gint32 *werror,
251                                                                   MonoError *error);
252
253 void
254 ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (gsize sock, gint32 level, gint32 name,
255                                                               MonoObjectHandle obj_val, MonoArrayHandle byte_val,
256                                                               gint32 int_val, gint32 *werror, MonoError *error);
257
258 int
259 ves_icall_System_Net_Sockets_Socket_IOControl_internal (gsize sock, gint32 code,
260                                                         MonoArrayHandle input, MonoArrayHandle output,
261                                                         gint32 *werror, MonoError *error);
262
263 MonoBoolean
264 ves_icall_System_Net_Dns_GetHostByName_internal (MonoStringHandle host, MonoStringHandleOut h_name,
265                                                  MonoArrayHandleOut h_aliases, MonoArrayHandleOut h_addr_list,
266                                                  gint32 hint, MonoError *error);
267
268 MonoBoolean
269 ves_icall_System_Net_Dns_GetHostByAddr_internal (MonoStringHandle addr, MonoStringHandleOut h_name,
270                                                  MonoArrayHandleOut h_aliases, MonoArrayHandleOut h_addr_list,
271                                                  gint32 hint, MonoError *error);
272
273 MonoBoolean
274 ves_icall_System_Net_Dns_GetHostName_internal (MonoStringHandleOut h_name, MonoError *error);
275
276 MonoBoolean
277 ves_icall_System_Net_Sockets_Socket_Poll_internal (gsize sock, gint mode, gint timeout, gint32 *werror, MonoError *error);
278
279 void
280 ves_icall_System_Net_Sockets_Socket_Disconnect_internal (gsize sock, MonoBoolean reuse, gint32 *werror, MonoError *error);
281
282 MonoBoolean
283 ves_icall_System_Net_Sockets_Socket_Duplicate_internal (gpointer handle, gint32 targetProcessId, gpointer *duplicate_handle, gint32 *werror, MonoError *error);
284
285 gboolean
286 ves_icall_System_Net_Sockets_Socket_SendFile_internal (gsize sock, MonoStringHandle filename,
287                                                        MonoArrayHandle pre_buffer, MonoArrayHandle post_buffer,
288                                                        gint flags, gint32 *werror, gboolean blocking, MonoError *error);
289
290 void
291 icall_cancel_blocking_socket_operation (MonoThreadObjectHandle thread, MonoError *error);
292
293 gboolean
294 ves_icall_System_Net_Sockets_Socket_SupportPortReuse (MonoProtocolType proto, MonoError *error);
295
296 void
297 mono_network_init(void);
298
299 void
300 mono_network_cleanup(void);
301
302 #endif /* _MONO_METADATA_W32SOCKET_H_ */