1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC src/core/sys/windows/_wininet.d)
9  */
10 module core.sys.windows.wininet;
version(Windows)11 version (Windows):
12 
13 version (ANSI) {} else version = Unicode;
14 pragma(lib, "wininet");
15 
16 // FIXME: check types and grouping of constants
17 
18 import core.sys.windows.winbase, core.sys.windows.windef;
19 
20 enum {
21     INTERNET_INVALID_PORT_NUMBER =    0,
22     INTERNET_DEFAULT_FTP_PORT    =   21,
23     INTERNET_DEFAULT_GOPHER_PORT =   70,
24     INTERNET_DEFAULT_HTTP_PORT   =   80,
25     INTERNET_DEFAULT_HTTPS_PORT  =  443,
26     INTERNET_DEFAULT_SOCKS_PORT  = 1080
27 }
28 
29 enum size_t
30     MAX_CACHE_ENTRY_INFO_SIZE       =  4096,
31     INTERNET_MAX_HOST_NAME_LENGTH   =   256,
32     INTERNET_MAX_USER_NAME_LENGTH   =   128,
33     INTERNET_MAX_PASSWORD_LENGTH    =   128,
34     INTERNET_MAX_PORT_NUMBER_LENGTH =     5,
35     INTERNET_MAX_PORT_NUMBER_VALUE  = 65535,
36     INTERNET_MAX_PATH_LENGTH        =  2048,
37     INTERNET_MAX_SCHEME_LENGTH      =    32,
38     INTERNET_MAX_URL_LENGTH         = INTERNET_MAX_SCHEME_LENGTH
39                                       + "://".length
40                                       + INTERNET_MAX_PATH_LENGTH;
41 
42 enum : DWORD {
43     INTERNET_KEEP_ALIVE_UNKNOWN  = DWORD.max,
44     INTERNET_KEEP_ALIVE_DISABLED = 0,
45     INTERNET_KEEP_ALIVE_ENABLED
46 }
47 
48 enum {
49     INTERNET_REQFLAG_FROM_CACHE = 1,
50     INTERNET_REQFLAG_ASYNC      = 2
51 }
52 
53 enum DWORD
54     INTERNET_FLAG_RELOAD                   = 0x80000000,
55     INTERNET_FLAG_RAW_DATA                 = 0x40000000,
56     INTERNET_FLAG_EXISTING_CONNECT         = 0x20000000,
57     INTERNET_FLAG_ASYNC                    = 0x10000000,
58     INTERNET_FLAG_PASSIVE                  = 0x08000000,
59     INTERNET_FLAG_NO_CACHE_WRITE           = 0x04000000,
60     INTERNET_FLAG_DONT_CACHE               = INTERNET_FLAG_NO_CACHE_WRITE,
61     INTERNET_FLAG_MAKE_PERSISTENT          = 0x02000000,
62     INTERNET_FLAG_OFFLINE                  = 0x01000000,
63     INTERNET_FLAG_SECURE                   = 0x00800000,
64     INTERNET_FLAG_KEEP_CONNECTION          = 0x00400000,
65     INTERNET_FLAG_NO_AUTO_REDIRECT         = 0x00200000,
66     INTERNET_FLAG_READ_PREFETCH            = 0x00100000,
67     INTERNET_FLAG_NO_COOKIES               = 0x00080000,
68     INTERNET_FLAG_NO_AUTH                  = 0x00040000,
69     INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP  = 0x00008000,
70     INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS = 0x00004000,
71     INTERNET_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000,
72     INTERNET_FLAG_IGNORE_CERT_CN_INVALID   = 0x00001000,
73     INTERNET_FLAG_RESYNCHRONIZE            = 0x00000800,
74     INTERNET_FLAG_HYPERLINK                = 0x00000400,
75     INTERNET_FLAG_NO_UI                    = 0x00000200,
76     INTERNET_FLAG_PRAGMA_NOCACHE           = 0x00000100,
77     INTERNET_FLAG_MUST_CACHE_REQUEST       = 0x00000010,
78     INTERNET_FLAG_TRANSFER_ASCII           = FTP_TRANSFER_TYPE_ASCII,
79     INTERNET_FLAG_TRANSFER_BINARY          = FTP_TRANSFER_TYPE_BINARY,
80 
81     SECURITY_INTERNET_MASK                 = 0x0000F000,
82     SECURITY_SET_MASK                      = SECURITY_INTERNET_MASK,
83 
84     INTERNET_FLAGS_MASK                    = 0xFFFCFE13,
85     INTERNET_OPTIONS_MASK                  = ~INTERNET_FLAGS_MASK;
86 
87 enum INTERNET_NO_CALLBACK = 0;
88 enum INTERNET_RFC1123_FORMAT = 0;
89 enum size_t INTERNET_RFC1123_BUFSIZE = 30;
90 
91 enum DWORD
92     ICU_ESCAPE             = 0x80000000,
93     ICU_USERNAME           = 0x40000000,
94     ICU_NO_ENCODE          = 0x20000000,
95     ICU_DECODE             = 0x10000000,
96     ICU_NO_META            = 0x08000000,
97     ICU_ENCODE_SPACES_ONLY = 0x04000000,
98     ICU_BROWSER_MODE       = 0x02000000;
99 
100 enum {
101     INTERNET_OPEN_TYPE_PRECONFIG = 0,
102     INTERNET_OPEN_TYPE_DIRECT    = 1,
103     INTERNET_OPEN_TYPE_PROXY     = 3,
104     PRE_CONFIG_INTERNET_ACCESS   = INTERNET_OPEN_TYPE_PRECONFIG,
105     LOCAL_INTERNET_ACCESS        = INTERNET_OPEN_TYPE_DIRECT,
106     GATEWAY_INTERNET_ACCESS      = 2,
107     CERN_PROXY_INTERNET_ACCESS   = INTERNET_OPEN_TYPE_PROXY,
108 }
109 
110 enum ISO_GLOBAL      = 1;
111 enum ISO_REGISTRY    = 2;
112 enum ISO_VALID_FLAGS = ISO_GLOBAL | ISO_REGISTRY;
113 
114 enum {
115     INTERNET_OPTION_CALLBACK                    =  1,
116     INTERNET_OPTION_CONNECT_TIMEOUT,
117     INTERNET_OPTION_CONNECT_RETRIES,
118     INTERNET_OPTION_CONNECT_BACKOFF,
119     INTERNET_OPTION_SEND_TIMEOUT,
120     INTERNET_OPTION_CONTROL_SEND_TIMEOUT        = INTERNET_OPTION_SEND_TIMEOUT,
121     INTERNET_OPTION_RECEIVE_TIMEOUT,
122     INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT  = INTERNET_OPTION_RECEIVE_TIMEOUT,
123     INTERNET_OPTION_DATA_SEND_TIMEOUT,
124     INTERNET_OPTION_DATA_RECEIVE_TIMEOUT,
125     INTERNET_OPTION_HANDLE_TYPE,
126     INTERNET_OPTION_CONTEXT_VALUE,
127     INTERNET_OPTION_LISTEN_TIMEOUT,
128     INTERNET_OPTION_READ_BUFFER_SIZE,
129     INTERNET_OPTION_WRITE_BUFFER_SIZE,       // = 13
130     INTERNET_OPTION_ASYNC_ID                    = 15,
131     INTERNET_OPTION_ASYNC_PRIORITY,          // = 16
132     INTERNET_OPTION_PARENT_HANDLE               = 21,
133     INTERNET_OPTION_KEEP_CONNECTION,
134     INTERNET_OPTION_REQUEST_FLAGS,
135     INTERNET_OPTION_EXTENDED_ERROR,          // = 24
136     INTERNET_OPTION_OFFLINE_MODE                = 26,
137     INTERNET_OPTION_CACHE_STREAM_HANDLE,
138     INTERNET_OPTION_USERNAME,
139     INTERNET_OPTION_PASSWORD,
140     INTERNET_OPTION_ASYNC,
141     INTERNET_OPTION_SECURITY_FLAGS,
142     INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT,
143     INTERNET_OPTION_DATAFILE_NAME,
144     INTERNET_OPTION_URL,
145     INTERNET_OPTION_SECURITY_CERTIFICATE,
146     INTERNET_OPTION_SECURITY_KEY_BITNESS,
147     INTERNET_OPTION_REFRESH,
148     INTERNET_OPTION_PROXY,
149     INTERNET_OPTION_SETTINGS_CHANGED,
150     INTERNET_OPTION_VERSION,
151     INTERNET_OPTION_USER_AGENT,
152     INTERNET_OPTION_END_BROWSER_SESSION,
153     INTERNET_OPTION_PROXY_USERNAME,
154     INTERNET_OPTION_PROXY_PASSWORD,          // = 44
155     INTERNET_FIRST_OPTION                       = INTERNET_OPTION_CALLBACK,
156     // why?
157     INTERNET_LAST_OPTION                        = INTERNET_OPTION_USER_AGENT
158 }
159 
160 enum INTERNET_PRIORITY_FOREGROUND = 1000;
161 
162 enum {
163     INTERNET_HANDLE_TYPE_INTERNET = 1,
164     INTERNET_HANDLE_TYPE_CONNECT_FTP,
165     INTERNET_HANDLE_TYPE_CONNECT_GOPHER,
166     INTERNET_HANDLE_TYPE_CONNECT_HTTP,
167     INTERNET_HANDLE_TYPE_FTP_FIND,
168     INTERNET_HANDLE_TYPE_FTP_FIND_HTML,
169     INTERNET_HANDLE_TYPE_FTP_FILE,
170     INTERNET_HANDLE_TYPE_FTP_FILE_HTML,
171     INTERNET_HANDLE_TYPE_GOPHER_FIND,
172     INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML,
173     INTERNET_HANDLE_TYPE_GOPHER_FILE,
174     INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML,
175     INTERNET_HANDLE_TYPE_HTTP_REQUEST
176 }
177 
178 enum DWORD
179     SECURITY_FLAG_SECURE                   = 0x00000001,
180     SECURITY_FLAG_SSL                      = 0x00000002,
181     SECURITY_FLAG_SSL3                     = 0x00000004,
182     SECURITY_FLAG_PCT                      = 0x00000008,
183     SECURITY_FLAG_PCT4                     = 0x00000010,
184     SECURITY_FLAG_IETFSSL4                 = 0x00000020,
185     SECURITY_FLAG_IGNORE_REVOCATION        = 0x00000080,
186     SECURITY_FLAG_IGNORE_UNKNOWN_CA        = 0x00000100,
187     SECURITY_FLAG_IGNORE_WRONG_USAGE       = 0x00000200,
188     SECURITY_FLAG_40BIT                    = 0x10000000,
189     SECURITY_FLAG_128BIT                   = 0x20000000,
190     SECURITY_FLAG_56BIT                    = 0x40000000,
191     SECURITY_FLAG_UNKNOWNBIT               = 0x80000000,
192     SECURITY_FLAG_NORMALBITNESS            = SECURITY_FLAG_40BIT,
193     SECURITY_FLAG_IGNORE_CERT_CN_INVALID   = INTERNET_FLAG_IGNORE_CERT_CN_INVALID,
194     SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = INTERNET_FLAG_IGNORE_CERT_DATE_INVALID,
195     SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS,
196     SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP  = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
197 
198 enum {
199     INTERNET_SERVICE_FTP = 1,
200     INTERNET_SERVICE_GOPHER,
201     INTERNET_SERVICE_HTTP
202 }
203 
204 enum {
205     INTERNET_STATUS_RESOLVING_NAME        =  10,
206     INTERNET_STATUS_NAME_RESOLVED         =  11,
207     INTERNET_STATUS_CONNECTING_TO_SERVER  =  20,
208     INTERNET_STATUS_CONNECTED_TO_SERVER   =  21,
209     INTERNET_STATUS_SENDING_REQUEST       =  30,
210     INTERNET_STATUS_REQUEST_SENT          =  31,
211     INTERNET_STATUS_RECEIVING_RESPONSE    =  40,
212     INTERNET_STATUS_RESPONSE_RECEIVED     =  41,
213     INTERNET_STATUS_CTL_RESPONSE_RECEIVED =  42,
214     INTERNET_STATUS_PREFETCH              =  43,
215     INTERNET_STATUS_CLOSING_CONNECTION    =  50,
216     INTERNET_STATUS_CONNECTION_CLOSED     =  51,
217     INTERNET_STATUS_HANDLE_CREATED        =  60,
218     INTERNET_STATUS_HANDLE_CLOSING        =  70,
219     INTERNET_STATUS_REQUEST_COMPLETE      = 100,
220     INTERNET_STATUS_REDIRECT              = 110
221 }
222 
223 enum {
224     FTP_TRANSFER_TYPE_UNKNOWN = 0,
225     FTP_TRANSFER_TYPE_ASCII   = 1,
226     FTP_TRANSFER_TYPE_BINARY  = 2,
227     FTP_TRANSFER_TYPE_MASK    = 3
228 }
229 
230 enum size_t
231     MAX_GOPHER_DISPLAY_TEXT   = 128,
232     MAX_GOPHER_SELECTOR_TEXT  = 256,
233     MAX_GOPHER_HOST_NAME      = INTERNET_MAX_HOST_NAME_LENGTH,
234     MAX_GOPHER_LOCATOR_LENGTH
235       = 1 + MAX_GOPHER_DISPLAY_TEXT + 1 + MAX_GOPHER_SELECTOR_TEXT + 1
236         + MAX_GOPHER_HOST_NAME + 1 + INTERNET_MAX_PORT_NUMBER_LENGTH + 4;
237 
238 enum DWORD
239     GOPHER_TYPE_TEXT_FILE      = 0x00000001,
240     GOPHER_TYPE_DIRECTORY      = 0x00000002,
241     GOPHER_TYPE_CSO            = 0x00000004,
242     GOPHER_TYPE_ERROR          = 0x00000008,
243     GOPHER_TYPE_MAC_BINHEX     = 0x00000010,
244     GOPHER_TYPE_DOS_ARCHIVE    = 0x00000020,
245     GOPHER_TYPE_UNIX_UUENCODED = 0x00000040,
246     GOPHER_TYPE_INDEX_SERVER   = 0x00000080,
247     GOPHER_TYPE_TELNET         = 0x00000100,
248     GOPHER_TYPE_BINARY         = 0x00000200,
249     GOPHER_TYPE_REDUNDANT      = 0x00000400,
250     GOPHER_TYPE_TN3270         = 0x00000800,
251     GOPHER_TYPE_GIF            = 0x00001000,
252     GOPHER_TYPE_IMAGE          = 0x00002000,
253     GOPHER_TYPE_BITMAP         = 0x00004000,
254     GOPHER_TYPE_MOVIE          = 0x00008000,
255     GOPHER_TYPE_SOUND          = 0x00010000,
256     GOPHER_TYPE_HTML           = 0x00020000,
257     GOPHER_TYPE_PDF            = 0x00040000,
258     GOPHER_TYPE_CALENDAR       = 0x00080000,
259     GOPHER_TYPE_INLINE         = 0x00100000,
260     GOPHER_TYPE_UNKNOWN        = 0x20000000,
261     GOPHER_TYPE_ASK            = 0x40000000,
262     GOPHER_TYPE_GOPHER_PLUS    = 0x80000000,
263     GOPHER_TYPE_FILE_MASK      = 0x001FF271;
264 
IS_GOPHER_FILE(DWORD t)265 BOOL IS_GOPHER_FILE(DWORD t) {
266     return !!(t & GOPHER_TYPE_FILE_MASK);
267 }
268 
IS_GOPHER_DIRECTORY(DWORD t)269 BOOL IS_GOPHER_DIRECTORY(DWORD t) {
270     return !!(t & GOPHER_TYPE_DIRECTORY);
271 }
272 
IS_GOPHER_PHONE_SERVER(DWORD t)273 BOOL IS_GOPHER_PHONE_SERVER(DWORD t) {
274     return !!(t & GOPHER_TYPE_CSO);
275 }
276 
IS_GOPHER_ERROR(DWORD t)277 BOOL IS_GOPHER_ERROR(DWORD t) {
278     return !!(t & GOPHER_TYPE_ERROR);
279 }
280 
IS_GOPHER_INDEX_SERVER(DWORD t)281 BOOL IS_GOPHER_INDEX_SERVER(DWORD t) {
282     return !!(t & GOPHER_TYPE_INDEX_SERVER);
283 }
284 
IS_GOPHER_TELNET_SESSION(DWORD t)285 BOOL IS_GOPHER_TELNET_SESSION(DWORD t) {
286     return !!(t & GOPHER_TYPE_TELNET);
287 }
288 
IS_GOPHER_BACKUP_SERVER(DWORD t)289 BOOL IS_GOPHER_BACKUP_SERVER(DWORD t) {
290     return !!(t & GOPHER_TYPE_REDUNDANT);
291 }
292 
IS_GOPHER_TN3270_SESSION(DWORD t)293 BOOL IS_GOPHER_TN3270_SESSION(DWORD t) {
294     return !!(t & GOPHER_TYPE_TN3270);
295 }
296 
IS_GOPHER_ASK(DWORD t)297 BOOL IS_GOPHER_ASK(DWORD t) {
298     return !!(t & GOPHER_TYPE_ASK);
299 }
300 
IS_GOPHER_PLUS(DWORD t)301 BOOL IS_GOPHER_PLUS(DWORD t) {
302     return !!(t & GOPHER_TYPE_GOPHER_PLUS);
303 }
304 
IS_GOPHER_TYPE_KNOWN(DWORD t)305 BOOL IS_GOPHER_TYPE_KNOWN(DWORD t) {
306     return !(t & GOPHER_TYPE_UNKNOWN);
307 }
308 
309 enum size_t
310     MAX_GOPHER_CATEGORY_NAME    = 128,
311     MAX_GOPHER_ATTRIBUTE_NAME   = 128,
312     MIN_GOPHER_ATTRIBUTE_LENGTH = 256;
313 
314 const TCHAR[]
315     GOPHER_INFO_CATEGORY      = "+INFO",
316     GOPHER_ADMIN_CATEGORY     = "+ADMIN",
317     GOPHER_VIEWS_CATEGORY     = "+VIEWS",
318     GOPHER_ABSTRACT_CATEGORY  = "+ABSTRACT",
319     GOPHER_VERONICA_CATEGORY  = "+VERONICA",
320     GOPHER_ADMIN_ATTRIBUTE    = "Admin",
321     GOPHER_MOD_DATE_ATTRIBUTE = "Mod-Date",
322     GOPHER_TTL_ATTRIBUTE      = "TTL",
323     GOPHER_SCORE_ATTRIBUTE    = "Score",
324     GOPHER_RANGE_ATTRIBUTE    = "Score-range",
325     GOPHER_SITE_ATTRIBUTE     = "Site",
326     GOPHER_ORG_ATTRIBUTE      = "Org",
327     GOPHER_LOCATION_ATTRIBUTE = "Loc",
328     GOPHER_GEOG_ATTRIBUTE     = "Geog",
329     GOPHER_TIMEZONE_ATTRIBUTE = "TZ",
330     GOPHER_PROVIDER_ATTRIBUTE = "Provider",
331     GOPHER_VERSION_ATTRIBUTE  = "Version",
332     GOPHER_ABSTRACT_ATTRIBUTE = "Abstract",
333     GOPHER_VIEW_ATTRIBUTE     = "View",
334     GOPHER_TREEWALK_ATTRIBUTE = "treewalk";
335 
336 enum : DWORD {
337     GOPHER_ATTRIBUTE_ID_BASE = 0xABCCCC00,
338     GOPHER_CATEGORY_ID_ALL,
339     GOPHER_CATEGORY_ID_INFO,
340     GOPHER_CATEGORY_ID_ADMIN,
341     GOPHER_CATEGORY_ID_VIEWS,
342     GOPHER_CATEGORY_ID_ABSTRACT,
343     GOPHER_CATEGORY_ID_VERONICA,
344     GOPHER_CATEGORY_ID_ASK,
345     GOPHER_CATEGORY_ID_UNKNOWN,
346     GOPHER_ATTRIBUTE_ID_ALL,
347     GOPHER_ATTRIBUTE_ID_ADMIN,
348     GOPHER_ATTRIBUTE_ID_MOD_DATE,
349     GOPHER_ATTRIBUTE_ID_TTL,
350     GOPHER_ATTRIBUTE_ID_SCORE,
351     GOPHER_ATTRIBUTE_ID_RANGE,
352     GOPHER_ATTRIBUTE_ID_SITE,
353     GOPHER_ATTRIBUTE_ID_ORG,
354     GOPHER_ATTRIBUTE_ID_LOCATION,
355     GOPHER_ATTRIBUTE_ID_GEOG,
356     GOPHER_ATTRIBUTE_ID_TIMEZONE,
357     GOPHER_ATTRIBUTE_ID_PROVIDER,
358     GOPHER_ATTRIBUTE_ID_VERSION,
359     GOPHER_ATTRIBUTE_ID_ABSTRACT,
360     GOPHER_ATTRIBUTE_ID_VIEW,
361     GOPHER_ATTRIBUTE_ID_TREEWALK,
362     GOPHER_ATTRIBUTE_ID_UNKNOWN
363 }
364 
365 enum HTTP_MAJOR_VERSION   = 1;
366 enum HTTP_MINOR_VERSION   = 0;
367 const TCHAR[] HTTP_VERSION = "HTTP/1.0";
368 
369 enum : DWORD {
370     HTTP_QUERY_MIME_VERSION,
371     HTTP_QUERY_CONTENT_TYPE,
372     HTTP_QUERY_CONTENT_TRANSFER_ENCODING,
373     HTTP_QUERY_CONTENT_ID,
374     HTTP_QUERY_CONTENT_DESCRIPTION,
375     HTTP_QUERY_CONTENT_LENGTH,
376     HTTP_QUERY_CONTENT_LANGUAGE,
377     HTTP_QUERY_ALLOW,
378     HTTP_QUERY_PUBLIC,
379     HTTP_QUERY_DATE,
380     HTTP_QUERY_EXPIRES,
381     HTTP_QUERY_LAST_MODIFIED,
382     HTTP_QUERY_MESSAGE_ID,
383     HTTP_QUERY_URI,
384     HTTP_QUERY_DERIVED_FROM,
385     HTTP_QUERY_COST,
386     HTTP_QUERY_LINK,
387     HTTP_QUERY_PRAGMA,
388     HTTP_QUERY_VERSION,
389     HTTP_QUERY_STATUS_CODE,
390     HTTP_QUERY_STATUS_TEXT,
391     HTTP_QUERY_RAW_HEADERS,
392     HTTP_QUERY_RAW_HEADERS_CRLF,
393     HTTP_QUERY_CONNECTION,
394     HTTP_QUERY_ACCEPT,
395     HTTP_QUERY_ACCEPT_CHARSET,
396     HTTP_QUERY_ACCEPT_ENCODING,
397     HTTP_QUERY_ACCEPT_LANGUAGE,
398     HTTP_QUERY_AUTHORIZATION,
399     HTTP_QUERY_CONTENT_ENCODING,
400     HTTP_QUERY_FORWARDED,
401     HTTP_QUERY_FROM,
402     HTTP_QUERY_IF_MODIFIED_SINCE,
403     HTTP_QUERY_LOCATION,
404     HTTP_QUERY_ORIG_URI,
405     HTTP_QUERY_REFERER,
406     HTTP_QUERY_RETRY_AFTER,
407     HTTP_QUERY_SERVER,
408     HTTP_QUERY_TITLE,
409     HTTP_QUERY_USER_AGENT,
410     HTTP_QUERY_WWW_AUTHENTICATE,
411     HTTP_QUERY_PROXY_AUTHENTICATE,
412     HTTP_QUERY_ACCEPT_RANGES,
413     HTTP_QUERY_SET_COOKIE,
414     HTTP_QUERY_COOKIE,
415     HTTP_QUERY_REQUEST_METHOD,
416     HTTP_QUERY_MAX    = 45,
417     HTTP_QUERY_CUSTOM = 65535
418 }
419 
420 enum DWORD
421     HTTP_QUERY_FLAG_REQUEST_HEADERS = 0x80000000,
422     HTTP_QUERY_FLAG_SYSTEMTIME      = 0x40000000,
423     HTTP_QUERY_FLAG_NUMBER          = 0x20000000,
424     HTTP_QUERY_FLAG_COALESCE        = 0x10000000,
425     HTTP_QUERY_MODIFIER_FLAGS_MASK  = 0xF0000000,
426     HTTP_QUERY_HEADER_MASK          = ~HTTP_QUERY_MODIFIER_FLAGS_MASK;
427 
428 enum {
429     HTTP_STATUS_OK                 = 200,
430     HTTP_STATUS_CREATED,
431     HTTP_STATUS_ACCEPTED,
432     HTTP_STATUS_PARTIAL,
433     HTTP_STATUS_NO_CONTENT,     // = 204
434     HTTP_STATUS_AMBIGUOUS          = 300,
435     HTTP_STATUS_MOVED,
436     HTTP_STATUS_REDIRECT,
437     HTTP_STATUS_REDIRECT_METHOD,
438     HTTP_STATUS_NOT_MODIFIED,   // = 304
439     HTTP_STATUS_BAD_REQUEST        = 400,
440     HTTP_STATUS_DENIED,
441     HTTP_STATUS_PAYMENT_REQ,
442     HTTP_STATUS_FORBIDDEN,
443     HTTP_STATUS_NOT_FOUND,
444     HTTP_STATUS_BAD_METHOD,
445     HTTP_STATUS_NONE_ACCEPTABLE,
446     HTTP_STATUS_PROXY_AUTH_REQ,
447     HTTP_STATUS_REQUEST_TIMEOUT,
448     HTTP_STATUS_CONFLICT,
449     HTTP_STATUS_GONE,
450     HTTP_STATUS_AUTH_REFUSED,   // = 411
451     HTTP_STATUS_SERVER_ERROR       = 500,
452     HTTP_STATUS_NOT_SUPPORTED,
453     HTTP_STATUS_BAD_GATEWAY,
454     HTTP_STATUS_SERVICE_UNAVAIL,
455     HTTP_STATUS_GATEWAY_TIMEOUT // = 504
456 }
457 
458 enum {
459     INTERNET_PREFETCH_PROGRESS,
460     INTERNET_PREFETCH_COMPLETE,
461     INTERNET_PREFETCH_ABORTED
462 }
463 
464 enum FLAGS_ERROR_UI_FILTER_FOR_ERRORS    = 0x01;
465 enum FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS = 0x02;
466 enum FLAGS_ERROR_UI_FLAGS_GENERATE_DATA  = 0x04;
467 enum FLAGS_ERROR_UI_FLAGS_NO_UI          = 0x08;
468 
469 enum DWORD
470     HTTP_ADDREQ_INDEX_MASK                   = 0x0000FFFF,
471     HTTP_ADDREQ_FLAGS_MASK                   = 0xFFFF0000,
472     HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON = 0x01000000,
473     HTTP_ADDREQ_FLAG_ADD_IF_NEW              = 0x10000000,
474     HTTP_ADDREQ_FLAG_ADD                     = 0x20000000,
475     HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA     = 0x40000000,
476     HTTP_ADDREQ_FLAG_COALESCE          = HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA,
477     HTTP_ADDREQ_FLAG_REPLACE                 = 0x80000000;
478 
479 enum {
480     INTERNET_ERROR_BASE                       = 12000,
481     ERROR_INTERNET_OUT_OF_HANDLES,
482     ERROR_INTERNET_TIMEOUT,
483     ERROR_INTERNET_EXTENDED_ERROR,
484     ERROR_INTERNET_INTERNAL_ERROR,
485     ERROR_INTERNET_INVALID_URL,
486     ERROR_INTERNET_UNRECOGNIZED_SCHEME,
487     ERROR_INTERNET_NAME_NOT_RESOLVED,
488     ERROR_INTERNET_PROTOCOL_NOT_FOUND,
489     ERROR_INTERNET_INVALID_OPTION,
490     ERROR_INTERNET_BAD_OPTION_LENGTH,
491     ERROR_INTERNET_OPTION_NOT_SETTABLE,
492     ERROR_INTERNET_SHUTDOWN,
493     ERROR_INTERNET_INCORRECT_USER_NAME,
494     ERROR_INTERNET_INCORRECT_PASSWORD,
495     ERROR_INTERNET_LOGIN_FAILURE,
496     ERROR_INTERNET_INVALID_OPERATION,
497     ERROR_INTERNET_OPERATION_CANCELLED,
498     ERROR_INTERNET_INCORRECT_HANDLE_TYPE,
499     ERROR_INTERNET_INCORRECT_HANDLE_STATE,
500     ERROR_INTERNET_NOT_PROXY_REQUEST,
501     ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND,
502     ERROR_INTERNET_BAD_REGISTRY_PARAMETER,
503     ERROR_INTERNET_NO_DIRECT_ACCESS,
504     ERROR_INTERNET_NO_CONTEXT,
505     ERROR_INTERNET_NO_CALLBACK,
506     ERROR_INTERNET_REQUEST_PENDING,
507     ERROR_INTERNET_INCORRECT_FORMAT,
508     ERROR_INTERNET_ITEM_NOT_FOUND,
509     ERROR_INTERNET_CANNOT_CONNECT,
510     ERROR_INTERNET_CONNECTION_ABORTED,
511     ERROR_INTERNET_CONNECTION_RESET,
512     ERROR_INTERNET_FORCE_RETRY,
513     ERROR_INTERNET_INVALID_PROXY_REQUEST,
514     ERROR_INTERNET_NEED_UI,                // = INTERNET_ERROR_BASE +  34
515     ERROR_INTERNET_HANDLE_EXISTS              = INTERNET_ERROR_BASE +  36,
516     ERROR_INTERNET_SEC_CERT_DATE_INVALID,
517     ERROR_INTERNET_SEC_CERT_CN_INVALID,
518     ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR,
519     ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR,
520     ERROR_INTERNET_MIXED_SECURITY,
521     ERROR_INTERNET_CHG_POST_IS_NON_SECURE,
522     ERROR_INTERNET_POST_IS_NON_SECURE,
523     ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED,
524     ERROR_INTERNET_INVALID_CA,
525     ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP,
526     ERROR_INTERNET_ASYNC_THREAD_FAILED,
527     ERROR_INTERNET_REDIRECT_SCHEME_CHANGE, // = INTERNET_ERROR_BASE +  48
528 
529     ERROR_FTP_TRANSFER_IN_PROGRESS            = INTERNET_ERROR_BASE + 110,
530     ERROR_FTP_DROPPED,                     // = INTERNET_ERROR_BASE + 111
531     ERROR_GOPHER_PROTOCOL_ERROR               = INTERNET_ERROR_BASE + 130,
532     ERROR_GOPHER_NOT_FILE,
533     ERROR_GOPHER_DATA_ERROR,
534     ERROR_GOPHER_END_OF_DATA,
535     ERROR_GOPHER_INVALID_LOCATOR,
536     ERROR_GOPHER_INCORRECT_LOCATOR_TYPE,
537     ERROR_GOPHER_NOT_GOPHER_PLUS,
538     ERROR_GOPHER_ATTRIBUTE_NOT_FOUND,
539     ERROR_GOPHER_UNKNOWN_LOCATOR,          // = INTERNET_ERROR_BASE + 138,
540     ERROR_HTTP_HEADER_NOT_FOUND               = INTERNET_ERROR_BASE + 150,
541     ERROR_HTTP_DOWNLEVEL_SERVER,
542     ERROR_HTTP_INVALID_SERVER_RESPONSE,
543     ERROR_HTTP_INVALID_HEADER,
544     ERROR_HTTP_INVALID_QUERY_REQUEST,
545     ERROR_HTTP_HEADER_ALREADY_EXISTS,
546     ERROR_HTTP_REDIRECT_FAILED,
547     ERROR_INTERNET_SECURITY_CHANNEL_ERROR,
548     ERROR_INTERNET_UNABLE_TO_CACHE_FILE,
549     ERROR_INTERNET_TCPIP_NOT_INSTALLED,
550     ERROR_HTTP_NOT_REDIRECTED,             // = INTERNET_ERROR_BASE + 160
551     // why?
552     INTERNET_ERROR_LAST                  = ERROR_INTERNET_TCPIP_NOT_INSTALLED
553 }
554 
555 
556 enum NORMAL_CACHE_ENTRY     = 0x000001;
557 enum STABLE_CACHE_ENTRY     = 0x000002;
558 enum STICKY_CACHE_ENTRY     = 0x000004;
559 enum SPARSE_CACHE_ENTRY     = 0x010000;
560 enum OCX_CACHE_ENTRY        = 0x020000;
561 enum COOKIE_CACHE_ENTRY     = 0x100000;
562 enum URLHISTORY_CACHE_ENTRY = 0x200000;
563 
564 enum CACHE_ENTRY_ATTRIBUTE_FC  = 0x0004;
565 enum CACHE_ENTRY_HITRATE_FC    = 0x0010;
566 enum CACHE_ENTRY_MODTIME_FC    = 0x0040;
567 enum CACHE_ENTRY_EXPTIME_FC    = 0x0080;
568 enum CACHE_ENTRY_ACCTIME_FC    = 0x0100;
569 enum CACHE_ENTRY_SYNCTIME_FC   = 0x0200;
570 enum CACHE_ENTRY_HEADERINFO_FC = 0x0400;
571 
572 enum {
573     WININET_API_FLAG_ASYNC       = 1,
574     WININET_API_FLAG_SYNC        = 4,
575     WININET_API_FLAG_USE_CONTEXT = 8
576 }
577 
578 // FIXME: how should these really be grouped?
579 enum {
580     IRF_ASYNC       = WININET_API_FLAG_ASYNC,
581     IRF_SYNC        = WININET_API_FLAG_SYNC,
582     IRF_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT,
583 }
584 enum IRF_NO_WAIT = 8;
585 
586 enum {
587     HSR_ASYNC = WININET_API_FLAG_ASYNC,
588     HSR_SYNC = WININET_API_FLAG_SYNC,
589     HSR_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT,
590 }
591 
592 enum HSR_INITIATE =  8;
593 enum HSR_DOWNLOAD = 16;
594 enum HSR_CHUNKED  = 32;
595 
596 enum INTERNET_DIAL_UNATTENDED              = 0x8000;
597 enum INTERNET_DIALSTATE_DISCONNECTED       = 1;
598 enum INTERENT_GOONLINE_REFRESH             = 1;
599 enum INTERENT_GOONLINE_MASK                = 1;
600 enum INTERNET_AUTODIAL_FORCE_ONLINE        = 1;
601 enum INTERNET_AUTODIAL_FORCE_UNATTENDED    = 2;
602 enum INTERNET_AUTODIAL_FAILIFSECURITYCHECK = 4;
603 enum INTERNET_CONNECTION_MODEM             = 0x01;
604 enum INTERNET_CONNECTION_LAN               = 0x02;
605 enum INTERNET_CONNECTION_PROXY             = 0x04;
606 enum INTERNET_CONNECTION_MODEM_BUSY        = 0x08;
607 enum INTERNET_RAS_INSTALLED                = 0x10;
608 enum INTERNET_CONNECTION_OFFLINE           = 0x20;
609 enum INTERNET_CONNECTION_CONFIGURED        = 0x40;
610 
611 enum {
612     CACHEGROUP_SEARCH_ALL   = 0,
613     CACHEGROUP_SEARCH_BYURL = 1
614 }
615 
616 enum {
617     INTERNET_CACHE_GROUP_ADD    = 0,
618     INTERNET_CACHE_GROUP_REMOVE = 1
619 }
620 
621 mixin DECLARE_HANDLE!("HINTERNET"); // doesn't work - bug
622 /*struct HINTERNET {
623     HANDLE h;
624     alias h this;
625 }*/
626 alias HINTERNET* LPHINTERNET;
627 
628 alias LONGLONG GROUPID;
629 alias WORD INTERNET_PORT;
630 alias WORD* LPINTERNET_PORT;
631 
632 enum INTERNET_SCHEME {
633     INTERNET_SCHEME_PARTIAL = -2,
634     INTERNET_SCHEME_UNKNOWN,
635     INTERNET_SCHEME_DEFAULT,
636     INTERNET_SCHEME_FTP,
637     INTERNET_SCHEME_GOPHER,
638     INTERNET_SCHEME_HTTP,
639     INTERNET_SCHEME_HTTPS,
640     INTERNET_SCHEME_FILE,
641     INTERNET_SCHEME_NEWS,
642     INTERNET_SCHEME_MAILTO,
643     INTERNET_SCHEME_SOCKS,
644     INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,
645     INTERNET_SCHEME_LAST = INTERNET_SCHEME_SOCKS
646 }
647 alias INTERNET_SCHEME* LPINTERNET_SCHEME;
648 
649 struct INTERNET_ASYNC_RESULT {
650     DWORD_PTR dwResult;
651     DWORD dwError;
652 }
653 alias INTERNET_ASYNC_RESULT* LPINTERNET_ASYNC_RESULT;
654 
655 struct INTERNET_PREFETCH_STATUS {
656     DWORD dwStatus;
657     DWORD dwSize;
658 }
659 alias INTERNET_PREFETCH_STATUS* LPINTERNET_PREFETCH_STATUS;
660 
661 struct INTERNET_PROXY_INFO {
662     DWORD dwAccessType;
663     LPCTSTR lpszProxy;
664     LPCTSTR lpszProxyBypass;
665 }
666 alias INTERNET_PROXY_INFO* LPINTERNET_PROXY_INFO;
667 
668 struct INTERNET_VERSION_INFO {
669     DWORD dwMajorVersion;
670     DWORD dwMinorVersion;
671 }
672 alias INTERNET_VERSION_INFO* LPINTERNET_VERSION_INFO;
673 
674 struct URL_COMPONENTSA {
675     DWORD           dwStructSize = URL_COMPONENTSA.sizeof;
676     LPSTR           lpszScheme;
677     DWORD           dwSchemeLength;
678     INTERNET_SCHEME nScheme;
679     LPSTR           lpszHostName;
680     DWORD           dwHostNameLength;
681     INTERNET_PORT   nPort;
682     LPSTR           lpszUserName;
683     DWORD           dwUserNameLength;
684     LPSTR           lpszPassword;
685     DWORD           dwPasswordLength;
686     LPSTR           lpszUrlPath;
687     DWORD           dwUrlPathLength;
688     LPSTR           lpszExtraInfo;
689     DWORD           dwExtraInfoLength;
690 }
691 alias URL_COMPONENTSA* LPURL_COMPONENTSA;
692 
693 struct URL_COMPONENTSW {
694     DWORD  dwStructSize = URL_COMPONENTSW.sizeof;
695     LPWSTR lpszScheme;
696     DWORD  dwSchemeLength;
697     INTERNET_SCHEME nScheme;
698     LPWSTR lpszHostName;
699     DWORD  dwHostNameLength;
700     INTERNET_PORT nPort;
701     LPWSTR lpszUserName;
702     DWORD  dwUserNameLength;
703     LPWSTR lpszPassword;
704     DWORD  dwPasswordLength;
705     LPWSTR lpszUrlPath;
706     DWORD  dwUrlPathLength;
707     LPWSTR lpszExtraInfo;
708     DWORD  dwExtraInfoLength;
709 }
710 alias URL_COMPONENTSW* LPURL_COMPONENTSW;
711 
712 struct INTERNET_CERTIFICATE_INFO {
713     FILETIME ftExpiry;
714     FILETIME ftStart;
715     LPTSTR   lpszSubjectInfo;
716     LPTSTR   lpszIssuerInfo;
717     LPTSTR   lpszProtocolName;
718     LPTSTR   lpszSignatureAlgName;
719     LPTSTR   lpszEncryptionAlgName;
720     DWORD    dwKeySize;
721 }
722 alias INTERNET_CERTIFICATE_INFO* LPINTERNET_CERTIFICATE_INFO;
723 
724 extern (Windows) alias void function(HINTERNET, DWORD_PTR, DWORD, PVOID, DWORD)
725   INTERNET_STATUS_CALLBACK;
726 alias INTERNET_STATUS_CALLBACK* LPINTERNET_STATUS_CALLBACK;
727 
728 enum INTERNET_INVALID_STATUS_CALLBACK
729   = cast(INTERNET_STATUS_CALLBACK) -1;
730 
731 struct GOPHER_FIND_DATAA {
732     CHAR[MAX_GOPHER_DISPLAY_TEXT+1] DisplayString = 0;
733     DWORD    GopherType;
734     DWORD    SizeLow;
735     DWORD    SizeHigh;
736     FILETIME LastModificationTime;
737     CHAR[MAX_GOPHER_LOCATOR_LENGTH+1] Locator = 0;
738 }
739 alias GOPHER_FIND_DATAA* LPGOPHER_FIND_DATAA;
740 
741 struct GOPHER_FIND_DATAW {
742     WCHAR[MAX_GOPHER_DISPLAY_TEXT+1] DisplayString = 0;
743     DWORD    GopherType;
744     DWORD    SizeLow;
745     DWORD    SizeHigh;
746     FILETIME LastModificationTime;
747     WCHAR[MAX_GOPHER_LOCATOR_LENGTH+1] Locator = 0;
748 }
749 alias GOPHER_FIND_DATAW* LPGOPHER_FIND_DATAW;
750 
751 struct GOPHER_ADMIN_ATTRIBUTE_TYPE {
752     LPCTSTR Comment;
753     LPCTSTR EmailAddress;
754 }
755 alias GOPHER_ADMIN_ATTRIBUTE_TYPE* LPGOPHER_ADMIN_ATTRIBUTE_TYPE;
756 
757 struct GOPHER_MOD_DATE_ATTRIBUTE_TYPE {
758     FILETIME DateAndTime;
759 }
760 alias GOPHER_MOD_DATE_ATTRIBUTE_TYPE* LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE;
761 
762 struct GOPHER_TTL_ATTRIBUTE_TYPE {
763     DWORD Ttl;
764 }
765 alias GOPHER_TTL_ATTRIBUTE_TYPE* LPGOPHER_TTL_ATTRIBUTE_TYPE;
766 
767 struct GOPHER_SCORE_ATTRIBUTE_TYPE {
768     INT Score;
769 }
770 alias GOPHER_SCORE_ATTRIBUTE_TYPE* LPGOPHER_SCORE_ATTRIBUTE_TYPE;
771 
772 struct GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE {
773     INT LowerBound;
774     INT UpperBound;
775 }
776 alias GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE* LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
777 
778 struct GOPHER_SITE_ATTRIBUTE_TYPE {
779     LPCTSTR Site;
780 }
781 alias GOPHER_SITE_ATTRIBUTE_TYPE* LPGOPHER_SITE_ATTRIBUTE_TYPE;
782 
783 struct GOPHER_ORGANIZATION_ATTRIBUTE_TYPE {
784     LPCTSTR Organization;
785 }
786 alias GOPHER_ORGANIZATION_ATTRIBUTE_TYPE* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
787 
788 struct GOPHER_LOCATION_ATTRIBUTE_TYPE {
789     LPCTSTR Location;
790 }
791 alias GOPHER_LOCATION_ATTRIBUTE_TYPE* LPGOPHER_LOCATION_ATTRIBUTE_TYPE;
792 
793 struct GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE {
794     INT DegreesNorth;
795     INT MinutesNorth;
796     INT SecondsNorth;
797     INT DegreesEast;
798     INT MinutesEast;
799     INT SecondsEast;
800 }
801 alias GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE*
802   LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
803 
804 struct GOPHER_TIMEZONE_ATTRIBUTE_TYPE {
805     INT Zone;
806 }
807 alias GOPHER_TIMEZONE_ATTRIBUTE_TYPE* LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE;
808 
809 struct GOPHER_PROVIDER_ATTRIBUTE_TYPE {
810     LPCTSTR Provider;
811 }
812 alias GOPHER_PROVIDER_ATTRIBUTE_TYPE* LPGOPHER_PROVIDER_ATTRIBUTE_TYPE;
813 
814 struct GOPHER_VERSION_ATTRIBUTE_TYPE {
815     LPCTSTR Version;
816 }
817 alias GOPHER_VERSION_ATTRIBUTE_TYPE* LPGOPHER_VERSION_ATTRIBUTE_TYPE;
818 
819 struct GOPHER_ABSTRACT_ATTRIBUTE_TYPE {
820     LPCTSTR ShortAbstract;
821     LPCTSTR AbstractFile;
822 }
823 alias GOPHER_ABSTRACT_ATTRIBUTE_TYPE* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE;
824 
825 struct GOPHER_VIEW_ATTRIBUTE_TYPE {
826     LPCTSTR ContentType;
827     LPCTSTR Language;
828     DWORD   Size;
829 }
830 alias GOPHER_VIEW_ATTRIBUTE_TYPE* LPGOPHER_VIEW_ATTRIBUTE_TYPE;
831 
832 struct GOPHER_VERONICA_ATTRIBUTE_TYPE {
833     BOOL TreeWalk;
834 }
835 alias GOPHER_VERONICA_ATTRIBUTE_TYPE* LPGOPHER_VERONICA_ATTRIBUTE_TYPE;
836 
837 struct GOPHER_ASK_ATTRIBUTE_TYPE {
838     LPCTSTR QuestionType;
839     LPCTSTR QuestionText;
840 }
841 alias GOPHER_ASK_ATTRIBUTE_TYPE* LPGOPHER_ASK_ATTRIBUTE_TYPE;
842 
843 struct GOPHER_UNKNOWN_ATTRIBUTE_TYPE {
844     LPCTSTR Text;
845 }
846 alias GOPHER_UNKNOWN_ATTRIBUTE_TYPE* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE;
847 
848 struct GOPHER_ATTRIBUTE_TYPE {
849     DWORD CategoryId;
850     DWORD AttributeId;
851     union {
852         GOPHER_ADMIN_ATTRIBUTE_TYPE                 Admin;
853         GOPHER_MOD_DATE_ATTRIBUTE_TYPE              ModDate;
854         GOPHER_TTL_ATTRIBUTE_TYPE                   Ttl;
855         GOPHER_SCORE_ATTRIBUTE_TYPE                 Score;
856         GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE           ScoreRange;
857         GOPHER_SITE_ATTRIBUTE_TYPE                  Site;
858         GOPHER_ORGANIZATION_ATTRIBUTE_TYPE          Organization;
859         GOPHER_LOCATION_ATTRIBUTE_TYPE              Location;
860         GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;
861         GOPHER_TIMEZONE_ATTRIBUTE_TYPE              TimeZone;
862         GOPHER_PROVIDER_ATTRIBUTE_TYPE              Provider;
863         GOPHER_VERSION_ATTRIBUTE_TYPE               Version;
864         GOPHER_ABSTRACT_ATTRIBUTE_TYPE              Abstract;
865         GOPHER_VIEW_ATTRIBUTE_TYPE                  View;
866         GOPHER_VERONICA_ATTRIBUTE_TYPE              Veronica;
867         GOPHER_ASK_ATTRIBUTE_TYPE                   Ask;
868         GOPHER_UNKNOWN_ATTRIBUTE_TYPE               Unknown;
869     } /+AttributeType;+/
870 }
871 alias GOPHER_ATTRIBUTE_TYPE* LPGOPHER_ATTRIBUTE_TYPE;
872 
873 extern (Windows)
874 alias BOOL function(LPGOPHER_ATTRIBUTE_TYPE, DWORD)
875   GOPHER_ATTRIBUTE_ENUMERATOR;
876 
877 struct INTERNET_CACHE_ENTRY_INFOA {
878     DWORD    dwStructSize = INTERNET_CACHE_ENTRY_INFOA.sizeof;
879     LPSTR    lpszSourceUrlName;
880     LPSTR    lpszLocalFileName;
881     DWORD    CacheEntryType;
882     DWORD    dwUseCount;
883     DWORD    dwHitRate;
884     DWORD    dwSizeLow;
885     DWORD    dwSizeHigh;
886     FILETIME LastModifiedTime;
887     FILETIME ExpireTime;
888     FILETIME LastAccessTime;
889     FILETIME LastSyncTime;
890     PBYTE    lpHeaderInfo;
891     DWORD    dwHeaderInfoSize;
892     LPSTR    lpszFileExtension;
893     DWORD    dwReserved;
894 }
895 alias INTERNET_CACHE_ENTRY_INFOA* LPINTERNET_CACHE_ENTRY_INFOA;
896 
897 struct INTERNET_CACHE_ENTRY_INFOW {
898     DWORD    dwStructSize = INTERNET_CACHE_ENTRY_INFOW.sizeof;
899     LPWSTR   lpszSourceUrlName;
900     LPWSTR   lpszLocalFileName;
901     DWORD    CacheEntryType;
902     DWORD    dwUseCount;
903     DWORD    dwHitRate;
904     DWORD    dwSizeLow;
905     DWORD    dwSizeHigh;
906     FILETIME LastModifiedTime;
907     FILETIME ExpireTime;
908     FILETIME LastAccessTime;
909     FILETIME LastSyncTime;
910     PBYTE    lpHeaderInfo;
911     DWORD    dwHeaderInfoSize;
912     LPWSTR   lpszFileExtension;
913     DWORD    dwReserved;
914 }
915 alias INTERNET_CACHE_ENTRY_INFOW* LPINTERNET_CACHE_ENTRY_INFOW;
916 
917 struct INTERNET_BUFFERSA {
918     DWORD              dwStructSize = INTERNET_BUFFERSA.sizeof;
919     INTERNET_BUFFERSA* Next;
920     LPCSTR             lpcszHeader;
921     DWORD              dwHeadersLength;
922     DWORD              dwHeadersTotal;
923     LPVOID             lpvBuffer;
924     DWORD              dwBufferLength;
925     DWORD              dwBufferTotal;
926     DWORD              dwOffsetLow;
927     DWORD              dwOffsetHigh;
928 }
929 alias INTERNET_BUFFERSA* LPINTERNET_BUFFERSA;
930 
931 struct INTERNET_BUFFERSW {
932     DWORD              dwStructSize = INTERNET_BUFFERSW.sizeof;
933     INTERNET_BUFFERSW* Next;
934     LPCWSTR            lpcszHeader;
935     DWORD              dwHeadersLength;
936     DWORD              dwHeadersTotal;
937     LPVOID             lpvBuffer;
938     DWORD              dwBufferLength;
939     DWORD              dwBufferTotal;
940     DWORD              dwOffsetLow;
941     DWORD              dwOffsetHigh;
942 }
943 alias INTERNET_BUFFERSW* LPINTERNET_BUFFERSW;
944 
945 enum size_t
946     GROUP_OWNER_STORAGE_SIZE =   4,
947     GROUPNAME_MAX_LENGTH     = 120;
948 
949 struct INTERNET_CACHE_GROUP_INFOA {
950     DWORD dwGroupSize;
951     DWORD dwGroupFlags;
952     DWORD dwGroupType;
953     DWORD dwDiskUsage;
954     DWORD dwDiskQuota;
955     DWORD[GROUP_OWNER_STORAGE_SIZE] dwOwnerStorage;
956     CHAR[GROUPNAME_MAX_LENGTH]      szGroupName = 0;
957 }
958 alias INTERNET_CACHE_GROUP_INFOA* LPINTERNET_CACHE_GROUP_INFOA;
959 
960 struct INTERNET_CACHE_GROUP_INFOW {
961     DWORD dwGroupSize;
962     DWORD dwGroupFlags;
963     DWORD dwGroupType;
964     DWORD dwDiskUsage;
965     DWORD dwDiskQuota;
966     DWORD[GROUP_OWNER_STORAGE_SIZE] dwOwnerStorage;
967     WCHAR[GROUPNAME_MAX_LENGTH]     szGroupName = 0;
968 }
969 alias INTERNET_CACHE_GROUP_INFOW* LPINTERNET_CACHE_GROUP_INFOW;
970 
971 extern (Windows) {
972     BOOL InternetTimeFromSystemTime(SYSTEMTIME*, DWORD, LPSTR, DWORD);
973     BOOL InternetTimeToSystemTime(LPCSTR, SYSTEMTIME*, DWORD);
974     BOOL InternetDebugGetLocalTime(SYSTEMTIME*, PDWORD);
975     BOOL InternetCrackUrlA(LPCSTR, DWORD, DWORD, LPURL_COMPONENTSA);
976     BOOL InternetCrackUrlW(LPCWSTR, DWORD, DWORD, LPURL_COMPONENTSW);
977     BOOL InternetCreateUrlA(LPURL_COMPONENTSA, DWORD, LPSTR, PDWORD);
978     BOOL InternetCreateUrlW(LPURL_COMPONENTSW, DWORD, LPWSTR, PDWORD);
979     BOOL InternetCanonicalizeUrlA(LPCSTR, LPSTR, PDWORD, DWORD);
980     BOOL InternetCanonicalizeUrlW(LPCWSTR, LPWSTR, PDWORD, DWORD);
981     BOOL InternetCheckConnectionA(LPCSTR, DWORD, DWORD);
982     BOOL InternetCheckConnectionW(LPCWSTR, DWORD, DWORD);
983     BOOL InternetCombineUrlA(LPCSTR, LPCSTR, LPSTR, PDWORD, DWORD);
984     BOOL InternetCombineUrlW(LPCWSTR, LPCWSTR, LPWSTR, PDWORD, DWORD);
985     HINTERNET InternetOpenA(LPCSTR, DWORD, LPCSTR, LPCSTR, DWORD);
986     HINTERNET InternetOpenW(LPCWSTR, DWORD, LPCWSTR, LPCWSTR, DWORD);
987     BOOL InternetCloseHandle(HINTERNET);
988     HINTERNET InternetConnectA(HINTERNET, LPCSTR, INTERNET_PORT, LPCSTR,
989       LPCSTR, DWORD, DWORD, DWORD_PTR);
990     HINTERNET InternetConnectW(HINTERNET, LPCWSTR, INTERNET_PORT, LPCWSTR,
991       LPCWSTR, DWORD, DWORD, DWORD_PTR);
992     HINTERNET InternetOpenUrlA(HINTERNET, LPCSTR, LPCSTR, DWORD, DWORD,
993       DWORD_PTR);
994     HINTERNET InternetOpenUrlW(HINTERNET, LPCWSTR, LPCWSTR, DWORD, DWORD,
995       DWORD_PTR);
996     BOOL InternetReadFile(HINTERNET, PVOID, DWORD, PDWORD);
997     DWORD InternetSetFilePointer(HINTERNET, LONG, PVOID, DWORD, DWORD_PTR);
998     BOOL InternetWriteFile(HINTERNET, LPCVOID, DWORD, PDWORD);
999     BOOL InternetQueryDataAvailable(HINTERNET, PDWORD, DWORD, DWORD_PTR);
1000     BOOL InternetFindNextFileA(HINTERNET, PVOID);
1001     BOOL InternetFindNextFileW(HINTERNET, PVOID);
1002     BOOL InternetQueryOptionA(HINTERNET, DWORD, PVOID, PDWORD);
1003     BOOL InternetQueryOptionW(HINTERNET, DWORD, PVOID, PDWORD);
1004     BOOL InternetSetOptionA(HINTERNET, DWORD, PVOID, DWORD);
1005     BOOL InternetSetOptionW(HINTERNET, DWORD, PVOID, DWORD);
1006     BOOL InternetSetOptionExA(HINTERNET, DWORD, PVOID, DWORD, DWORD);
1007     BOOL InternetSetOptionExW(HINTERNET, DWORD, PVOID, DWORD, DWORD);
1008     BOOL InternetGetLastResponseInfoA(PDWORD, LPSTR, PDWORD);
1009     BOOL InternetGetLastResponseInfoW(PDWORD, LPWSTR, PDWORD);
1010     INTERNET_STATUS_CALLBACK InternetSetStatusCallback(HINTERNET,
1011       INTERNET_STATUS_CALLBACK);
1012     DWORD FtpGetFileSize(HINTERNET, LPDWORD);
1013     HINTERNET FtpFindFirstFileA(HINTERNET, LPCSTR, LPWIN32_FIND_DATAA, DWORD,
1014       DWORD_PTR);
1015     HINTERNET FtpFindFirstFileW(HINTERNET, LPCWSTR, LPWIN32_FIND_DATAW, DWORD,
1016       DWORD_PTR);
1017     BOOL FtpGetFileA(HINTERNET, LPCSTR, LPCSTR, BOOL, DWORD, DWORD, DWORD_PTR);
1018     BOOL FtpGetFileW(HINTERNET, LPCWSTR, LPCWSTR, BOOL, DWORD, DWORD, DWORD_PTR);
1019     BOOL FtpPutFileA(HINTERNET, LPCSTR, LPCSTR, DWORD, DWORD_PTR);
1020     BOOL FtpPutFileW(HINTERNET, LPCWSTR, LPCWSTR, DWORD, DWORD_PTR);
1021     BOOL FtpDeleteFileA(HINTERNET, LPCSTR);
1022     BOOL FtpDeleteFileW(HINTERNET, LPCWSTR);
1023     BOOL FtpRenameFileA(HINTERNET, LPCSTR, LPCSTR);
1024     BOOL FtpRenameFileW(HINTERNET, LPCWSTR, LPCWSTR);
1025     HINTERNET FtpOpenFileA(HINTERNET, LPCSTR, DWORD, DWORD, DWORD_PTR);
1026     HINTERNET FtpOpenFileW(HINTERNET, LPCWSTR, DWORD, DWORD, DWORD_PTR);
1027     BOOL FtpCreateDirectoryA(HINTERNET, LPCSTR);
1028     BOOL FtpCreateDirectoryW(HINTERNET, LPCWSTR);
1029     BOOL FtpRemoveDirectoryA(HINTERNET, LPCSTR);
1030     BOOL FtpRemoveDirectoryW(HINTERNET, LPCWSTR);
1031     BOOL FtpSetCurrentDirectoryA(HINTERNET, LPCSTR);
1032     BOOL FtpSetCurrentDirectoryW(HINTERNET, LPCWSTR);
1033     BOOL FtpGetCurrentDirectoryA(HINTERNET, LPSTR, PDWORD);
1034     BOOL FtpGetCurrentDirectoryW(HINTERNET, LPWSTR, PDWORD);
1035     BOOL FtpCommandA(HINTERNET, BOOL, DWORD, LPCSTR, DWORD_PTR, HINTERNET*);
1036     BOOL FtpCommandW(HINTERNET, BOOL, DWORD, LPCWSTR, DWORD_PTR, HINTERNET*);
1037     BOOL GopherCreateLocatorA(LPCSTR, INTERNET_PORT, LPCSTR, LPCSTR, DWORD,
1038       LPSTR, PDWORD);
1039     BOOL GopherCreateLocatorW(LPCWSTR, INTERNET_PORT, LPCWSTR, LPCWSTR, DWORD,
1040       LPWSTR, PDWORD);
1041     BOOL GopherGetLocatorTypeA(LPCSTR, PDWORD);
1042     BOOL GopherGetLocatorTypeW(LPCWSTR, PDWORD);
1043     HINTERNET GopherFindFirstFileA(HINTERNET, LPCSTR, LPCSTR,
1044       LPGOPHER_FIND_DATAA, DWORD, DWORD_PTR);
1045     HINTERNET GopherFindFirstFileW(HINTERNET, LPCWSTR, LPCWSTR,
1046       LPGOPHER_FIND_DATAW, DWORD, DWORD_PTR);
1047     HINTERNET GopherOpenFileA(HINTERNET, LPCSTR, LPCSTR, DWORD, DWORD_PTR);
1048     HINTERNET GopherOpenFileW(HINTERNET, LPCWSTR, LPCWSTR, DWORD, DWORD_PTR);
1049     BOOL GopherGetAttributeA(HINTERNET, LPCSTR, LPCSTR, LPBYTE, DWORD,
1050       PDWORD, GOPHER_ATTRIBUTE_ENUMERATOR, DWORD_PTR);
1051     BOOL GopherGetAttributeW(HINTERNET, LPCWSTR, LPCWSTR, LPBYTE, DWORD,
1052       PDWORD, GOPHER_ATTRIBUTE_ENUMERATOR, DWORD_PTR);
1053     HINTERNET HttpOpenRequestA(HINTERNET, LPCSTR, LPCSTR, LPCSTR, LPCSTR,
1054       LPCSTR*, DWORD, DWORD_PTR);
1055     HINTERNET HttpOpenRequestW(HINTERNET, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR,
1056       LPCWSTR*, DWORD, DWORD_PTR);
1057     BOOL HttpAddRequestHeadersA(HINTERNET, LPCSTR, DWORD, DWORD);
1058     BOOL HttpAddRequestHeadersW(HINTERNET, LPCWSTR, DWORD, DWORD);
1059     BOOL HttpSendRequestA(HINTERNET, LPCSTR, DWORD, PVOID, DWORD);
1060     BOOL HttpSendRequestW(HINTERNET, LPCWSTR, DWORD, PVOID, DWORD);
1061     BOOL HttpQueryInfoA(HINTERNET, DWORD, PVOID, PDWORD, PDWORD);
1062     BOOL HttpQueryInfoW(HINTERNET, DWORD, PVOID, PDWORD, PDWORD);
1063     BOOL InternetSetCookieA(LPCSTR, LPCSTR, LPCSTR);
1064     BOOL InternetSetCookieW(LPCWSTR, LPCWSTR, LPCWSTR);
1065     BOOL InternetGetCookieA(LPCSTR, LPCSTR, LPSTR, PDWORD);
1066     BOOL InternetGetCookieW(LPCWSTR, LPCWSTR, LPWSTR, PDWORD);
1067     DWORD InternetAttemptConnect(DWORD);
1068     DWORD InternetErrorDlg(HWND, HINTERNET, DWORD, DWORD, PVOID*);
1069     DWORD InternetConfirmZoneCrossing(HWND, LPSTR, LPSTR, BOOL);
1070     BOOL CreateUrlCacheEntryA(LPCSTR, DWORD, LPCSTR, LPSTR, DWORD);
1071     BOOL CreateUrlCacheEntryW(LPCWSTR, DWORD, LPCWSTR, LPWSTR, DWORD);
1072     BOOL CommitUrlCacheEntryA(LPCSTR, LPCSTR, FILETIME, FILETIME, DWORD,
1073       LPBYTE, DWORD, LPCSTR, DWORD);
1074     BOOL CommitUrlCacheEntryW(LPCWSTR, LPCWSTR, FILETIME, FILETIME, DWORD,
1075       LPBYTE, DWORD, LPCWSTR, DWORD);
1076     BOOL RetrieveUrlCacheEntryFileA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA,
1077       PDWORD, DWORD);
1078     BOOL RetrieveUrlCacheEntryFileW(LPCWSTR, LPINTERNET_CACHE_ENTRY_INFOW,
1079       PDWORD, DWORD);
1080     BOOL UnlockUrlCacheEntryFile(LPCSTR, DWORD);
1081     HANDLE RetrieveUrlCacheEntryStreamA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA,
1082       PDWORD, BOOL, DWORD);
1083     HANDLE RetrieveUrlCacheEntryStreamW(LPCWSTR, LPINTERNET_CACHE_ENTRY_INFOW,
1084       PDWORD, BOOL, DWORD);
1085     BOOL ReadUrlCacheEntryStream(HANDLE, DWORD, PVOID, PDWORD, DWORD);
1086     BOOL UnlockUrlCacheEntryStream(HANDLE, DWORD);
1087     BOOL GetUrlCacheEntryInfoA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA, PDWORD);
1088     BOOL GetUrlCacheEntryInfoW(LPCWSTR, LPINTERNET_CACHE_ENTRY_INFOW, PDWORD);
1089     BOOL SetUrlCacheEntryInfoA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA, DWORD);
1090     BOOL SetUrlCacheEntryInfoW(LPCWSTR, LPINTERNET_CACHE_ENTRY_INFOW, DWORD);
1091     HANDLE FindFirstUrlCacheEntryA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA,
1092       PDWORD);
1093     HANDLE FindFirstUrlCacheEntryW(LPCWSTR, LPINTERNET_CACHE_ENTRY_INFOW,
1094       PDWORD);
1095     BOOL FindNextUrlCacheEntryA(HANDLE, LPINTERNET_CACHE_ENTRY_INFOA, PDWORD);
1096     BOOL FindNextUrlCacheEntryW(HANDLE, LPINTERNET_CACHE_ENTRY_INFOW, PDWORD);
1097     BOOL FindCloseUrlCache(HANDLE);
1098     BOOL DeleteUrlCacheEntry(LPCSTR);
1099     DWORD AuthenticateUser(PVOID*, LPSTR, LPSTR, DWORD, LPSTR, DWORD, LPSTR,
1100       LPSTR);
1101     BOOL HttpSendRequestExA(HINTERNET, LPINTERNET_BUFFERSA,
1102       LPINTERNET_BUFFERSA, DWORD, DWORD_PTR);
1103     BOOL HttpSendRequestExW(HINTERNET, LPINTERNET_BUFFERSW,
1104       LPINTERNET_BUFFERSW, DWORD, DWORD_PTR);
1105     BOOL HttpEndRequestA(HINTERNET, LPINTERNET_BUFFERSA, DWORD, DWORD_PTR);
1106     BOOL HttpEndRequestW(HINTERNET, LPINTERNET_BUFFERSW, DWORD, DWORD_PTR);
1107     DWORD InternetDial(HWND, LPTSTR, DWORD, LPDWORD, DWORD);
1108     DWORD InternetHangUp(DWORD_PTR, DWORD);
1109     BOOL InternetGoOnline(LPTSTR, HWND, DWORD);
1110     BOOL InternetAutodial(DWORD, DWORD);
1111     BOOL InternetAutodialHangup(DWORD);
1112     BOOL InternetGetConnectedState(LPDWORD, DWORD);
1113     BOOL InternetSetDialState(LPCTSTR, DWORD, DWORD);
1114     BOOL InternetReadFileExA(HINTERNET, LPINTERNET_BUFFERSA, DWORD, DWORD_PTR);
1115     BOOL InternetReadFileExW(HINTERNET, LPINTERNET_BUFFERSW, DWORD, DWORD_PTR);
1116     GROUPID CreateUrlCacheGroup(DWORD, LPVOID);
1117     BOOL DeleteUrlCacheGroup(GROUPID, DWORD, LPVOID);
1118     HANDLE FindFirstUrlCacheGroup(DWORD, DWORD, LPVOID, DWORD, GROUPID*,
1119       LPVOID);
1120     BOOL FindNextUrlCacheGroup(HANDLE, GROUPID*, LPVOID);
1121     BOOL GetUrlCacheGroupAttributeA(GROUPID, DWORD, DWORD,
1122       LPINTERNET_CACHE_GROUP_INFOA, LPDWORD, LPVOID);
1123     BOOL GetUrlCacheGroupAttributeW(GROUPID, DWORD, DWORD,
1124       LPINTERNET_CACHE_GROUP_INFOW, LPDWORD, LPVOID);
1125     BOOL SetUrlCacheGroupAttributeA(GROUPID, DWORD, DWORD,
1126       LPINTERNET_CACHE_GROUP_INFOA, LPVOID);
1127     BOOL SetUrlCacheGroupAttributeW(GROUPID, DWORD, DWORD,
1128       LPINTERNET_CACHE_GROUP_INFOW, LPVOID);
1129 }
1130 
1131 version (Unicode) {
1132     alias URL_COMPONENTSW URL_COMPONENTS;
1133     alias LPURL_COMPONENTSW LPURL_COMPONENTS;
1134     alias GOPHER_FIND_DATAW GOPHER_FIND_DATA;
1135     alias LPGOPHER_FIND_DATAW LPGOPHER_FIND_DATA;
1136     alias INTERNET_CACHE_ENTRY_INFOW INTERNET_CACHE_ENTRY_INFO;
1137     alias LPINTERNET_CACHE_ENTRY_INFOW LPINTERNET_CACHE_ENTRY_INFO;
1138     alias INTERNET_BUFFERSW INTERNET_BUFFERS;
1139     alias INTERNET_CACHE_GROUP_INFOW INTERNET_CACHE_GROUP_INFO;
1140     alias LPINTERNET_CACHE_GROUP_INFOW LPINTERNET_CACHE_GROUP_INFO;
1141     alias InternetCrackUrlW InternetCrackUrl;
1142     alias InternetCreateUrlW InternetCreateUrl;
1143     alias InternetCanonicalizeUrlW InternetCanonicalizeUrl;
1144     alias InternetCheckConnectionW InternetCheckConnection;
1145     alias InternetCombineUrlW InternetCombineUrl;
1146     alias InternetOpenW InternetOpen;
1147     alias InternetConnectW InternetConnect;
1148     alias InternetOpenUrlW InternetOpenUrl;
1149     alias InternetFindNextFileW InternetFindNextFile;
1150     alias InternetQueryOptionW InternetQueryOption;
1151     alias InternetSetOptionW InternetSetOption;
1152     alias InternetSetOptionExW InternetSetOptionEx;
1153     alias InternetGetLastResponseInfoW InternetGetLastResponseInfo;
1154     alias InternetReadFileExW InternetReadFileEx;
1155     alias FtpFindFirstFileW FtpFindFirstFile;
1156     alias FtpGetFileW FtpGetFile;
1157     alias FtpPutFileW FtpPutFile;
1158     alias FtpDeleteFileW FtpDeleteFile;
1159     alias FtpRenameFileW FtpRenameFile;
1160     alias FtpOpenFileW FtpOpenFile;
1161     alias FtpCreateDirectoryW FtpCreateDirectory;
1162     alias FtpRemoveDirectoryW FtpRemoveDirectory;
1163     alias FtpSetCurrentDirectoryW FtpSetCurrentDirectory;
1164     alias FtpGetCurrentDirectoryW FtpGetCurrentDirectory;
1165     alias FtpCommandW FtpCommand;
1166     alias GopherGetLocatorTypeW GopherGetLocatorType;
1167     alias GopherCreateLocatorW GopherCreateLocator;
1168     alias GopherFindFirstFileW GopherFindFirstFile;
1169     alias GopherOpenFileW GopherOpenFile;
1170     alias GopherGetAttributeW GopherGetAttribute;
1171     alias HttpSendRequestW HttpSendRequest;
1172     alias HttpOpenRequestW HttpOpenRequest;
1173     alias HttpAddRequestHeadersW HttpAddRequestHeaders;
1174     alias HttpQueryInfoW HttpQueryInfo;
1175     alias InternetSetCookieW InternetSetCookie;
1176     alias InternetGetCookieW InternetGetCookie;
1177     alias CreateUrlCacheEntryW CreateUrlCacheEntry;
1178     alias RetrieveUrlCacheEntryStreamW RetrieveUrlCacheEntryStream;
1179     alias FindNextUrlCacheEntryW FindNextUrlCacheEntry;
1180     alias CommitUrlCacheEntryW CommitUrlCacheEntry;
1181     alias GetUrlCacheEntryInfoW GetUrlCacheEntryInfo;
1182     alias SetUrlCacheEntryInfoW SetUrlCacheEntryInfo;
1183     alias FindFirstUrlCacheEntryW FindFirstUrlCacheEntry;
1184     alias RetrieveUrlCacheEntryFileW RetrieveUrlCacheEntryFile;
1185     alias HttpSendRequestExW HttpSendRequestEx;
1186     alias HttpEndRequestW HttpEndRequest;
1187     alias GetUrlCacheGroupAttributeW GetUrlCacheGroupAttribute;
1188     alias SetUrlCacheGroupAttributeW SetUrlCacheGroupAttribute;
1189 } else {
1190     alias URL_COMPONENTSA URL_COMPONENTS;
1191     alias LPURL_COMPONENTSA LPURL_COMPONENTS;
1192     alias GOPHER_FIND_DATAA GOPHER_FIND_DATA;
1193     alias LPGOPHER_FIND_DATAA LPGOPHER_FIND_DATA;
1194     alias INTERNET_CACHE_ENTRY_INFOA INTERNET_CACHE_ENTRY_INFO;
1195     alias LPINTERNET_CACHE_ENTRY_INFOA LPINTERNET_CACHE_ENTRY_INFO;
1196     alias INTERNET_BUFFERSA INTERNET_BUFFERS;
1197     alias INTERNET_CACHE_GROUP_INFOA INTERNET_CACHE_GROUP_INFO;
1198     alias LPINTERNET_CACHE_GROUP_INFOA LPINTERNET_CACHE_GROUP_INFO;
1199     alias GopherGetAttributeA GopherGetAttribute;
1200     alias InternetCrackUrlA InternetCrackUrl;
1201     alias InternetCreateUrlA InternetCreateUrl;
1202     alias InternetCanonicalizeUrlA InternetCanonicalizeUrl;
1203     alias InternetCheckConnectionA InternetCheckConnection;
1204     alias InternetCombineUrlA InternetCombineUrl;
1205     alias InternetOpenA InternetOpen;
1206     alias InternetConnectA InternetConnect;
1207     alias InternetOpenUrlA InternetOpenUrl;
1208     alias InternetFindNextFileA InternetFindNextFile;
1209     alias InternetQueryOptionA InternetQueryOption;
1210     alias InternetSetOptionA InternetSetOption;
1211     alias InternetSetOptionExA InternetSetOptionEx;
1212     alias InternetGetLastResponseInfoA InternetGetLastResponseInfo;
1213     alias InternetReadFileExA InternetReadFileEx;
1214     alias FtpFindFirstFileA FtpFindFirstFile;
1215     alias FtpGetFileA FtpGetFile;
1216     alias FtpPutFileA FtpPutFile;
1217     alias FtpDeleteFileA FtpDeleteFile;
1218     alias FtpRenameFileA FtpRenameFile;
1219     alias FtpOpenFileA FtpOpenFile;
1220     alias FtpCreateDirectoryA FtpCreateDirectory;
1221     alias FtpRemoveDirectoryA FtpRemoveDirectory;
1222     alias FtpSetCurrentDirectoryA FtpSetCurrentDirectory;
1223     alias FtpGetCurrentDirectoryA FtpGetCurrentDirectory;
1224     alias FtpCommandA FtpCommand;
1225     alias GopherGetLocatorTypeA GopherGetLocatorType;
1226     alias GopherCreateLocatorA GopherCreateLocator;
1227     alias GopherFindFirstFileA GopherFindFirstFile;
1228     alias GopherOpenFileA GopherOpenFile;
1229     alias HttpSendRequestA HttpSendRequest;
1230     alias HttpOpenRequestA HttpOpenRequest;
1231     alias HttpAddRequestHeadersA HttpAddRequestHeaders;
1232     alias HttpQueryInfoA HttpQueryInfo;
1233     alias InternetSetCookieA InternetSetCookie;
1234     alias InternetGetCookieA InternetGetCookie;
1235     alias CreateUrlCacheEntryA CreateUrlCacheEntry;
1236     alias RetrieveUrlCacheEntryStreamA RetrieveUrlCacheEntryStream;
1237     alias FindNextUrlCacheEntryA FindNextUrlCacheEntry;
1238     alias CommitUrlCacheEntryA CommitUrlCacheEntry;
1239     alias GetUrlCacheEntryInfoA GetUrlCacheEntryInfo;
1240     alias SetUrlCacheEntryInfoA SetUrlCacheEntryInfo;
1241     alias FindFirstUrlCacheEntryA FindFirstUrlCacheEntry;
1242     alias RetrieveUrlCacheEntryFileA RetrieveUrlCacheEntryFile;
1243     alias HttpSendRequestExA HttpSendRequestEx;
1244     alias HttpEndRequestA HttpEndRequest;
1245     alias GetUrlCacheGroupAttributeA GetUrlCacheGroupAttribute;
1246     alias SetUrlCacheGroupAttributeA SetUrlCacheGroupAttribute;
1247 }
1248 
1249 alias INTERNET_BUFFERS* LPINTERNET_BUFFERS;
1250