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