1 /** 2 * Windows API header module 3 * 4 * Translated from Windows SDK Headers 5 * 6 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 7 * Source: $(DRUNTIMESRC core/sys/windows/_winhttp.d) 8 */ 9 /// Automatically imported and edited from the druntime module 10 /// core.sys.windows.winhttp for the auto-generated win32 package. 11 module win32.winhttp; 12 //version (Windows): 13 @system: 14 version (Win32_UseLib) pragma(lib, "winhttp"); 15 // FIXME: Grouping of constants. Windows SDK doesn't make this entirely clear 16 // FIXME: Verify WINHTTP_STATUS_CALLBACK function declaration works correctly 17 18 import win32.w32api; 19 import win32.winbase; 20 import win32.windef; 21 import win32.winsock2; // Selective Imports BUG (: SOCKADDR_STORAGE;) 22 23 alias HINTERNET = void*; 24 alias LPHINTERNET = HINTERNET*; 25 alias INTERNET_PORT = WORD; 26 alias LPINTERNET_PORT = INTERNET_PORT*; 27 alias INTERNET_SCHEME = int; 28 alias LPINTERNET_SCHEME = INTERNET_SCHEME*; 29 30 // Protocol 'Manifests' 31 enum : DWORD { 32 INTERNET_DEFAULT_PORT = 0, 33 INTERNET_DEFAULT_HTTP_PORT = 80, 34 INTERNET_DEFAULT_HTTPS_PORT = 443 35 } 36 37 // WinHttpOpen() Flags: 38 enum DWORD WINHTTP_FLAG_ASYNC = 0x10000000; 39 40 // WinHttpOpenRequest() Flags: 41 enum : DWORD { 42 WINHTTP_FLAG_SECURE = 0x00800000, 43 WINHTTP_FLAG_ESCAPE_PERCENT = 0x00000004, 44 WINHTTP_FLAG_NULL_CODEPAGE = 0x00000008, 45 WINHTTP_FLAG_BYPASS_PROXY_CACHE = 0x00000100, 46 WINHTTP_FLAG_REFRESH = WINHTTP_FLAG_BYPASS_PROXY_CACHE, 47 WINHTTP_FLAG_ESCAPE_DISABLE = 0x00000040, 48 WINHTTP_FLAG_ESCAPE_DISABLE_QUERY = 0x00000080, 49 50 SECURITY_FLAG_IGNORE_UNKNOWN_CA = 0x00000100, 51 SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000, 52 SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000, 53 SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE = 0x00000200 54 } 55 56 struct WINHTTP_ASYNC_RESULT { 57 DWORD_PTR dwResult; 58 DWORD dwError; 59 } 60 alias LPWINHTTP_ASYNC_RESULT = WINHTTP_ASYNC_RESULT*; 61 62 struct HTTP_VERSION_INFO { 63 DWORD dwMajorVersion; 64 DWORD dwMinorVersion; 65 } 66 alias LPHTTP_VERSION_INFO = HTTP_VERSION_INFO*; 67 68 // URL Scheme 69 enum : DWORD { 70 INTERNET_SCHEME_HTTP = 1, 71 INTERNET_SCHEME_HTTPS = 2, 72 INTERNET_SCHEME_FTP = 3, 73 INTERNET_SCHEME_SOCKS = 4 74 } 75 76 struct URL_COMPONENTS { 77 DWORD dwStructSize; 78 LPWSTR lpszScheme; 79 DWORD dwSchemeLength; 80 INTERNET_SCHEME nScheme; 81 LPWSTR lpszHostName; 82 DWORD dwHostNameLength; 83 INTERNET_PORT nPort; 84 LPWSTR lpszUserName; 85 DWORD dwUserNameLength; 86 LPWSTR lpszPassword; 87 DWORD dwPasswordLength; 88 LPWSTR lpszUrlPath; 89 DWORD dwUrlPathLength; 90 LPWSTR lpszExtraInfo; 91 DWORD dwExtraInfoLength; 92 } 93 alias LPURL_COMPONENTS = URL_COMPONENTS*; 94 alias URL_COMPONENTSW = URL_COMPONENTS; 95 alias LPURL_COMPONENTSW = URL_COMPONENTS*; 96 97 struct WINHTTP_PROXY_INFO { 98 DWORD dwAccessType; 99 LPWSTR lpszProxy; 100 LPWSTR lpszProxyBypass; 101 } 102 alias LPWINHTTP_PROXY_INFO = WINHTTP_PROXY_INFO*; 103 alias WINHTTP_PROXY_INFOW = WINHTTP_PROXY_INFO; 104 alias LPWINHTTP_PROXY_INFOW = WINHTTP_PROXY_INFO*; 105 106 struct WINHTTP_AUTOPROXY_OPTIONS { 107 DWORD dwFlags; 108 DWORD dwAutoDetectFlags; 109 LPCWSTR lpszAutoConfigUrl; 110 LPVOID lpvReserved; 111 DWORD dwReserved; 112 BOOL fAutoLogonIfChallenged; 113 } 114 115 enum : DWORD { 116 WINHTTP_AUTOPROXY_AUTO_DETECT = 0x00000001, 117 WINHTTP_AUTOPROXY_CONFIG_URL = 0x00000002, 118 WINHTTP_AUTOPROXY_HOST_KEEPCASE = 0x00000004, 119 WINHTTP_AUTOPROXY_HOST_LOWERCASE = 0x00000008, 120 WINHTTP_AUTOPROXY_RUN_INPROCESS = 0x00010000, 121 WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY = 0x00020000, 122 WINHTTP_AUTOPROXY_NO_DIRECTACCESS = 0x00040000, 123 WINHTTP_AUTOPROXY_NO_CACHE_CLIENT = 0x00080000, 124 WINHTTP_AUTOPROXY_NO_CACHE_SVC = 0x00100000, 125 126 WINHTTP_AUTOPROXY_SORT_RESULTS = 0x00400000 127 } 128 129 // dwAutoDetectFlags 130 enum : DWORD { 131 WINHTTP_AUTO_DETECT_TYPE_DHCP = 0x00000001, 132 WINHTTP_AUTO_DETECT_TYPE_DNS_A = 0x00000002 133 } 134 135 struct WINHTTP_CERTIFICATE_INFO { 136 FILETIME ftExpiry; 137 FILETIME ftStart; 138 LPWSTR lpszSubjectInfo; 139 LPWSTR lpszIssuerInfo; 140 LPWSTR lpszProtocolName; 141 LPWSTR lpszSignatureAlgName; 142 LPWSTR lpszEncryptionAlgName; 143 DWORD dwKeySize; 144 } 145 146 // This structure is only defined #if _WS2DEF_ defined (from <ws2def.h>) - per Windows SDK 147 align(4) 148 struct WINHTTP_CONNECTION_INFO { 149 align(4): 150 DWORD cbSize; 151 version (Win64) 152 DWORD _padding; // cheap trick without the alignment switch over this file 153 SOCKADDR_STORAGE LocalAddress; 154 SOCKADDR_STORAGE RemoteAddress; 155 } 156 157 // WinHttpTimeFromSystemTime 158 enum DWORD WINHTTP_TIME_FORMAT_BUFSIZE = 62; 159 160 // CrackUrl, CombineUrl 161 enum : DWORD { 162 ICU_NO_ENCODE = 0x20000000, 163 ICU_DECODE = 0x10000000, 164 ICU_NO_META = 0x08000000, 165 ICU_ENCODE_SPACES_ONLY = 0x04000000, 166 ICU_BROWSER_MODE = 0x02000000, 167 ICU_ENCODE_PERCENT = 0x00001000 168 } 169 // WinHttpCrackUrl, WinHttpCreateUrl 170 enum : DWORD { 171 ICU_ESCAPE = 0x80000000, 172 ICU_ESCAPE_AUTHORITY = 0x00002000, 173 ICU_REJECT_USERPWD = 0x00004000 174 } 175 enum : DWORD { 176 WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0, 177 WINHTTP_ACCESS_TYPE_NO_PROXY = 1, 178 WINHTTP_ACCESS_TYPE_NAMED_PROXY = 3, 179 WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY = 4 180 } 181 // WinHttpOpen 'prettifiers' 182 enum LPCWSTR WINHTTP_NO_PROXY_NAME = null; 183 enum LPCWSTR WINHTTP_NO_PROXY_BYPASS = null; 184 185 enum LPVOID WINHTTP_NO_CLIENT_CERT_CONTEXT = null; 186 187 // WinHttp{Query|Set}Option 188 enum : DWORD { 189 WINHTTP_FIRST_OPTION = WINHTTP_OPTION_CALLBACK, 190 191 WINHTTP_OPTION_CALLBACK = 1, 192 WINHTTP_OPTION_RESOLVE_TIMEOUT = 2, 193 WINHTTP_OPTION_CONNECT_TIMEOUT = 3, 194 WINHTTP_OPTION_CONNECT_RETRIES = 4, 195 WINHTTP_OPTION_SEND_TIMEOUT = 5, 196 WINHTTP_OPTION_RECEIVE_TIMEOUT = 6, 197 WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT = 7, 198 WINHTTP_OPTION_HANDLE_TYPE = 9, 199 WINHTTP_OPTION_READ_BUFFER_SIZE = 12, 200 WINHTTP_OPTION_WRITE_BUFFER_SIZE = 13, 201 WINHTTP_OPTION_PARENT_HANDLE = 21, 202 WINHTTP_OPTION_EXTENDED_ERROR = 24, 203 WINHTTP_OPTION_SECURITY_FLAGS = 31, 204 WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT = 32, 205 WINHTTP_OPTION_URL = 34, 206 WINHTTP_OPTION_SECURITY_KEY_BITNESS = 36, 207 WINHTTP_OPTION_PROXY = 38, 208 WINHTTP_OPTION_PROXY_RESULT_ENTRY = 39, 209 210 WINHTTP_OPTION_USER_AGENT = 41, 211 WINHTTP_OPTION_CONTEXT_VALUE = 45, 212 WINHTTP_OPTION_CLIENT_CERT_CONTEXT = 47, 213 WINHTTP_OPTION_REQUEST_PRIORITY = 58, 214 WINHTTP_OPTION_HTTP_VERSION = 59, 215 WINHTTP_OPTION_DISABLE_FEATURE = 63, 216 217 WINHTTP_OPTION_CODEPAGE = 68, 218 WINHTTP_OPTION_MAX_CONNS_PER_SERVER = 73, 219 WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER = 74, 220 WINHTTP_OPTION_AUTOLOGON_POLICY = 77, 221 WINHTTP_OPTION_SERVER_CERT_CONTEXT = 78, 222 WINHTTP_OPTION_ENABLE_FEATURE = 79, 223 WINHTTP_OPTION_WORKER_THREAD_COUNT = 80, 224 WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT = 81, 225 WINHTTP_OPTION_PASSPORT_COBRANDING_URL = 82, 226 WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH = 83, 227 WINHTTP_OPTION_SECURE_PROTOCOLS = 84, 228 WINHTTP_OPTION_ENABLETRACING = 85, 229 WINHTTP_OPTION_PASSPORT_SIGN_OUT = 86, 230 WINHTTP_OPTION_PASSPORT_RETURN_URL = 87, 231 WINHTTP_OPTION_REDIRECT_POLICY = 88, 232 WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS = 89, 233 WINHTTP_OPTION_MAX_HTTP_STATUS_CONTINUE = 90, 234 WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE = 91, 235 WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE = 92, 236 WINHTTP_OPTION_CONNECTION_INFO = 93, 237 WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST = 94, 238 WINHTTP_OPTION_SPN = 96, 239 240 WINHTTP_OPTION_GLOBAL_PROXY_CREDS = 97, 241 WINHTTP_OPTION_GLOBAL_SERVER_CREDS = 98, 242 243 WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT = 99, 244 WINHTTP_OPTION_REJECT_USERPWD_IN_URL = 100, 245 WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS = 101, 246 247 WINHTTP_OPTION_RECEIVE_PROXY_CONNECT_RESPONSE = 103, 248 WINHTTP_OPTION_IS_PROXY_CONNECT_RESPONSE = 104, 249 250 WINHTTP_OPTION_SERVER_SPN_USED = 106, 251 WINHTTP_OPTION_PROXY_SPN_USED = 107, 252 253 WINHTTP_OPTION_SERVER_CBT = 108, 254 255 WINHTTP_OPTION_UNSAFE_HEADER_PARSING = 110, 256 WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS = 111, 257 258 WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET = 114, 259 WINHTTP_OPTION_WEB_SOCKET_CLOSE_TIMEOUT = 115, 260 WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL = 116, 261 262 WINHTTP_OPTION_DECOMPRESSION = 118, 263 264 WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE = 122, 265 WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE = 123, 266 267 //WINHTTP_LAST_OPTION => Moved outside of enum - static if () constraints within enums 268 269 WINHTTP_OPTION_USERNAME = 0x1000, 270 WINHTTP_OPTION_PASSWORD = 0x1001, 271 WINHTTP_OPTION_PROXY_USERNAME = 0x1002, 272 WINHTTP_OPTION_PROXY_PASSWORD = 0x1003, 273 274 WINHTTP_CONNS_PER_SERVER_UNLIMITED = 0xFFFFFFFF, 275 276 WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM = 0, 277 WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW = 1, 278 WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH = 2, 279 280 WINHTTP_AUTOLOGON_SECURITY_LEVEL_DEFAULT = WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM, 281 282 WINHTTP_OPTION_REDIRECT_POLICY_NEVER = 0, 283 WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP = 1, 284 WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS = 2, 285 286 WINHTTP_OPTION_REDIRECT_POLICY_LAST = WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS, 287 WINHTTP_OPTION_REDIRECT_POLICY_DEFAULT = WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP, 288 289 WINHTTP_DISABLE_PASSPORT_AUTH = 0x00000000, 290 WINHTTP_ENABLE_PASSPORT_AUTH = 0x10000000, 291 WINHTTP_DISABLE_PASSPORT_KEYRING = 0x20000000, 292 WINHTTP_ENABLE_PASSPORT_KEYRING = 0x40000000, 293 294 WINHTTP_DISABLE_COOKIES = 0x00000001, 295 WINHTTP_DISABLE_REDIRECTS = 0x00000002, 296 WINHTTP_DISABLE_AUTHENTICATION = 0x00000004, 297 WINHTTP_DISABLE_KEEP_ALIVE = 0x00000008, 298 299 WINHTTP_ENABLE_SSL_REVOCATION = 0x00000001, 300 WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION = 0x00000002, 301 302 WINHTTP_DISABLE_SPN_SERVER_PORT = 0x00000000, 303 WINHTTP_ENABLE_SPN_SERVER_PORT = 0x00000001, 304 WINHTTP_OPTION_SPN_MASK = WINHTTP_ENABLE_SPN_SERVER_PORT 305 } 306 307 // Windows 8.1 SDK: 308 static if (_WIN32_WINNT >= 0x602) { 309 enum DWORD WINHTTP_LAST_OPTION = WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE; 310 } else { // Windows 7.0A SDK: 311 enum DWORD WINHTTP_LAST_OPTION = WINHTTP_OPTION_SERVER_CBT; 312 } 313 314 enum : DWORD { 315 WINHTTP_DECOMPRESSION_FLAG_GZIP = 0x00000001, 316 WINHTTP_DECOMPRESSION_FLAG_DEFLATE = 0x00000002, 317 WINHTTP_DECOMPRESSION_FLAG_ALL = (WINHTTP_DECOMPRESSION_FLAG_GZIP | WINHTTP_DECOMPRESSION_FLAG_DEFLATE) 318 } 319 320 struct WINHTTP_CREDS { 321 LPSTR lpszUserName; 322 LPSTR lpszPassword; 323 LPSTR lpszRealm; 324 DWORD dwAuthScheme; 325 LPSTR lpszHostName; 326 DWORD dwPort; 327 } 328 alias PWINHTTP_CREDS = WINHTTP_CREDS*; 329 330 struct WINHTTP_CREDS_EX { 331 LPSTR lpszUserName; 332 LPSTR lpszPassword; 333 LPSTR lpszRealm; 334 DWORD dwAuthScheme; 335 LPSTR lpszHostName; 336 DWORD dwPort; 337 LPSTR lpszUrl; 338 } 339 alias PWINHTTP_CREDS_EX = WINHTTP_CREDS_EX*; 340 341 enum : DWORD { 342 WINHTTP_HANDLE_TYPE_SESSION = 1, 343 WINHTTP_HANDLE_TYPE_CONNECT = 2, 344 WINHTTP_HANDLE_TYPE_REQUEST = 3, 345 346 WINHTTP_AUTH_SCHEME_BASIC = 0x00000001, 347 WINHTTP_AUTH_SCHEME_NTLM = 0x00000002, 348 WINHTTP_AUTH_SCHEME_PASSPORT = 0x00000004, 349 WINHTTP_AUTH_SCHEME_DIGEST = 0x00000008, 350 WINHTTP_AUTH_SCHEME_NEGOTIATE = 0x00000010, 351 352 WINHTTP_AUTH_TARGET_SERVER = 0x00000000, 353 WINHTTP_AUTH_TARGET_PROXY = 0x00000001, 354 355 SECURITY_FLAG_SECURE = 0x00000001, 356 SECURITY_FLAG_STRENGTH_WEAK = 0x10000000, 357 SECURITY_FLAG_STRENGTH_MEDIUM = 0x40000000, 358 SECURITY_FLAG_STRENGTH_STRONG = 0x20000000, 359 360 WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED = 0x00000001, 361 WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT = 0x00000002, 362 WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED = 0x00000004, 363 WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA = 0x00000008, 364 WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID = 0x00000010, 365 WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID = 0x00000020, 366 WINHTTP_CALLBACK_STATUS_FLAG_CERT_WRONG_USAGE = 0x00000040, 367 WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR = 0x80000000, 368 369 WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 = 0x00000008, 370 WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 = 0x00000020, 371 WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 = 0x00000080, 372 WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 = 0x00000200, 373 WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 = 0x00000800, 374 WINHTTP_FLAG_SECURE_PROTOCOL_ALL = (WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 | 375 WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 | 376 WINHTTP_FLAG_SECURE_PROTOCOL_TLS1) 377 } 378 379 alias extern(Windows) int fnWINHTTP_STATUS_CALLBACK(HINTERNET hInternet, DWORD_PTR dwContext, 380 DWORD dwInternetStatus, LPVOID lpvStatusInformation,DWORD dwStatusInformationLength); 381 alias WINHTTP_STATUS_CALLBACK = fnWINHTTP_STATUS_CALLBACK*; 382 alias LPWINHTTP_STATUS_CALLBACK = WINHTTP_STATUS_CALLBACK*; 383 384 enum : DWORD { 385 WINHTTP_CALLBACK_STATUS_RESOLVING_NAME = 0x00000001, 386 WINHTTP_CALLBACK_STATUS_NAME_RESOLVED = 0x00000002, 387 WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER = 0x00000004, 388 WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER = 0x00000008, 389 WINHTTP_CALLBACK_STATUS_SENDING_REQUEST = 0x00000010, 390 WINHTTP_CALLBACK_STATUS_REQUEST_SENT = 0x00000020, 391 WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE = 0x00000040, 392 WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED = 0x00000080, 393 WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION = 0x00000100, 394 WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED = 0x00000200, 395 WINHTTP_CALLBACK_STATUS_HANDLE_CREATED = 0x00000400, 396 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING = 0x00000800, 397 WINHTTP_CALLBACK_STATUS_DETECTING_PROXY = 0x00001000, 398 WINHTTP_CALLBACK_STATUS_REDIRECT = 0x00004000, 399 WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE = 0x00008000, 400 WINHTTP_CALLBACK_STATUS_SECURE_FAILURE = 0x00010000, 401 WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE = 0x00020000, 402 WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE = 0x00040000, 403 WINHTTP_CALLBACK_STATUS_READ_COMPLETE = 0x00080000, 404 WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE = 0x00100000, 405 WINHTTP_CALLBACK_STATUS_REQUEST_ERROR = 0x00200000, 406 WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE = 0x00400000 407 } 408 409 enum : DWORD { 410 WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE = 0x01000000, 411 WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE = 0x02000000, 412 WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE = 0x04000000 413 } 414 415 enum : DWORD { 416 API_RECEIVE_RESPONSE = 1, 417 API_QUERY_DATA_AVAILABLE = 2, 418 API_READ_DATA = 3, 419 API_WRITE_DATA = 4, 420 API_SEND_REQUEST = 5 421 } 422 423 enum : DWORD { 424 WINHTTP_CALLBACK_FLAG_RESOLVE_NAME = (WINHTTP_CALLBACK_STATUS_RESOLVING_NAME | WINHTTP_CALLBACK_STATUS_NAME_RESOLVED), 425 WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER = (WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER), 426 WINHTTP_CALLBACK_FLAG_SEND_REQUEST = (WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | WINHTTP_CALLBACK_STATUS_REQUEST_SENT), 427 WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE = (WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE | WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED), 428 WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION = (WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION | WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED), 429 WINHTTP_CALLBACK_FLAG_HANDLES = (WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING), 430 WINHTTP_CALLBACK_FLAG_DETECTING_PROXY = WINHTTP_CALLBACK_STATUS_DETECTING_PROXY, 431 WINHTTP_CALLBACK_FLAG_REDIRECT = WINHTTP_CALLBACK_STATUS_REDIRECT, 432 WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE = WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE, 433 WINHTTP_CALLBACK_FLAG_SECURE_FAILURE = WINHTTP_CALLBACK_STATUS_SECURE_FAILURE, 434 WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE = WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE, 435 WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE = WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE, 436 WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE = WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE, 437 WINHTTP_CALLBACK_FLAG_READ_COMPLETE = WINHTTP_CALLBACK_STATUS_READ_COMPLETE, 438 WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE = WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE, 439 WINHTTP_CALLBACK_FLAG_REQUEST_ERROR = WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 440 } 441 442 enum DWORD WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE = WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE; 443 444 // Windows 8+/2012+ 445 static if (_WIN32_WINNT >= 0x602) { 446 enum DWORD WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS = (WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE 447 | WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE 448 | WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE 449 | WINHTTP_CALLBACK_STATUS_READ_COMPLETE 450 | WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE 451 | WINHTTP_CALLBACK_STATUS_REQUEST_ERROR); 452 } else { 453 enum DWORD WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS = (WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE 454 | WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE 455 | WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE 456 | WINHTTP_CALLBACK_STATUS_READ_COMPLETE 457 | WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE 458 | WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 459 | WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE); 460 } 461 462 enum DWORD WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS = 0xffffffff; 463 464 enum WINHTTP_INVALID_STATUS_CALLBACK = (cast(WINHTTP_STATUS_CALLBACK)(-1L)); 465 466 enum : DWORD { 467 WINHTTP_QUERY_MIME_VERSION = 0, 468 WINHTTP_QUERY_CONTENT_TYPE = 1, 469 WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING = 2, 470 WINHTTP_QUERY_CONTENT_ID = 3, 471 WINHTTP_QUERY_CONTENT_DESCRIPTION = 4, 472 WINHTTP_QUERY_CONTENT_LENGTH = 5, 473 WINHTTP_QUERY_CONTENT_LANGUAGE = 6, 474 WINHTTP_QUERY_ALLOW = 7, 475 WINHTTP_QUERY_PUBLIC = 8, 476 WINHTTP_QUERY_DATE = 9, 477 WINHTTP_QUERY_EXPIRES = 10, 478 WINHTTP_QUERY_LAST_MODIFIED = 11, 479 WINHTTP_QUERY_MESSAGE_ID = 12, 480 WINHTTP_QUERY_URI = 13, 481 WINHTTP_QUERY_DERIVED_FROM = 14, 482 WINHTTP_QUERY_COST = 15, 483 WINHTTP_QUERY_LINK = 16, 484 WINHTTP_QUERY_PRAGMA = 17, 485 WINHTTP_QUERY_VERSION = 18, 486 WINHTTP_QUERY_STATUS_CODE = 19, 487 WINHTTP_QUERY_STATUS_TEXT = 20, 488 WINHTTP_QUERY_RAW_HEADERS = 21, 489 WINHTTP_QUERY_RAW_HEADERS_CRLF = 22, 490 WINHTTP_QUERY_CONNECTION = 23, 491 WINHTTP_QUERY_ACCEPT = 24, 492 WINHTTP_QUERY_ACCEPT_CHARSET = 25, 493 WINHTTP_QUERY_ACCEPT_ENCODING = 26, 494 WINHTTP_QUERY_ACCEPT_LANGUAGE = 27, 495 WINHTTP_QUERY_AUTHORIZATION = 28, 496 WINHTTP_QUERY_CONTENT_ENCODING = 29, 497 WINHTTP_QUERY_FORWARDED = 30, 498 WINHTTP_QUERY_FROM = 31, 499 WINHTTP_QUERY_IF_MODIFIED_SINCE = 32, 500 WINHTTP_QUERY_LOCATION = 33, 501 WINHTTP_QUERY_ORIG_URI = 34, 502 WINHTTP_QUERY_REFERER = 35, 503 WINHTTP_QUERY_RETRY_AFTER = 36, 504 WINHTTP_QUERY_SERVER = 37, 505 WINHTTP_QUERY_TITLE = 38, 506 WINHTTP_QUERY_USER_AGENT = 39, 507 WINHTTP_QUERY_WWW_AUTHENTICATE = 40, 508 WINHTTP_QUERY_PROXY_AUTHENTICATE = 41, 509 WINHTTP_QUERY_ACCEPT_RANGES = 42, 510 WINHTTP_QUERY_SET_COOKIE = 43, 511 WINHTTP_QUERY_COOKIE = 44, 512 WINHTTP_QUERY_REQUEST_METHOD = 45, 513 WINHTTP_QUERY_REFRESH = 46, 514 WINHTTP_QUERY_CONTENT_DISPOSITION = 47, 515 516 // HTTP 1.1 defined headers 517 518 WINHTTP_QUERY_AGE = 48, 519 WINHTTP_QUERY_CACHE_CONTROL = 49, 520 WINHTTP_QUERY_CONTENT_BASE = 50, 521 WINHTTP_QUERY_CONTENT_LOCATION = 51, 522 WINHTTP_QUERY_CONTENT_MD5 = 52, 523 WINHTTP_QUERY_CONTENT_RANGE = 53, 524 WINHTTP_QUERY_ETAG = 54, 525 WINHTTP_QUERY_HOST = 55, 526 WINHTTP_QUERY_IF_MATCH = 56, 527 WINHTTP_QUERY_IF_NONE_MATCH = 57, 528 WINHTTP_QUERY_IF_RANGE = 58, 529 WINHTTP_QUERY_IF_UNMODIFIED_SINCE = 59, 530 WINHTTP_QUERY_MAX_FORWARDS = 60, 531 WINHTTP_QUERY_PROXY_AUTHORIZATION = 61, 532 WINHTTP_QUERY_RANGE = 62, 533 WINHTTP_QUERY_TRANSFER_ENCODING = 63, 534 WINHTTP_QUERY_UPGRADE = 64, 535 WINHTTP_QUERY_VARY = 65, 536 WINHTTP_QUERY_VIA = 66, 537 WINHTTP_QUERY_WARNING = 67, 538 WINHTTP_QUERY_EXPECT = 68, 539 WINHTTP_QUERY_PROXY_CONNECTION = 69, 540 WINHTTP_QUERY_UNLESS_MODIFIED_SINCE = 70, 541 542 WINHTTP_QUERY_PROXY_SUPPORT = 75, 543 WINHTTP_QUERY_AUTHENTICATION_INFO = 76, 544 WINHTTP_QUERY_PASSPORT_URLS = 77, 545 WINHTTP_QUERY_PASSPORT_CONFIG = 78, 546 547 WINHTTP_QUERY_MAX = 78, 548 549 WINHTTP_QUERY_CUSTOM = 65535, 550 551 WINHTTP_QUERY_FLAG_REQUEST_HEADERS = 0x80000000, 552 553 WINHTTP_QUERY_FLAG_SYSTEMTIME = 0x40000000, 554 555 WINHTTP_QUERY_FLAG_NUMBER = 0x20000000 556 } 557 558 enum : DWORD { 559 HTTP_STATUS_CONTINUE = 100, 560 HTTP_STATUS_SWITCH_PROTOCOLS = 101, 561 562 HTTP_STATUS_OK = 200, 563 HTTP_STATUS_CREATED = 201, 564 HTTP_STATUS_ACCEPTED = 202, 565 HTTP_STATUS_PARTIAL = 203, 566 HTTP_STATUS_NO_CONTENT = 204, 567 HTTP_STATUS_RESET_CONTENT = 205, 568 HTTP_STATUS_PARTIAL_CONTENT = 206, 569 HTTP_STATUS_WEBDAV_MULTI_STATUS = 207, 570 571 HTTP_STATUS_AMBIGUOUS = 300, 572 HTTP_STATUS_MOVED = 301, 573 HTTP_STATUS_REDIRECT = 302, 574 HTTP_STATUS_REDIRECT_METHOD = 303, 575 HTTP_STATUS_NOT_MODIFIED = 304, 576 HTTP_STATUS_USE_PROXY = 305, 577 HTTP_STATUS_REDIRECT_KEEP_VERB = 307, 578 579 HTTP_STATUS_BAD_REQUEST = 400, 580 HTTP_STATUS_DENIED = 401, 581 HTTP_STATUS_PAYMENT_REQ = 402, 582 HTTP_STATUS_FORBIDDEN = 403, 583 HTTP_STATUS_NOT_FOUND = 404, 584 HTTP_STATUS_BAD_METHOD = 405, 585 HTTP_STATUS_NONE_ACCEPTABLE = 406, 586 HTTP_STATUS_PROXY_AUTH_REQ = 407, 587 HTTP_STATUS_REQUEST_TIMEOUT = 408, 588 HTTP_STATUS_CONFLICT = 409, 589 HTTP_STATUS_GONE = 410, 590 HTTP_STATUS_LENGTH_REQUIRED = 411, 591 HTTP_STATUS_PRECOND_FAILED = 412, 592 HTTP_STATUS_REQUEST_TOO_LARGE = 413, 593 HTTP_STATUS_URI_TOO_LONG = 414, 594 HTTP_STATUS_UNSUPPORTED_MEDIA = 415, 595 HTTP_STATUS_RETRY_WITH = 449, 596 597 HTTP_STATUS_SERVER_ERROR = 500, 598 HTTP_STATUS_NOT_SUPPORTED = 501, 599 HTTP_STATUS_BAD_GATEWAY = 502, 600 HTTP_STATUS_SERVICE_UNAVAIL = 503, 601 HTTP_STATUS_GATEWAY_TIMEOUT = 504, 602 HTTP_STATUS_VERSION_NOT_SUP = 505, 603 604 HTTP_STATUS_FIRST = HTTP_STATUS_CONTINUE, 605 HTTP_STATUS_LAST = HTTP_STATUS_VERSION_NOT_SUP 606 } 607 608 enum LPCWSTR WINHTTP_NO_REFERER = null; 609 enum LPCWSTR * WINHTTP_DEFAULT_ACCEPT_TYPES = null; 610 611 enum : DWORD { 612 WINHTTP_ADDREQ_INDEX_MASK = 0x0000FFFF, 613 WINHTTP_ADDREQ_FLAGS_MASK = 0xFFFF0000, 614 615 WINHTTP_ADDREQ_FLAG_ADD_IF_NEW = 0x10000000, 616 617 WINHTTP_ADDREQ_FLAG_ADD = 0x20000000, 618 619 WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA = 0x40000000, 620 WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON = 0x01000000, 621 WINHTTP_ADDREQ_FLAG_COALESCE = WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA, 622 623 WINHTTP_ADDREQ_FLAG_REPLACE = 0x80000000, 624 625 WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH = 0 626 } 627 628 enum LPCWSTR WINHTTP_NO_ADDITIONAL_HEADERS = null; 629 enum LPVOID WINHTTP_NO_REQUEST_DATA = null; 630 631 enum LPCWSTR WINHTTP_HEADER_NAME_BY_INDEX = null; 632 enum LPVOID WINHTTP_NO_OUTPUT_BUFFER = null; 633 enum LPDWORD WINHTTP_NO_HEADER_INDEX = null; 634 635 struct WINHTTP_CURRENT_USER_IE_PROXY_CONFIG { 636 BOOL fAutoDetect; 637 LPWSTR lpszAutoConfigUrl; 638 LPWSTR lpszProxy; 639 LPWSTR lpszProxyBypass; 640 } 641 642 // WinHttp API error returns 643 enum : DWORD { 644 WINHTTP_ERROR_BASE = 12000, 645 646 ERROR_WINHTTP_OUT_OF_HANDLES = (WINHTTP_ERROR_BASE + 1), 647 ERROR_WINHTTP_TIMEOUT = (WINHTTP_ERROR_BASE + 2), 648 ERROR_WINHTTP_INTERNAL_ERROR = (WINHTTP_ERROR_BASE + 4), 649 ERROR_WINHTTP_INVALID_URL = (WINHTTP_ERROR_BASE + 5), 650 ERROR_WINHTTP_UNRECOGNIZED_SCHEME = (WINHTTP_ERROR_BASE + 6), 651 ERROR_WINHTTP_NAME_NOT_RESOLVED = (WINHTTP_ERROR_BASE + 7), 652 ERROR_WINHTTP_INVALID_OPTION = (WINHTTP_ERROR_BASE + 9), 653 ERROR_WINHTTP_OPTION_NOT_SETTABLE = (WINHTTP_ERROR_BASE + 11), 654 ERROR_WINHTTP_SHUTDOWN = (WINHTTP_ERROR_BASE + 12), 655 656 ERROR_WINHTTP_LOGIN_FAILURE = (WINHTTP_ERROR_BASE + 15), 657 ERROR_WINHTTP_OPERATION_CANCELLED = (WINHTTP_ERROR_BASE + 17), 658 ERROR_WINHTTP_INCORRECT_HANDLE_TYPE = (WINHTTP_ERROR_BASE + 18), 659 ERROR_WINHTTP_INCORRECT_HANDLE_STATE = (WINHTTP_ERROR_BASE + 19), 660 ERROR_WINHTTP_CANNOT_CONNECT = (WINHTTP_ERROR_BASE + 29), 661 ERROR_WINHTTP_CONNECTION_ERROR = (WINHTTP_ERROR_BASE + 30), 662 ERROR_WINHTTP_RESEND_REQUEST = (WINHTTP_ERROR_BASE + 32), 663 664 ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED = (WINHTTP_ERROR_BASE + 44), 665 666 ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN = (WINHTTP_ERROR_BASE + 100), 667 ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND = (WINHTTP_ERROR_BASE + 101), 668 ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND = (WINHTTP_ERROR_BASE + 102), 669 ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN = (WINHTTP_ERROR_BASE + 103), 670 671 ERROR_WINHTTP_HEADER_NOT_FOUND = (WINHTTP_ERROR_BASE + 150), 672 ERROR_WINHTTP_INVALID_SERVER_RESPONSE = (WINHTTP_ERROR_BASE + 152), 673 ERROR_WINHTTP_INVALID_HEADER = (WINHTTP_ERROR_BASE + 153), 674 ERROR_WINHTTP_INVALID_QUERY_REQUEST = (WINHTTP_ERROR_BASE + 154), 675 ERROR_WINHTTP_HEADER_ALREADY_EXISTS = (WINHTTP_ERROR_BASE + 155), 676 ERROR_WINHTTP_REDIRECT_FAILED = (WINHTTP_ERROR_BASE + 156), 677 678 ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR = (WINHTTP_ERROR_BASE + 178), 679 ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT = (WINHTTP_ERROR_BASE + 166), 680 ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT = (WINHTTP_ERROR_BASE + 167), 681 ERROR_WINHTTP_UNHANDLED_SCRIPT_TYPE = (WINHTTP_ERROR_BASE + 176), 682 ERROR_WINHTTP_SCRIPT_EXECUTION_ERROR = (WINHTTP_ERROR_BASE + 177), 683 684 ERROR_WINHTTP_NOT_INITIALIZED = (WINHTTP_ERROR_BASE + 172), 685 ERROR_WINHTTP_SECURE_FAILURE = (WINHTTP_ERROR_BASE + 175), 686 687 ERROR_WINHTTP_SECURE_CERT_DATE_INVALID = (WINHTTP_ERROR_BASE + 37), 688 ERROR_WINHTTP_SECURE_CERT_CN_INVALID = (WINHTTP_ERROR_BASE + 38), 689 ERROR_WINHTTP_SECURE_INVALID_CA = (WINHTTP_ERROR_BASE + 45), 690 ERROR_WINHTTP_SECURE_CERT_REV_FAILED = (WINHTTP_ERROR_BASE + 57), 691 ERROR_WINHTTP_SECURE_CHANNEL_ERROR = (WINHTTP_ERROR_BASE + 157), 692 ERROR_WINHTTP_SECURE_INVALID_CERT = (WINHTTP_ERROR_BASE + 169), 693 ERROR_WINHTTP_SECURE_CERT_REVOKED = (WINHTTP_ERROR_BASE + 170), 694 ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE = (WINHTTP_ERROR_BASE + 179), 695 696 ERROR_WINHTTP_AUTODETECTION_FAILED = (WINHTTP_ERROR_BASE + 180), 697 ERROR_WINHTTP_HEADER_COUNT_EXCEEDED = (WINHTTP_ERROR_BASE + 181), 698 ERROR_WINHTTP_HEADER_SIZE_OVERFLOW = (WINHTTP_ERROR_BASE + 182), 699 ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW = (WINHTTP_ERROR_BASE + 183), 700 ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW = (WINHTTP_ERROR_BASE + 184), 701 ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY = (WINHTTP_ERROR_BASE + 185), 702 ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY = (WINHTTP_ERROR_BASE + 186), 703 704 WINHTTP_ERROR_LAST = (WINHTTP_ERROR_BASE + 186) 705 } 706 707 enum : DWORD { 708 WINHTTP_RESET_STATE = 0x00000001, 709 WINHTTP_RESET_SWPAD_CURRENT_NETWORK = 0x00000002, 710 WINHTTP_RESET_SWPAD_ALL = 0x00000004, 711 WINHTTP_RESET_SCRIPT_CACHE = 0x00000008, 712 WINHTTP_RESET_ALL = 0x0000FFFF, 713 WINHTTP_RESET_NOTIFY_NETWORK_CHANGED = 0x00010000, 714 WINHTTP_RESET_OUT_OF_PROC = 0x00020000 715 } 716 717 enum : DWORD { 718 WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH = 123, 719 WINHTTP_WEB_SOCKET_MIN_KEEPALIVE_VALUE = 15000 720 } 721 722 // Version(Windows8) || Version(Windows2012): 723 static if (_WIN32_WINNT >= 0x602) 724 { 725 enum WINHTTP_WEB_SOCKET_OPERATION : DWORD 726 { 727 WINHTTP_WEB_SOCKET_SEND_OPERATION = 0, 728 WINHTTP_WEB_SOCKET_RECEIVE_OPERATION = 1, 729 WINHTTP_WEB_SOCKET_CLOSE_OPERATION = 2, 730 WINHTTP_WEB_SOCKET_SHUTDOWN_OPERATION = 3 731 } 732 enum WINHTTP_WEB_SOCKET_BUFFER_TYPE : DWORD 733 { 734 WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE = 0, 735 WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE = 1, 736 WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE = 2, 737 WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE = 3, 738 WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE = 4 739 } 740 enum WINHTTP_WEB_SOCKET_CLOSE_STATUS : DWORD 741 { 742 WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS = 1000, 743 WINHTTP_WEB_SOCKET_ENDPOINT_TERMINATED_CLOSE_STATUS = 1001, 744 WINHTTP_WEB_SOCKET_PROTOCOL_ERROR_CLOSE_STATUS = 1002, 745 WINHTTP_WEB_SOCKET_INVALID_DATA_TYPE_CLOSE_STATUS = 1003, 746 WINHTTP_WEB_SOCKET_EMPTY_CLOSE_STATUS = 1005, 747 WINHTTP_WEB_SOCKET_ABORTED_CLOSE_STATUS = 1006, 748 WINHTTP_WEB_SOCKET_INVALID_PAYLOAD_CLOSE_STATUS = 1007, 749 WINHTTP_WEB_SOCKET_POLICY_VIOLATION_CLOSE_STATUS = 1008, 750 WINHTTP_WEB_SOCKET_MESSAGE_TOO_BIG_CLOSE_STATUS = 1009, 751 WINHTTP_WEB_SOCKET_UNSUPPORTED_EXTENSIONS_CLOSE_STATUS = 1010, 752 WINHTTP_WEB_SOCKET_SERVER_ERROR_CLOSE_STATUS = 1011, 753 WINHTTP_WEB_SOCKET_SECURE_HANDSHAKE_ERROR_CLOSE_STATUS = 1015 754 } 755 struct WINHTTP_PROXY_RESULT_ENTRY { 756 BOOL fProxy; 757 BOOL fBypass; 758 INTERNET_SCHEME ProxyScheme; 759 PWSTR pwszProxy; 760 INTERNET_PORT ProxyPort; 761 } 762 struct WINHTTP_PROXY_RESULT { 763 DWORD cEntries; 764 WINHTTP_PROXY_RESULT_ENTRY *pEntries; 765 } 766 struct WINHTTP_WEB_SOCKET_ASYNC_RESULT { 767 WINHTTP_ASYNC_RESULT AsyncResult; 768 WINHTTP_WEB_SOCKET_OPERATION Operation; 769 } 770 struct WINHTTP_WEB_SOCKET_STATUS { 771 DWORD dwBytesTransferred; 772 WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType; 773 } 774 } 775 776 777 extern (Windows) { 778 BOOL WinHttpAddRequestHeaders(HINTERNET hRequest, LPCWSTR pwszHeaders, DWORD dwHeadersLength, DWORD dwModifiers); 779 780 BOOL WinHttpCheckPlatform(); 781 782 BOOL WinHttpCloseHandle(HINTERNET hInternet); 783 784 HINTERNET WinHttpConnect(HINTERNET hSession, LPCWSTR pswzServerName, INTERNET_PORT nServerPort, DWORD dwReserved); 785 786 BOOL WinHttpCrackUrl(LPCWSTR pwszUrl, DWORD dwUrlLength, DWORD dwFlags, LPURL_COMPONENTS lpUrlComponents); 787 788 BOOL WinHttpCreateUrl(LPURL_COMPONENTS lpUrlComponents, DWORD dwFlags, LPWSTR pwszUrl, LPDWORD lpdwUrlLength); 789 BOOL WinHttpDetectAutoProxyConfigUrl(DWORD dwAutoDetectFlags, LPWSTR *ppwszAutoConfigUrl); 790 791 BOOL WinHttpGetDefaultProxyConfiguration(WINHTTP_PROXY_INFO *pProxyInfo); 792 BOOL WinHttpGetIEProxyConfigForCurrentUser(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG *pProxyConfig); 793 BOOL WinHttpGetProxyForUrl(HINTERNET hSession, LPCWSTR lpcwszUrl, 794 WINHTTP_AUTOPROXY_OPTIONS *pAutoProxyOptions, WINHTTP_PROXY_INFO *pProxyInfo); 795 796 HINTERNET WinHttpOpen(LPCWSTR pwszUserAgent, DWORD dwAccessType, LPCWSTR pwszProxyName, 797 LPCWSTR pwszProxyBypass, DWORD dwFlags); 798 HINTERNET WinHttpOpenRequest(HINTERNET hConnect, LPCWSTR pwszVerb, LPCWSTR pwszObjectName, 799 LPCWSTR pwszVersion, LPCWSTR pwszReferrer, 800 LPCWSTR *ppwszAcceptTypes, DWORD dwFlags); 801 802 BOOL WinHttpQueryAuthSchemes(HINTERNET hRequest, LPDWORD lpdwSupportedSchemes, 803 LPDWORD lpdwFirstScheme, LPDWORD pdwAuthTarget); 804 BOOL WinHttpQueryDataAvailable(HINTERNET hRequest, LPDWORD lpdwNumberOfBytesAvailable); 805 BOOL WinHttpQueryHeaders(HINTERNET hRequest, DWORD dwInfoLevel, LPCWSTR pwszName, 806 LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex); 807 BOOL WinHttpQueryOption(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, 808 LPDWORD lpdwBufferLength); 809 810 BOOL WinHttpReadData(HINTERNET hRequest, LPVOID lpBuffer, DWORD dwNumberOfBytesToRead, 811 LPDWORD lpdwNumberOfBytesRead); 812 BOOL WinHttpReceiveResponse(HINTERNET hRequest, LPVOID lpReserved); 813 814 BOOL WinHttpSendRequest(HINTERNET hRequest, LPCWSTR pwszHeaders, DWORD dwHeadersLength, 815 LPVOID lpOptional, DWORD dwOptionalLength, DWORD dwTotalLength, DWORD_PTR dwContext); 816 817 BOOL WinHttpSetCredentials(HINTERNET hRequest, DWORD AuthTargets, DWORD AuthScheme, 818 LPCWSTR pwszUserName, LPCWSTR pwszPassword, LPVOID pAuthParams); 819 BOOL WinHttpSetDefaultProxyConfiguration(WINHTTP_PROXY_INFO *pProxyInfo); 820 BOOL WinHttpSetOption(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength); 821 WINHTTP_STATUS_CALLBACK WinHttpSetStatusCallback(HINTERNET hInternet, 822 WINHTTP_STATUS_CALLBACK lpfnInternetCallback, 823 DWORD dwNotificationFlags, DWORD_PTR dwReserved); 824 BOOL WinHttpSetTimeouts(HINTERNET hInternet, int dwResolveTimeout, int dwConnectTimeout, 825 int dwSendTimeout, int dwReceiveTimeout); 826 827 BOOL WinHttpTimeFromSystemTime(const SYSTEMTIME *pst, LPWSTR pwszTime); 828 BOOL WinHttpTimeToSystemTime(LPCWSTR pwszTime, SYSTEMTIME *pst); 829 830 BOOL WinHttpWriteData(HINTERNET hRequest, LPCVOID lpBuffer, DWORD dwNumberOfBytesToWrite, 831 LPDWORD lpdwNumberOfBytesWritten); 832 833 // Version(Windows8) || Version(Windows2012): 834 static if (_WIN32_WINNT >= 0x602) { 835 DWORD WinHttpCreateProxyResolver(HINTERNET hSession, HINTERNET *phResolver); 836 void WinHttpFreeProxyResult(WINHTTP_PROXY_RESULT *pProxyResult); 837 DWORD WinHttpGetProxyForUrlEx(HINTERNET hResolver, PCWSTR pcwszUrl, 838 WINHTTP_AUTOPROXY_OPTIONS *pAutoProxyOptions, DWORD_PTR pContext); 839 DWORD WinHttpGetProxyResult(HINTERNET hResolver, WINHTTP_PROXY_RESULT *pProxyResult); 840 DWORD WinHttpResetAutoProxy(HINTERNET hSession, DWORD dwFlags); 841 DWORD WinHttpWebSocketClose(HINTERNET hWebSocket, USHORT usStatus, PVOID pvReason, DWORD dwReasonLength); 842 HINTERNET WinHttpWebSocketCompleteUpgrade(HINTERNET hRequest, DWORD_PTR pContext); 843 DWORD WinHttpWebSocketQueryCloseStatus(HINTERNET hWebSocket, USHORT *pusStatus, PVOID pvReason, 844 DWORD dwReasonLength, DWORD *pdwReasonLengthConsumed); 845 DWORD WinHttpWebSocketReceive(HINTERNET hWebSocket, PVOID pvBuffer, DWORD dwBufferLength, 846 DWORD *pdwBytesRead, WINHTTP_WEB_SOCKET_BUFFER_TYPE *peBufferType); 847 DWORD WinHttpWebSocketSend(HINTERNET hWebSocket, WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType, 848 PVOID pvBuffer, DWORD dwBufferLength); 849 DWORD WinHttpWebSocketShutdown(HINTERNET hWebSocket, USHORT usStatus, PVOID pvReason, DWORD dwReasonLength); 850 } 851 }