Mercurial > projects > ddbg_continued
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 } |