[w32socket] Use coop handles for System.Net.Dns.GetHostByAddr_internal
[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 gpointer
170 ves_icall_System_Net_Sockets_Socket_Socket_internal (MonoObject *this_obj, gint32 family, gint32 type, gint32 proto,
171         gint32 *error);
172
173 void
174 ves_icall_System_Net_Sockets_Socket_Close_internal (gsize sock, gint32 *error);
175
176 gint32
177 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal (void);
178
179 gint32
180 ves_icall_System_Net_Sockets_Socket_Available_internal (gsize sock, gint32 *error);
181
182 void
183 ves_icall_System_Net_Sockets_Socket_Blocking_internal (gsize sock, gboolean block, gint32 *error);
184
185 gpointer
186 ves_icall_System_Net_Sockets_Socket_Accept_internal (gsize sock, gint32 *error, gboolean blocking);
187
188 void
189 ves_icall_System_Net_Sockets_Socket_Listen_internal (gsize sock, guint32 backlog, gint32 *error);
190
191 MonoObject*
192 ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal (gsize sock, gint32 af, gint32 *error);
193
194 MonoObject*
195 ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal (gsize sock, gint32 af, gint32 *error);
196
197 void
198 ves_icall_System_Net_Sockets_Socket_Bind_internal (gsize sock, MonoObject *sockaddr, gint32 *error);
199
200 void
201 ves_icall_System_Net_Sockets_Socket_Connect_internal (gsize sock, MonoObject *sockaddr, gint32 *error, gboolean blocking);
202
203 gint32
204 ves_icall_System_Net_Sockets_Socket_Receive_internal (gsize sock, MonoArray *buffer, gint32 offset, gint32 count,
205         gint32 flags, gint32 *error, gboolean blocking);
206
207 gint32
208 ves_icall_System_Net_Sockets_Socket_Receive_array_internal (gsize sock, MonoArray *buffers, gint32 flags, gint32 *error,
209         gboolean blocking);
210
211 gint32
212 ves_icall_System_Net_Sockets_Socket_ReceiveFrom_internal (gsize sock, MonoArray *buffer, gint32 offset, gint32 count,
213         gint32 flags, MonoObject **sockaddr, gint32 *error, gboolean blocking);
214
215 gint32
216 ves_icall_System_Net_Sockets_Socket_Send_internal (gsize sock, MonoArray *buffer, gint32 offset, gint32 count,
217         gint32 flags, gint32 *error, gboolean blocking);
218
219 gint32
220 ves_icall_System_Net_Sockets_Socket_Send_array_internal (gsize sock, MonoArray *buffers, gint32 flags, gint32 *error,
221         gboolean blocking);
222
223 gint32
224 ves_icall_System_Net_Sockets_Socket_SendTo_internal (gsize sock, MonoArray *buffer, gint32 offset, gint32 count,
225         gint32 flags, MonoObject *sockaddr, gint32 *error, gboolean blocking);
226
227 void
228 ves_icall_System_Net_Sockets_Socket_Select_internal (MonoArray **sockets, gint32 timeout, gint32 *error);
229
230 void
231 ves_icall_System_Net_Sockets_Socket_Shutdown_internal (gsize sock, gint32 how, gint32 *error);
232
233 void
234 ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal (gsize sock, gint32 level, gint32 name,
235         MonoObject **obj_val, gint32 *error);
236
237 void
238 ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal (gsize sock, gint32 level, gint32 name,
239         MonoArray **byte_val, gint32 *error);
240
241 void
242 ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (gsize sock, gint32 level, gint32 name,
243         MonoObject *obj_val, MonoArray *byte_val, gint32 int_val, gint32 *error);
244
245 int
246 ves_icall_System_Net_Sockets_Socket_IOControl_internal (gsize sock, gint32 code, MonoArray *input, MonoArray *output,
247         gint32 *error);
248
249 MonoBoolean
250 ves_icall_System_Net_Dns_GetHostByName_internal (MonoStringHandle host, MonoStringHandleOut h_name,
251                                                  MonoArrayHandleOut h_aliases, MonoArrayHandleOut h_addr_list,
252                                                  gint32 hint, MonoError *error);
253
254 MonoBoolean
255 ves_icall_System_Net_Dns_GetHostByAddr_internal (MonoStringHandle addr, MonoStringHandleOut h_name,
256                                                  MonoArrayHandleOut h_aliases, MonoArrayHandleOut h_addr_list,
257                                                  gint32 hint, MonoError *error);
258
259 MonoBoolean
260 ves_icall_System_Net_Dns_GetHostName_internal (MonoStringHandleOut h_name, MonoError *error);
261
262 MonoBoolean
263 ves_icall_System_Net_Sockets_Socket_Poll_internal (gsize sock, gint mode, gint timeout, gint32 *error);
264
265 void
266 ves_icall_System_Net_Sockets_Socket_Disconnect_internal (gsize sock, MonoBoolean reuse, gint32 *error);
267
268 gboolean
269 ves_icall_System_Net_Sockets_Socket_SendFile_internal (gsize sock, MonoString *filename, MonoArray *pre_buffer,
270         MonoArray *post_buffer, gint flags, gint32 *error, gboolean blocking);
271
272 void
273 icall_cancel_blocking_socket_operation (MonoThread *thread);
274
275 gboolean
276 ves_icall_System_Net_Sockets_Socket_SupportPortReuse (MonoProtocolType proto);
277
278 void
279 mono_network_init(void);
280
281 void
282 mono_network_cleanup(void);
283
284 #endif /* _MONO_METADATA_W32SOCKET_H_ */