use SL friendly Parse methods
[mono.git] / mono / io-layer / sockets.h
1 /*
2  * sockets.h:  Socket handles
3  *
4  * Author:
5  *      Dick Porter (dick@ximian.com)
6  *
7  * (C) 2002 Ximian, Inc.
8  */
9
10 #ifndef _WAPI_SOCKETS_H_
11 #define _WAPI_SOCKETS_H_
12
13 #include <sys/types.h>
14 #include <sys/socket.h>
15 #include <sys/ioctl.h>
16 #include <netinet/in.h>
17 #include <netinet/tcp.h>
18 #include <netdb.h>
19 #include <arpa/inet.h>
20
21 #include "mono/io-layer/wapi.h"
22
23 G_BEGIN_DECLS
24
25 #define WSADESCRIPTION_LEN 256
26 #define WSASYS_STATUS_LEN 128
27
28 typedef struct 
29 {
30         guint16 wVersion;
31         guint16 wHighVersion;
32         char szDescription[WSADESCRIPTION_LEN+1];
33         char szSystemStatus[WSASYS_STATUS_LEN+1];
34         guint16 iMaxSockets;
35         guint16 iMaxUdpDg;
36         guchar *lpVendorInfo;
37 } WapiWSAData;
38
39 #define INVALID_SOCKET (guint32)(~0)
40 #define SOCKET_ERROR -1
41
42 #define WSAID_DISCONNECTEX {0x7fda2e11,0x8630,0x436f,{0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}}
43 #define WSAID_TRANSMITFILE {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
44
45 typedef struct
46 {
47         guint32 Data1;
48         guint16 Data2;
49         guint16 Data3;
50         guint8 Data4[8];
51 } WapiGuid;
52
53 typedef struct
54 {
55         gpointer Head;
56         guint32 HeadLength;
57         gpointer Tail;
58         guint32 TailLength;
59 } WapiTransmitFileBuffers;
60
61 typedef enum {
62         TF_USE_DEFAULT_WORKER   = 0,
63         TF_DISCONNECT           = 0x01,
64         TF_REUSE_SOCKET         = 0x02,
65         TF_WRITE_BEHIND         = 0x04,
66         TF_USE_SYSTEM_THREAD    = 0x10,
67         TF_USE_KERNEL_APC       = 0x20
68 } WapiTransmitFileFlags;
69
70 typedef struct
71 {
72         guint32 len;
73         gpointer buf;
74 } WapiWSABuf;
75
76 /* If we need to support more WSAIoctl commands then define these
77  * using the bitfield flags method
78  */
79 #define SIO_GET_EXTENSION_FUNCTION_POINTER 0xC8000006
80
81 typedef gboolean (*WapiDisconnectExFn)(guint32, WapiOverlapped *, guint32,
82                                         WapiTransmitFileFlags);
83 typedef gboolean (*WapiTransmitFileFn)(guint32, gpointer, guint32, guint32,
84                                         WapiOverlapped *,
85                                         WapiTransmitFileBuffers *,
86                                         WapiTransmitFileFlags);
87
88
89 extern int WSAStartup(guint32 requested, WapiWSAData *data);
90 extern int WSACleanup(void);
91 extern void WSASetLastError(int error);
92 extern int WSAGetLastError(void);
93 extern int closesocket(guint32 handle);
94
95 extern int ioctlsocket(guint32 handle, gint32 command, gpointer arg);
96 extern int WSAIoctl (guint32 handle, gint32 command,
97                      gchar *input, gint i_len,
98                      gchar *output, gint o_len, glong *written,
99                      void *unused1, void *unused2);
100 extern int WSARecv (guint32 handle, WapiWSABuf *buffers, guint32 count,
101                     guint32 *received, guint32 *flags,
102                     WapiOverlapped *overlapped, WapiOverlappedCB *complete);
103 extern int WSASend (guint32 handle, WapiWSABuf *buffers, guint32 count,
104                     guint32 *sent, guint32 flags,
105                     WapiOverlapped *overlapped, WapiOverlappedCB *complete);
106
107 G_END_DECLS
108 #endif /* _WAPI_SOCKETS_H_ */