comparison win32/ws2tcpip.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 * ws2tcpip.d *
3 * *
4 * Windows API header module *
5 * *
6 * Translated from MinGW Windows headers *
7 * *
8 * Placed into public domain *
9 \***********************************************************************/
10
11 module win32.ws2tcpip;
12
13 import win32.w32api;
14 //import win32.winbase;
15 import win32.windef;
16 //import win32.basetyps;
17 import win32.winsock2;
18
19 enum {
20 IP_OPTIONS = 1,
21
22 IP_HDRINCL = 2,
23 IP_TOS = 3,
24 IP_TTL = 4,
25 IP_MULTICAST_IF = 9,
26 IP_MULTICAST_TTL = 10,
27 IP_MULTICAST_LOOP = 11,
28 IP_ADD_MEMBERSHIP = 12,
29 IP_DROP_MEMBERSHIP = 13,
30 IP_DONTFRAGMENT = 14,
31 IP_ADD_SOURCE_MEMBERSHIP = 15,
32 IP_DROP_SOURCE_MEMBERSHIP = 16,
33 IP_BLOCK_SOURCE = 17,
34 IP_UNBLOCK_SOURCE = 18,
35 IP_PKTINFO = 19
36 }
37
38 enum {
39 IPV6_UNICAST_HOPS = 4,
40 IPV6_MULTICAST_IF = 9,
41 IPV6_MULTICAST_HOPS = 10,
42 IPV6_MULTICAST_LOOP = 11,
43 IPV6_ADD_MEMBERSHIP = 12,
44 IPV6_DROP_MEMBERSHIP = 13,
45 IPV6_JOIN_GROUP = IPV6_ADD_MEMBERSHIP,
46 IPV6_LEAVE_GROUP = IPV6_DROP_MEMBERSHIP,
47 IPV6_PKTINFO = 19
48 }
49
50 const IP_DEFAULT_MULTICAST_TTL = 1;
51 const IP_DEFAULT_MULTICAST_LOOP = 1;
52 const IP_MAX_MEMBERSHIPS = 20;
53
54 const TCP_EXPEDITED_1122 = 2;
55
56 const UDP_NOCHECKSUM = 1;
57
58 enum {
59 IFF_UP = 1,
60 IFF_BROADCAST = 2,
61 IFF_LOOPBACK = 4,
62 IFF_POINTTOPOINT = 8,
63 IFF_MULTICAST = 16
64 }
65
66 const SIO_GET_INTERFACE_LIST = _IOR!('t', 127, u_long);
67
68 const INET_ADDRSTRLEN = 16;
69 const INET6_ADDRSTRLEN = 46;
70
71 const NI_MAXHOST = 1025;
72 const NI_MAXSERV = 32;
73
74 const NI_NOFQDN = 0x01;
75 const NI_NUMERICHOST = 0x02;
76 const NI_NAMEREQD = 0x04;
77 const NI_NUMERICSERV = 0x08;
78 const NI_DGRAM = 0x10;
79
80 const AI_PASSIVE = 1;
81 const AI_CANONNAME = 2;
82 const AI_NUMERICHOST = 4;
83
84 const EAI_AGAIN = WSATRY_AGAIN;
85 const EAI_BADFLAGS = WSAEINVAL;
86 const EAI_FAIL = WSANO_RECOVERY;
87 const EAI_FAMILY = WSAEAFNOSUPPORT;
88 const EAI_MEMORY = WSA_NOT_ENOUGH_MEMORY;
89 const EAI_NODATA = WSANO_DATA;
90 const EAI_NONAME = WSAHOST_NOT_FOUND;
91 const EAI_SERVICE = WSATYPE_NOT_FOUND;
92 const EAI_SOCKTYPE = WSAESOCKTNOSUPPORT;
93
94 struct ip_mreq {
95 IN_ADDR imr_multiaddr;
96 IN_ADDR imr_interface;
97 }
98
99 struct ip_mreq_source {
100 IN_ADDR imr_multiaddr;
101 IN_ADDR imr_sourceaddr;
102 IN_ADDR imr_interface;
103 }
104
105 struct ip_msfilter {
106 IN_ADDR imsf_multiaddr;
107 IN_ADDR imsf_interface;
108 u_long imsf_fmode;
109 u_long imsf_numsrc;
110 IN_ADDR[1] imsf_slist;
111 }
112
113 template IP_MSFILTER_SIZE(ULONG numsrc) {
114 const DWORD IP_MSFILTER_SIZE = ip_msfilter.sizeof - IN_ADDR.sizeof + numsrc * IN_ADDR.sizeof;
115 }
116
117 struct IN_PKTINFO {
118 IN_ADDR ipi_addr;
119 UINT ipi_ifindex;
120 }
121
122 struct IN6_ADDR {
123 union {
124 u_char[16] _S6_u8;
125 u_short[8] _S6_u16;
126 u_long[4] _S6_u32;
127 }
128 }
129 alias IN6_ADDR* PIN6_ADDR, LPIN6_ADDR;
130
131 struct SOCKADDR_IN6 {
132 short sin6_family;
133 u_short sin6_port;
134 u_long sin6_flowinfo;
135 IN6_ADDR sin6_addr;
136 u_long sin6_scope_id;
137 };
138 alias SOCKADDR_IN6* PSOCKADDR_IN6, LPSOCKADDR_IN6;
139
140 extern IN6_ADDR in6addr_any;
141 extern IN6_ADDR in6addr_loopback;
142
143 /+ TODO:
144 #define IN6_ARE_ADDR_EQUAL(a, b) \
145 (memcmp ((void*)(a), (void*)(b), sizeof (struct in6_addr)) == 0)
146
147 #define IN6_IS_ADDR_UNSPECIFIED(_addr) \
148 ( (((const u_long *)(_addr))[0] == 0) \
149 && (((const u_long *)(_addr))[1] == 0) \
150 && (((const u_long *)(_addr))[2] == 0) \
151 && (((const u_long *)(_addr))[3] == 0))
152
153 #define IN6_IS_ADDR_LOOPBACK(_addr) \
154 ( (((const u_long *)(_addr))[0] == 0) \
155 && (((const u_long *)(_addr))[1] == 0) \
156 && (((const u_long *)(_addr))[2] == 0) \
157 && (((const u_long *)(_addr))[3] == 0x01000000))
158
159 #define IN6_IS_ADDR_MULTICAST(_addr) (((const u_char *) (_addr))[0] == 0xff)
160
161 #define IN6_IS_ADDR_LINKLOCAL(_addr) \
162 ( (((const u_char *)(_addr))[0] == 0xfe) \
163 && ((((const u_char *)(_addr))[1] & 0xc0) == 0x80))
164
165 #define IN6_IS_ADDR_SITELOCAL(_addr) \
166 ( (((const u_char *)(_addr))[0] == 0xfe) \
167 && ((((const u_char *)(_addr))[1] & 0xc0) == 0xc0))
168
169 #define IN6_IS_ADDR_V4MAPPED(_addr) \
170 ( (((const u_long *)(_addr))[0] == 0) \
171 && (((const u_long *)(_addr))[1] == 0) \
172 && (((const u_long *)(_addr))[2] == 0xffff0000))
173
174 #define IN6_IS_ADDR_V4COMPAT(_addr) \
175 ( (((const u_long *)(_addr))[0] == 0) \
176 && (((const u_long *)(_addr))[1] == 0) \
177 && (((const u_long *)(_addr))[2] == 0) \
178 && (((const u_long *)(_addr))[3] != 0) \
179 && (((const u_long *)(_addr))[3] != 0x01000000))
180
181 #define IN6_IS_ADDR_MC_NODELOCAL(_addr) \
182 ( IN6_IS_ADDR_MULTICAST(_addr) \
183 && ((((const u_char *)(_addr))[1] & 0xf) == 0x1))
184
185 #define IN6_IS_ADDR_MC_LINKLOCAL(_addr) \
186 ( IN6_IS_ADDR_MULTICAST (_addr) \
187 && ((((const u_char *)(_addr))[1] & 0xf) == 0x2))
188
189 #define IN6_IS_ADDR_MC_SITELOCAL(_addr) \
190 ( IN6_IS_ADDR_MULTICAST(_addr) \
191 && ((((const u_char *)(_addr))[1] & 0xf) == 0x5))
192
193 #define IN6_IS_ADDR_MC_ORGLOCAL(_addr) \
194 ( IN6_IS_ADDR_MULTICAST(_addr) \
195 && ((((const u_char *)(_addr))[1] & 0xf) == 0x8))
196
197 #define IN6_IS_ADDR_MC_GLOBAL(_addr) \
198 ( IN6_IS_ADDR_MULTICAST(_addr) \
199 && ((((const u_char *)(_addr))[1] & 0xf) == 0xe))
200 +/
201
202 alias int socklen_t;
203
204 struct IPV6_MREG {
205 IN6_ADDR ipv6mr_multiaddr;
206 uint ipv6mr_interface;
207 }
208
209 struct IN6_PKTINFO {
210 IN6_ADDR ipi6_addr;
211 UINT ipi6_ifindex;
212 }
213
214 struct addrinfo {
215 int ai_flags;
216 int ai_family;
217 int ai_socktype;
218 int ai_protocol;
219 size_t ai_addrlen;
220 char* ai_canonname;
221 SOCKADDR* ai_addr;
222 addrinfo* ai_next;
223 }
224
225 extern(Windows) {
226 static if (_WIN32_WINNT >= 0x0501) {
227 void freeaddrinfo(addrinfo*);
228 int getaddrinfo (char*, char*, addrinfo*, addrinfo**);
229 int getnameinfo(SOCKADDR*, socklen_t, char*, DWORD, char*, DWORD, int);
230 }
231 }
232
233 /+ TODO
234 static __inline char*
235 gai_strerrorA(int ecode)
236 {
237 static char message[1024+1];
238 DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM
239 | FORMAT_MESSAGE_IGNORE_INSERTS
240 | FORMAT_MESSAGE_MAX_WIDTH_MASK;
241 DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
242 FormatMessageA(dwFlags, NULL, ecode, dwLanguageId, (LPSTR)message, 1024, NULL);
243 return message;
244 }
245 static __inline WCHAR*
246 gai_strerrorW(int ecode)
247 {
248 static WCHAR message[1024+1];
249 DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM
250 | FORMAT_MESSAGE_IGNORE_INSERTS
251 | FORMAT_MESSAGE_MAX_WIDTH_MASK;
252 DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
253 FormatMessageW(dwFlags, NULL, ecode, dwLanguageId, (LPWSTR)message, 1024, NULL);
254 return message;
255 }
256 #ifdef UNICODE
257 #define gai_strerror gai_strerrorW
258 #else
259 #define gai_strerror gai_strerrorA
260 #endif
261 +/
262
263 extern(Windows) {
264 INT getnameinfo(SOCKADDR* pSockaddr, socklen_t SockaddrLength,
265 PCHAR pNodeBuffer, DWORD NodeBufferSize, PCHAR pServiceBuffer,
266 DWORD ServiceBufferSize, INT Flags);
267
268 static if (_WIN32_WINNT >= 0x0502) {
269 INT GetNameInfoW(SOCKADDR* pSockaddr, socklen_t SockaddrLength,
270 PWCHAR pNodeBuffer, DWORD NodeBufferSize, PWCHAR pServiceBuffer,
271 DWORD ServiceBufferSize, INT Flags);
272
273 alias getnameinfo GetNameInfoA;
274
275 version(Unicode) {
276 alias GetNameInfoW GetNameInfo;
277 } else {
278 alias GetNameInfoA GetNameInfo;
279 }
280 }
281 }