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