comparison win32/mswsock.d @ 1:4a9dcbd9e54f

-files of 0.13 beta -fixes so that it now compiles with the current dmd version
author marton@basel.hu
date Tue, 05 Apr 2011 20:44:01 +0200
parents
children
comparison
equal deleted inserted replaced
0:586e4a649642 1:4a9dcbd9e54f
1 /***********************************************************************\
2 * mswsock.d *
3 * *
4 * Windows API header module *
5 * *
6 * Translated from MinGW Windows headers *
7 * by Daniel Keep *
8 * *
9 * Placed into public domain *
10 \***********************************************************************/
11 module win32.mswsock;
12
13 import win32.winbase, win32.windef;
14 private import win32.basetyps, win32.w32api;
15
16 // FIXME: clean up Windows version support
17
18 version (Win32_Winsock2) pragma(msg,
19 "Version Win32_Winsock2 is deprecated; Winsock2 is now imported by default");
20
21 // Pull in Winsock1 if the user has put "Win32_Winsock1" on the compile
22 // line; otherwise, default to Winsock2.
23 version (Win32_Winsock1) {
24 import win32.winsock;
25 } else {
26 import win32.winsock2;
27 }
28
29 static if (_WIN32_WINNT_ONLY) {
30 static if (_WIN32_WINNT >= 0x500) {
31 enum {
32 /* WinNT5+:
33 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */
34 SO_MAXDG = 0x7009,
35 SO_MAXPATHDG = 0x700A,
36 }
37 }
38
39 enum {
40 /* WinNT4+:
41 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options_for_windows_nt_4_0_2.htm */
42 SO_CONNDATA = 0x7000,
43 SO_CONNOPT = 0x7001,
44 SO_DISCDATA = 0x7002,
45 SO_DISCOPT = 0x7003,
46 SO_CONNDATALEN = 0x7004,
47 SO_CONNOPTLEN = 0x7005,
48 SO_DISCDATALEN = 0x7006,
49 SO_DISCOPTLEN = 0x7007,
50
51 /* WinNT4:
52 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */
53 SO_UPDATE_ACCEPT_CONTENT = 0x700B,
54 }
55 }
56
57 enum {
58 /* Win95+, WinNT4+ but apparently shouldn't used: mark as deprecated?
59 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */
60 SO_OPENTYPE = 0x7008,
61
62 /* Win95+; these two are passed to the SO_OPENTYPE option as arguments,
63 so would they be deprecated as well?
64 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */
65 SO_SYNCHRONOUS_ALERT = 0x0010,
66 SO_SYNCHRONOUS_NONALERT = 0x0020,
67
68 /* Win95:
69 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */
70 SO_CONNECT_TIME = 0x700C,
71 }
72
73
74 static if (_WIN32_WINNT_ONLY) {
75 enum {
76 TCP_BSDURGENT = 0x7000,
77 }
78
79 /* These *appear* to be constants for passing to the TransmitFile /
80 TransmitPackets functions, which are available in WinNT3.51+
81 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmitfile_2.htm */
82 enum {
83 TF_DISCONNECT = 1,
84 TF_REUSE_SOCKET = 2,
85 TF_WRITE_BEHIND = 4,
86 TF_USE_DEFAULT_WORKER = 0,
87 TF_USE_SYSTEM_THREAD = 16,
88 TF_USE_KERNEL_APC = 32
89 }
90 }
91
92 /* Win95+, WinNT3.51+
93 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmit_file_buffers_2.htm */
94 struct TRANSMIT_FILE_BUFFERS {
95 PVOID Head;
96 DWORD HeadLength;
97 PVOID Tail;
98 DWORD TailLength;
99 }
100 alias TRANSMIT_FILE_BUFFERS* PTRANSMIT_FILE_BUFFERS, LPTRANSMIT_FILE_BUFFERS;
101
102 extern(Windows) {
103 /* Win95+, WinNT3.51+
104 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/wsarecvex_2.htm */
105 int WSARecvEx(SOCKET, char*, int, int*);
106
107 /* Win95+, WinNT3.51+
108 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/getacceptexSOCKADDRs_2.htm */
109 VOID GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, SOCKADDR**, LPINT, SOCKADDR**, LPINT);
110
111 static if (_WIN32_WINNT_ONLY) {
112 /* WinNT3.51+
113 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmitfile_2.htm */
114 BOOL TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);
115
116 /* WinNT3.51+
117 ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/acceptex_2.htm */
118 alias BOOL function(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED) LPFN_ACCEPTEX;
119 const GUID WSAID_ACCEPTEX = {0xb5367df1,0xcbac,0x11cf,[0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92]};
120
121 alias BOOL function(SOCKET, SOCKADDR*, int, PVOID, DWORD, LPDWORD, LPOVERLAPPED) LPFN_CONNECTEX;
122 const GUID WSAID_CONNECTEX = {0x25a207b9,0xddf3,0x4660,[0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e]};
123 }
124 }
125
126 version(Win32_Winsock1) {
127 } else {
128 static if (WINVER > 0x501) {
129 /* These appear to be constants for the TRANSMIT_PACKETS_ELEMENT
130 * structure below, so I've given them the same minimum version
131 */
132 enum {
133 TP_ELEMENT_FILE = 1,
134 TP_ELEMENT_MEMORY = 2,
135 TP_ELEMENT_EOP = 4
136 }
137
138 /* WinXP+, Srv2k3+
139 * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmit_packets_element_2.htm
140 */
141 struct TRANSMIT_PACKETS_ELEMENT {
142 ULONG dwElFlags;
143 ULONG cLength;
144 union {
145 struct {
146 LARGE_INTEGER nFileOffset;
147 HANDLE hFile;
148 }
149 PVOID pBuffer;
150 }
151 }
152
153 /* WinXP+, Server2003+:
154 * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/wsamsg_2.htm
155 */
156 struct WSAMSG {
157 LPSOCKADDR name;
158 INT namelen;
159 LPWSABUF lpBuffers;
160 DWORD dwBufferCount;
161 WSABUF Control;
162 DWORD dwFlags;
163 }
164
165 alias WSAMSG* PWSAMSG, LPWSAMSG;
166
167 /* According to MSDN docs, the WSAMSG.Control buffer starts with a
168 cmsghdr header of the following form. See also RFC 2292. */
169 /* DK: Confirmed. So I suppose these should get the same version as
170 WSAMSG... */
171 struct WSACMSGHDR {
172 UINT cmsg_len;
173 INT cmsg_level;
174 INT cmsg_type;
175 // followed by UCHAR cmsg_data[];
176 }
177
178 /* TODO: Standard Posix.1g macros as per RFC 2292, with WSA_uglification. */
179 /* DK: MinGW doesn't define these, and neither does the MSDN docs. Might have
180 to actually look up RFC 2292... */
181 /+
182 #if 0
183 #define WSA_CMSG_FIRSTHDR(mhdr)
184 #define WSA_CMSG_NXTHDR(mhdr, cmsg)
185 #define WSA_CMSG_SPACE(length)
186 #define WSA_CMSG_LEN(length)
187 #endif
188 +/
189
190 extern(Windows)
191 {
192 /* WinXP+, Srv2k3+
193 * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/disconnectex_2.htm
194 */
195 BOOL DisconnectEx(SOCKET, LPOVERLAPPED, DWORD, DWORD);
196
197 /* WinXP+, Srv2k3+
198 * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/wsarecvmsg_2.htm
199 */
200 int WSARecvMsg(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
201 }
202 }
203 }