blob: e919635e4ed3a5b36d5db5ae797d9bca97693842 [file] [log] [blame]
/**
* Windows API header module
*
* Translated from Windows SDK Headers
*
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Source: $(DRUNTIMESRC src/core/sys/windows/_winhttp.d)
*/
module core.sys.windows.winhttp;
version (Windows):
@system:
pragma(lib, "winhttp");
// FIXME: Grouping of constants. Windows SDK doesn't make this entirely clear
// FIXME: Verify WINHTTP_STATUS_CALLBACK function declaration works correctly
import core.sys.windows.w32api;
import core.sys.windows.winbase;
import core.sys.windows.windef;
import core.sys.windows.winsock2; // Selective Imports BUG (: SOCKADDR_STORAGE;)
alias HINTERNET = void*;
alias LPHINTERNET = HINTERNET*;
alias INTERNET_PORT = WORD;
alias LPINTERNET_PORT = INTERNET_PORT*;
alias INTERNET_SCHEME = int;
alias LPINTERNET_SCHEME = INTERNET_SCHEME*;
// Protocol 'Manifests'
enum : DWORD {
INTERNET_DEFAULT_PORT = 0,
INTERNET_DEFAULT_HTTP_PORT = 80,
INTERNET_DEFAULT_HTTPS_PORT = 443
}
// WinHttpOpen() Flags:
enum DWORD WINHTTP_FLAG_ASYNC = 0x10000000;
// WinHttpOpenRequest() Flags:
enum : DWORD {
WINHTTP_FLAG_SECURE = 0x00800000,
WINHTTP_FLAG_ESCAPE_PERCENT = 0x00000004,
WINHTTP_FLAG_NULL_CODEPAGE = 0x00000008,
WINHTTP_FLAG_BYPASS_PROXY_CACHE = 0x00000100,
WINHTTP_FLAG_REFRESH = WINHTTP_FLAG_BYPASS_PROXY_CACHE,
WINHTTP_FLAG_ESCAPE_DISABLE = 0x00000040,
WINHTTP_FLAG_ESCAPE_DISABLE_QUERY = 0x00000080,
SECURITY_FLAG_IGNORE_UNKNOWN_CA = 0x00000100,
SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000,
SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000,
SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE = 0x00000200
}
struct WINHTTP_ASYNC_RESULT {
DWORD_PTR dwResult;
DWORD dwError;
}
alias LPWINHTTP_ASYNC_RESULT = WINHTTP_ASYNC_RESULT*;
struct HTTP_VERSION_INFO {
DWORD dwMajorVersion;
DWORD dwMinorVersion;
}
alias LPHTTP_VERSION_INFO = HTTP_VERSION_INFO*;
// URL Scheme
enum : DWORD {
INTERNET_SCHEME_HTTP = 1,
INTERNET_SCHEME_HTTPS = 2,
INTERNET_SCHEME_FTP = 3,
INTERNET_SCHEME_SOCKS = 4
}
struct URL_COMPONENTS {
DWORD dwStructSize;
LPWSTR lpszScheme;
DWORD dwSchemeLength;
INTERNET_SCHEME nScheme;
LPWSTR lpszHostName;
DWORD dwHostNameLength;
INTERNET_PORT nPort;
LPWSTR lpszUserName;
DWORD dwUserNameLength;
LPWSTR lpszPassword;
DWORD dwPasswordLength;
LPWSTR lpszUrlPath;
DWORD dwUrlPathLength;
LPWSTR lpszExtraInfo;
DWORD dwExtraInfoLength;
}
alias LPURL_COMPONENTS = URL_COMPONENTS*;
alias URL_COMPONENTSW = URL_COMPONENTS;
alias LPURL_COMPONENTSW = URL_COMPONENTS*;
struct WINHTTP_PROXY_INFO {
DWORD dwAccessType;
LPWSTR lpszProxy;
LPWSTR lpszProxyBypass;
}
alias LPWINHTTP_PROXY_INFO = WINHTTP_PROXY_INFO*;
alias WINHTTP_PROXY_INFOW = WINHTTP_PROXY_INFO;
alias LPWINHTTP_PROXY_INFOW = WINHTTP_PROXY_INFO*;
struct WINHTTP_AUTOPROXY_OPTIONS {
DWORD dwFlags;
DWORD dwAutoDetectFlags;
LPCWSTR lpszAutoConfigUrl;
LPVOID lpvReserved;
DWORD dwReserved;
BOOL fAutoLogonIfChallenged;
}
enum : DWORD {
WINHTTP_AUTOPROXY_AUTO_DETECT = 0x00000001,
WINHTTP_AUTOPROXY_CONFIG_URL = 0x00000002,
WINHTTP_AUTOPROXY_HOST_KEEPCASE = 0x00000004,
WINHTTP_AUTOPROXY_HOST_LOWERCASE = 0x00000008,
WINHTTP_AUTOPROXY_RUN_INPROCESS = 0x00010000,
WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY = 0x00020000,
WINHTTP_AUTOPROXY_NO_DIRECTACCESS = 0x00040000,
WINHTTP_AUTOPROXY_NO_CACHE_CLIENT = 0x00080000,
WINHTTP_AUTOPROXY_NO_CACHE_SVC = 0x00100000,
WINHTTP_AUTOPROXY_SORT_RESULTS = 0x00400000
}
// dwAutoDetectFlags
enum : DWORD {
WINHTTP_AUTO_DETECT_TYPE_DHCP = 0x00000001,
WINHTTP_AUTO_DETECT_TYPE_DNS_A = 0x00000002
}
struct WINHTTP_CERTIFICATE_INFO {
FILETIME ftExpiry;
FILETIME ftStart;
LPWSTR lpszSubjectInfo;
LPWSTR lpszIssuerInfo;
LPWSTR lpszProtocolName;
LPWSTR lpszSignatureAlgName;
LPWSTR lpszEncryptionAlgName;
DWORD dwKeySize;
}
// This structure is only defined #if _WS2DEF_ defined (from <ws2def.h>) - per Windows SDK
align(4)
struct WINHTTP_CONNECTION_INFO {
align(4):
DWORD cbSize;
version (Win64)
DWORD _padding; // cheap trick without the alignment switch over this file
SOCKADDR_STORAGE LocalAddress;
SOCKADDR_STORAGE RemoteAddress;
}
// WinHttpTimeFromSystemTime
enum DWORD WINHTTP_TIME_FORMAT_BUFSIZE = 62;
// CrackUrl, CombineUrl
enum : DWORD {
ICU_NO_ENCODE = 0x20000000,
ICU_DECODE = 0x10000000,
ICU_NO_META = 0x08000000,
ICU_ENCODE_SPACES_ONLY = 0x04000000,
ICU_BROWSER_MODE = 0x02000000,
ICU_ENCODE_PERCENT = 0x00001000
}
// WinHttpCrackUrl, WinHttpCreateUrl
enum : DWORD {
ICU_ESCAPE = 0x80000000,
ICU_ESCAPE_AUTHORITY = 0x00002000,
ICU_REJECT_USERPWD = 0x00004000
}
enum : DWORD {
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0,
WINHTTP_ACCESS_TYPE_NO_PROXY = 1,
WINHTTP_ACCESS_TYPE_NAMED_PROXY = 3,
WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY = 4
}
// WinHttpOpen 'prettifiers'
enum LPCWSTR WINHTTP_NO_PROXY_NAME = null;
enum LPCWSTR WINHTTP_NO_PROXY_BYPASS = null;
enum LPVOID WINHTTP_NO_CLIENT_CERT_CONTEXT = null;
// WinHttp{Query|Set}Option
enum : DWORD {
WINHTTP_FIRST_OPTION = WINHTTP_OPTION_CALLBACK,
WINHTTP_OPTION_CALLBACK = 1,
WINHTTP_OPTION_RESOLVE_TIMEOUT = 2,
WINHTTP_OPTION_CONNECT_TIMEOUT = 3,
WINHTTP_OPTION_CONNECT_RETRIES = 4,
WINHTTP_OPTION_SEND_TIMEOUT = 5,
WINHTTP_OPTION_RECEIVE_TIMEOUT = 6,
WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT = 7,
WINHTTP_OPTION_HANDLE_TYPE = 9,
WINHTTP_OPTION_READ_BUFFER_SIZE = 12,
WINHTTP_OPTION_WRITE_BUFFER_SIZE = 13,
WINHTTP_OPTION_PARENT_HANDLE = 21,
WINHTTP_OPTION_EXTENDED_ERROR = 24,
WINHTTP_OPTION_SECURITY_FLAGS = 31,
WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT = 32,
WINHTTP_OPTION_URL = 34,
WINHTTP_OPTION_SECURITY_KEY_BITNESS = 36,
WINHTTP_OPTION_PROXY = 38,
WINHTTP_OPTION_PROXY_RESULT_ENTRY = 39,
WINHTTP_OPTION_USER_AGENT = 41,
WINHTTP_OPTION_CONTEXT_VALUE = 45,
WINHTTP_OPTION_CLIENT_CERT_CONTEXT = 47,
WINHTTP_OPTION_REQUEST_PRIORITY = 58,
WINHTTP_OPTION_HTTP_VERSION = 59,
WINHTTP_OPTION_DISABLE_FEATURE = 63,
WINHTTP_OPTION_CODEPAGE = 68,
WINHTTP_OPTION_MAX_CONNS_PER_SERVER = 73,
WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER = 74,
WINHTTP_OPTION_AUTOLOGON_POLICY = 77,
WINHTTP_OPTION_SERVER_CERT_CONTEXT = 78,
WINHTTP_OPTION_ENABLE_FEATURE = 79,
WINHTTP_OPTION_WORKER_THREAD_COUNT = 80,
WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT = 81,
WINHTTP_OPTION_PASSPORT_COBRANDING_URL = 82,
WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH = 83,
WINHTTP_OPTION_SECURE_PROTOCOLS = 84,
WINHTTP_OPTION_ENABLETRACING = 85,
WINHTTP_OPTION_PASSPORT_SIGN_OUT = 86,
WINHTTP_OPTION_PASSPORT_RETURN_URL = 87,
WINHTTP_OPTION_REDIRECT_POLICY = 88,
WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS = 89,
WINHTTP_OPTION_MAX_HTTP_STATUS_CONTINUE = 90,
WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE = 91,
WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE = 92,
WINHTTP_OPTION_CONNECTION_INFO = 93,
WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST = 94,
WINHTTP_OPTION_SPN = 96,
WINHTTP_OPTION_GLOBAL_PROXY_CREDS = 97,
WINHTTP_OPTION_GLOBAL_SERVER_CREDS = 98,
WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT = 99,
WINHTTP_OPTION_REJECT_USERPWD_IN_URL = 100,
WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS = 101,
WINHTTP_OPTION_RECEIVE_PROXY_CONNECT_RESPONSE = 103,
WINHTTP_OPTION_IS_PROXY_CONNECT_RESPONSE = 104,
WINHTTP_OPTION_SERVER_SPN_USED = 106,
WINHTTP_OPTION_PROXY_SPN_USED = 107,
WINHTTP_OPTION_SERVER_CBT = 108,
WINHTTP_OPTION_UNSAFE_HEADER_PARSING = 110,
WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS = 111,
WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET = 114,
WINHTTP_OPTION_WEB_SOCKET_CLOSE_TIMEOUT = 115,
WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL = 116,
WINHTTP_OPTION_DECOMPRESSION = 118,
WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE = 122,
WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE = 123,
//WINHTTP_LAST_OPTION => Moved outside of enum - static if () constraints within enums
WINHTTP_OPTION_USERNAME = 0x1000,
WINHTTP_OPTION_PASSWORD = 0x1001,
WINHTTP_OPTION_PROXY_USERNAME = 0x1002,
WINHTTP_OPTION_PROXY_PASSWORD = 0x1003,
WINHTTP_CONNS_PER_SERVER_UNLIMITED = 0xFFFFFFFF,
WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM = 0,
WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW = 1,
WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH = 2,
WINHTTP_AUTOLOGON_SECURITY_LEVEL_DEFAULT = WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM,
WINHTTP_OPTION_REDIRECT_POLICY_NEVER = 0,
WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP = 1,
WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS = 2,
WINHTTP_OPTION_REDIRECT_POLICY_LAST = WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS,
WINHTTP_OPTION_REDIRECT_POLICY_DEFAULT = WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP,
WINHTTP_DISABLE_PASSPORT_AUTH = 0x00000000,
WINHTTP_ENABLE_PASSPORT_AUTH = 0x10000000,
WINHTTP_DISABLE_PASSPORT_KEYRING = 0x20000000,
WINHTTP_ENABLE_PASSPORT_KEYRING = 0x40000000,
WINHTTP_DISABLE_COOKIES = 0x00000001,
WINHTTP_DISABLE_REDIRECTS = 0x00000002,
WINHTTP_DISABLE_AUTHENTICATION = 0x00000004,
WINHTTP_DISABLE_KEEP_ALIVE = 0x00000008,
WINHTTP_ENABLE_SSL_REVOCATION = 0x00000001,
WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION = 0x00000002,
WINHTTP_DISABLE_SPN_SERVER_PORT = 0x00000000,
WINHTTP_ENABLE_SPN_SERVER_PORT = 0x00000001,
WINHTTP_OPTION_SPN_MASK = WINHTTP_ENABLE_SPN_SERVER_PORT
}
// Windows 8.1 SDK:
static if (_WIN32_WINNT >= 0x602) {
enum DWORD WINHTTP_LAST_OPTION = WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE;
} else { // Windows 7.0A SDK:
enum DWORD WINHTTP_LAST_OPTION = WINHTTP_OPTION_SERVER_CBT;
}
enum : DWORD {
WINHTTP_DECOMPRESSION_FLAG_GZIP = 0x00000001,
WINHTTP_DECOMPRESSION_FLAG_DEFLATE = 0x00000002,
WINHTTP_DECOMPRESSION_FLAG_ALL = (WINHTTP_DECOMPRESSION_FLAG_GZIP | WINHTTP_DECOMPRESSION_FLAG_DEFLATE)
}
struct WINHTTP_CREDS {
LPSTR lpszUserName;
LPSTR lpszPassword;
LPSTR lpszRealm;
DWORD dwAuthScheme;
LPSTR lpszHostName;
DWORD dwPort;
}
alias PWINHTTP_CREDS = WINHTTP_CREDS*;
struct WINHTTP_CREDS_EX {
LPSTR lpszUserName;
LPSTR lpszPassword;
LPSTR lpszRealm;
DWORD dwAuthScheme;
LPSTR lpszHostName;
DWORD dwPort;
LPSTR lpszUrl;
}
alias PWINHTTP_CREDS_EX = WINHTTP_CREDS_EX*;
enum : DWORD {
WINHTTP_HANDLE_TYPE_SESSION = 1,
WINHTTP_HANDLE_TYPE_CONNECT = 2,
WINHTTP_HANDLE_TYPE_REQUEST = 3,
WINHTTP_AUTH_SCHEME_BASIC = 0x00000001,
WINHTTP_AUTH_SCHEME_NTLM = 0x00000002,
WINHTTP_AUTH_SCHEME_PASSPORT = 0x00000004,
WINHTTP_AUTH_SCHEME_DIGEST = 0x00000008,
WINHTTP_AUTH_SCHEME_NEGOTIATE = 0x00000010,
WINHTTP_AUTH_TARGET_SERVER = 0x00000000,
WINHTTP_AUTH_TARGET_PROXY = 0x00000001,
SECURITY_FLAG_SECURE = 0x00000001,
SECURITY_FLAG_STRENGTH_WEAK = 0x10000000,
SECURITY_FLAG_STRENGTH_MEDIUM = 0x40000000,
SECURITY_FLAG_STRENGTH_STRONG = 0x20000000,
WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED = 0x00000001,
WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT = 0x00000002,
WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED = 0x00000004,
WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA = 0x00000008,
WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID = 0x00000010,
WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID = 0x00000020,
WINHTTP_CALLBACK_STATUS_FLAG_CERT_WRONG_USAGE = 0x00000040,
WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR = 0x80000000,
WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 = 0x00000008,
WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 = 0x00000020,
WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 = 0x00000080,
WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 = 0x00000200,
WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 = 0x00000800,
WINHTTP_FLAG_SECURE_PROTOCOL_ALL = (WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 |
WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 |
WINHTTP_FLAG_SECURE_PROTOCOL_TLS1)
}
alias extern(Windows) int fnWINHTTP_STATUS_CALLBACK(HINTERNET hInternet, DWORD_PTR dwContext,
DWORD dwInternetStatus, LPVOID lpvStatusInformation,DWORD dwStatusInformationLength);
alias WINHTTP_STATUS_CALLBACK = fnWINHTTP_STATUS_CALLBACK*;
alias LPWINHTTP_STATUS_CALLBACK = WINHTTP_STATUS_CALLBACK*;
enum : DWORD {
WINHTTP_CALLBACK_STATUS_RESOLVING_NAME = 0x00000001,
WINHTTP_CALLBACK_STATUS_NAME_RESOLVED = 0x00000002,
WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER = 0x00000004,
WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER = 0x00000008,
WINHTTP_CALLBACK_STATUS_SENDING_REQUEST = 0x00000010,
WINHTTP_CALLBACK_STATUS_REQUEST_SENT = 0x00000020,
WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE = 0x00000040,
WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED = 0x00000080,
WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION = 0x00000100,
WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED = 0x00000200,
WINHTTP_CALLBACK_STATUS_HANDLE_CREATED = 0x00000400,
WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING = 0x00000800,
WINHTTP_CALLBACK_STATUS_DETECTING_PROXY = 0x00001000,
WINHTTP_CALLBACK_STATUS_REDIRECT = 0x00004000,
WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE = 0x00008000,
WINHTTP_CALLBACK_STATUS_SECURE_FAILURE = 0x00010000,
WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE = 0x00020000,
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE = 0x00040000,
WINHTTP_CALLBACK_STATUS_READ_COMPLETE = 0x00080000,
WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE = 0x00100000,
WINHTTP_CALLBACK_STATUS_REQUEST_ERROR = 0x00200000,
WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE = 0x00400000
}
enum : DWORD {
WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE = 0x01000000,
WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE = 0x02000000,
WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE = 0x04000000
}
enum : DWORD {
API_RECEIVE_RESPONSE = 1,
API_QUERY_DATA_AVAILABLE = 2,
API_READ_DATA = 3,
API_WRITE_DATA = 4,
API_SEND_REQUEST = 5
}
enum : DWORD {
WINHTTP_CALLBACK_FLAG_RESOLVE_NAME = (WINHTTP_CALLBACK_STATUS_RESOLVING_NAME | WINHTTP_CALLBACK_STATUS_NAME_RESOLVED),
WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER = (WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER),
WINHTTP_CALLBACK_FLAG_SEND_REQUEST = (WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | WINHTTP_CALLBACK_STATUS_REQUEST_SENT),
WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE = (WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE | WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED),
WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION = (WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION | WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED),
WINHTTP_CALLBACK_FLAG_HANDLES = (WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING),
WINHTTP_CALLBACK_FLAG_DETECTING_PROXY = WINHTTP_CALLBACK_STATUS_DETECTING_PROXY,
WINHTTP_CALLBACK_FLAG_REDIRECT = WINHTTP_CALLBACK_STATUS_REDIRECT,
WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE = WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE,
WINHTTP_CALLBACK_FLAG_SECURE_FAILURE = WINHTTP_CALLBACK_STATUS_SECURE_FAILURE,
WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE = WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE,
WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE = WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE,
WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE = WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE,
WINHTTP_CALLBACK_FLAG_READ_COMPLETE = WINHTTP_CALLBACK_STATUS_READ_COMPLETE,
WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE = WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE,
WINHTTP_CALLBACK_FLAG_REQUEST_ERROR = WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
}
enum DWORD WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE = WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE;
// Windows 8+/2012+
static if (_WIN32_WINNT >= 0x602) {
enum DWORD WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS = (WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
| WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
| WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
| WINHTTP_CALLBACK_STATUS_READ_COMPLETE
| WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE
| WINHTTP_CALLBACK_STATUS_REQUEST_ERROR);
} else {
enum DWORD WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS = (WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
| WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
| WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
| WINHTTP_CALLBACK_STATUS_READ_COMPLETE
| WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE
| WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
| WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE);
}
enum DWORD WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS = 0xffffffff;
enum WINHTTP_INVALID_STATUS_CALLBACK = (cast(WINHTTP_STATUS_CALLBACK)(-1L));
enum : DWORD {
WINHTTP_QUERY_MIME_VERSION = 0,
WINHTTP_QUERY_CONTENT_TYPE = 1,
WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING = 2,
WINHTTP_QUERY_CONTENT_ID = 3,
WINHTTP_QUERY_CONTENT_DESCRIPTION = 4,
WINHTTP_QUERY_CONTENT_LENGTH = 5,
WINHTTP_QUERY_CONTENT_LANGUAGE = 6,
WINHTTP_QUERY_ALLOW = 7,
WINHTTP_QUERY_PUBLIC = 8,
WINHTTP_QUERY_DATE = 9,
WINHTTP_QUERY_EXPIRES = 10,
WINHTTP_QUERY_LAST_MODIFIED = 11,
WINHTTP_QUERY_MESSAGE_ID = 12,
WINHTTP_QUERY_URI = 13,
WINHTTP_QUERY_DERIVED_FROM = 14,
WINHTTP_QUERY_COST = 15,
WINHTTP_QUERY_LINK = 16,
WINHTTP_QUERY_PRAGMA = 17,
WINHTTP_QUERY_VERSION = 18,
WINHTTP_QUERY_STATUS_CODE = 19,
WINHTTP_QUERY_STATUS_TEXT = 20,
WINHTTP_QUERY_RAW_HEADERS = 21,
WINHTTP_QUERY_RAW_HEADERS_CRLF = 22,
WINHTTP_QUERY_CONNECTION = 23,
WINHTTP_QUERY_ACCEPT = 24,
WINHTTP_QUERY_ACCEPT_CHARSET = 25,
WINHTTP_QUERY_ACCEPT_ENCODING = 26,
WINHTTP_QUERY_ACCEPT_LANGUAGE = 27,
WINHTTP_QUERY_AUTHORIZATION = 28,
WINHTTP_QUERY_CONTENT_ENCODING = 29,
WINHTTP_QUERY_FORWARDED = 30,
WINHTTP_QUERY_FROM = 31,
WINHTTP_QUERY_IF_MODIFIED_SINCE = 32,
WINHTTP_QUERY_LOCATION = 33,
WINHTTP_QUERY_ORIG_URI = 34,
WINHTTP_QUERY_REFERER = 35,
WINHTTP_QUERY_RETRY_AFTER = 36,
WINHTTP_QUERY_SERVER = 37,
WINHTTP_QUERY_TITLE = 38,
WINHTTP_QUERY_USER_AGENT = 39,
WINHTTP_QUERY_WWW_AUTHENTICATE = 40,
WINHTTP_QUERY_PROXY_AUTHENTICATE = 41,
WINHTTP_QUERY_ACCEPT_RANGES = 42,
WINHTTP_QUERY_SET_COOKIE = 43,
WINHTTP_QUERY_COOKIE = 44,
WINHTTP_QUERY_REQUEST_METHOD = 45,
WINHTTP_QUERY_REFRESH = 46,
WINHTTP_QUERY_CONTENT_DISPOSITION = 47,
// HTTP 1.1 defined headers
WINHTTP_QUERY_AGE = 48,
WINHTTP_QUERY_CACHE_CONTROL = 49,
WINHTTP_QUERY_CONTENT_BASE = 50,
WINHTTP_QUERY_CONTENT_LOCATION = 51,
WINHTTP_QUERY_CONTENT_MD5 = 52,
WINHTTP_QUERY_CONTENT_RANGE = 53,
WINHTTP_QUERY_ETAG = 54,
WINHTTP_QUERY_HOST = 55,
WINHTTP_QUERY_IF_MATCH = 56,
WINHTTP_QUERY_IF_NONE_MATCH = 57,
WINHTTP_QUERY_IF_RANGE = 58,
WINHTTP_QUERY_IF_UNMODIFIED_SINCE = 59,
WINHTTP_QUERY_MAX_FORWARDS = 60,
WINHTTP_QUERY_PROXY_AUTHORIZATION = 61,
WINHTTP_QUERY_RANGE = 62,
WINHTTP_QUERY_TRANSFER_ENCODING = 63,
WINHTTP_QUERY_UPGRADE = 64,
WINHTTP_QUERY_VARY = 65,
WINHTTP_QUERY_VIA = 66,
WINHTTP_QUERY_WARNING = 67,
WINHTTP_QUERY_EXPECT = 68,
WINHTTP_QUERY_PROXY_CONNECTION = 69,
WINHTTP_QUERY_UNLESS_MODIFIED_SINCE = 70,
WINHTTP_QUERY_PROXY_SUPPORT = 75,
WINHTTP_QUERY_AUTHENTICATION_INFO = 76,
WINHTTP_QUERY_PASSPORT_URLS = 77,
WINHTTP_QUERY_PASSPORT_CONFIG = 78,
WINHTTP_QUERY_MAX = 78,
WINHTTP_QUERY_CUSTOM = 65535,
WINHTTP_QUERY_FLAG_REQUEST_HEADERS = 0x80000000,
WINHTTP_QUERY_FLAG_SYSTEMTIME = 0x40000000,
WINHTTP_QUERY_FLAG_NUMBER = 0x20000000
}
enum : DWORD {
HTTP_STATUS_CONTINUE = 100,
HTTP_STATUS_SWITCH_PROTOCOLS = 101,
HTTP_STATUS_OK = 200,
HTTP_STATUS_CREATED = 201,
HTTP_STATUS_ACCEPTED = 202,
HTTP_STATUS_PARTIAL = 203,
HTTP_STATUS_NO_CONTENT = 204,
HTTP_STATUS_RESET_CONTENT = 205,
HTTP_STATUS_PARTIAL_CONTENT = 206,
HTTP_STATUS_WEBDAV_MULTI_STATUS = 207,
HTTP_STATUS_AMBIGUOUS = 300,
HTTP_STATUS_MOVED = 301,
HTTP_STATUS_REDIRECT = 302,
HTTP_STATUS_REDIRECT_METHOD = 303,
HTTP_STATUS_NOT_MODIFIED = 304,
HTTP_STATUS_USE_PROXY = 305,
HTTP_STATUS_REDIRECT_KEEP_VERB = 307,
HTTP_STATUS_BAD_REQUEST = 400,
HTTP_STATUS_DENIED = 401,
HTTP_STATUS_PAYMENT_REQ = 402,
HTTP_STATUS_FORBIDDEN = 403,
HTTP_STATUS_NOT_FOUND = 404,
HTTP_STATUS_BAD_METHOD = 405,
HTTP_STATUS_NONE_ACCEPTABLE = 406,
HTTP_STATUS_PROXY_AUTH_REQ = 407,
HTTP_STATUS_REQUEST_TIMEOUT = 408,
HTTP_STATUS_CONFLICT = 409,
HTTP_STATUS_GONE = 410,
HTTP_STATUS_LENGTH_REQUIRED = 411,
HTTP_STATUS_PRECOND_FAILED = 412,
HTTP_STATUS_REQUEST_TOO_LARGE = 413,
HTTP_STATUS_URI_TOO_LONG = 414,
HTTP_STATUS_UNSUPPORTED_MEDIA = 415,
HTTP_STATUS_RETRY_WITH = 449,
HTTP_STATUS_SERVER_ERROR = 500,
HTTP_STATUS_NOT_SUPPORTED = 501,
HTTP_STATUS_BAD_GATEWAY = 502,
HTTP_STATUS_SERVICE_UNAVAIL = 503,
HTTP_STATUS_GATEWAY_TIMEOUT = 504,
HTTP_STATUS_VERSION_NOT_SUP = 505,
HTTP_STATUS_FIRST = HTTP_STATUS_CONTINUE,
HTTP_STATUS_LAST = HTTP_STATUS_VERSION_NOT_SUP
}
enum LPCWSTR WINHTTP_NO_REFERER = null;
enum LPCWSTR * WINHTTP_DEFAULT_ACCEPT_TYPES = null;
enum : DWORD {
WINHTTP_ADDREQ_INDEX_MASK = 0x0000FFFF,
WINHTTP_ADDREQ_FLAGS_MASK = 0xFFFF0000,
WINHTTP_ADDREQ_FLAG_ADD_IF_NEW = 0x10000000,
WINHTTP_ADDREQ_FLAG_ADD = 0x20000000,
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA = 0x40000000,
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON = 0x01000000,
WINHTTP_ADDREQ_FLAG_COALESCE = WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA,
WINHTTP_ADDREQ_FLAG_REPLACE = 0x80000000,
WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH = 0
}
enum LPCWSTR WINHTTP_NO_ADDITIONAL_HEADERS = null;
enum LPVOID WINHTTP_NO_REQUEST_DATA = null;
enum LPCWSTR WINHTTP_HEADER_NAME_BY_INDEX = null;
enum LPVOID WINHTTP_NO_OUTPUT_BUFFER = null;
enum LPDWORD WINHTTP_NO_HEADER_INDEX = null;
struct WINHTTP_CURRENT_USER_IE_PROXY_CONFIG {
BOOL fAutoDetect;
LPWSTR lpszAutoConfigUrl;
LPWSTR lpszProxy;
LPWSTR lpszProxyBypass;
}
// WinHttp API error returns
enum : DWORD {
WINHTTP_ERROR_BASE = 12000,
ERROR_WINHTTP_OUT_OF_HANDLES = (WINHTTP_ERROR_BASE + 1),
ERROR_WINHTTP_TIMEOUT = (WINHTTP_ERROR_BASE + 2),
ERROR_WINHTTP_INTERNAL_ERROR = (WINHTTP_ERROR_BASE + 4),
ERROR_WINHTTP_INVALID_URL = (WINHTTP_ERROR_BASE + 5),
ERROR_WINHTTP_UNRECOGNIZED_SCHEME = (WINHTTP_ERROR_BASE + 6),
ERROR_WINHTTP_NAME_NOT_RESOLVED = (WINHTTP_ERROR_BASE + 7),
ERROR_WINHTTP_INVALID_OPTION = (WINHTTP_ERROR_BASE + 9),
ERROR_WINHTTP_OPTION_NOT_SETTABLE = (WINHTTP_ERROR_BASE + 11),
ERROR_WINHTTP_SHUTDOWN = (WINHTTP_ERROR_BASE + 12),
ERROR_WINHTTP_LOGIN_FAILURE = (WINHTTP_ERROR_BASE + 15),
ERROR_WINHTTP_OPERATION_CANCELLED = (WINHTTP_ERROR_BASE + 17),
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE = (WINHTTP_ERROR_BASE + 18),
ERROR_WINHTTP_INCORRECT_HANDLE_STATE = (WINHTTP_ERROR_BASE + 19),
ERROR_WINHTTP_CANNOT_CONNECT = (WINHTTP_ERROR_BASE + 29),
ERROR_WINHTTP_CONNECTION_ERROR = (WINHTTP_ERROR_BASE + 30),
ERROR_WINHTTP_RESEND_REQUEST = (WINHTTP_ERROR_BASE + 32),
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED = (WINHTTP_ERROR_BASE + 44),
ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN = (WINHTTP_ERROR_BASE + 100),
ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND = (WINHTTP_ERROR_BASE + 101),
ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND = (WINHTTP_ERROR_BASE + 102),
ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN = (WINHTTP_ERROR_BASE + 103),
ERROR_WINHTTP_HEADER_NOT_FOUND = (WINHTTP_ERROR_BASE + 150),
ERROR_WINHTTP_INVALID_SERVER_RESPONSE = (WINHTTP_ERROR_BASE + 152),
ERROR_WINHTTP_INVALID_HEADER = (WINHTTP_ERROR_BASE + 153),
ERROR_WINHTTP_INVALID_QUERY_REQUEST = (WINHTTP_ERROR_BASE + 154),
ERROR_WINHTTP_HEADER_ALREADY_EXISTS = (WINHTTP_ERROR_BASE + 155),
ERROR_WINHTTP_REDIRECT_FAILED = (WINHTTP_ERROR_BASE + 156),
ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR = (WINHTTP_ERROR_BASE + 178),
ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT = (WINHTTP_ERROR_BASE + 166),
ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT = (WINHTTP_ERROR_BASE + 167),
ERROR_WINHTTP_UNHANDLED_SCRIPT_TYPE = (WINHTTP_ERROR_BASE + 176),
ERROR_WINHTTP_SCRIPT_EXECUTION_ERROR = (WINHTTP_ERROR_BASE + 177),
ERROR_WINHTTP_NOT_INITIALIZED = (WINHTTP_ERROR_BASE + 172),
ERROR_WINHTTP_SECURE_FAILURE = (WINHTTP_ERROR_BASE + 175),
ERROR_WINHTTP_SECURE_CERT_DATE_INVALID = (WINHTTP_ERROR_BASE + 37),
ERROR_WINHTTP_SECURE_CERT_CN_INVALID = (WINHTTP_ERROR_BASE + 38),
ERROR_WINHTTP_SECURE_INVALID_CA = (WINHTTP_ERROR_BASE + 45),
ERROR_WINHTTP_SECURE_CERT_REV_FAILED = (WINHTTP_ERROR_BASE + 57),
ERROR_WINHTTP_SECURE_CHANNEL_ERROR = (WINHTTP_ERROR_BASE + 157),
ERROR_WINHTTP_SECURE_INVALID_CERT = (WINHTTP_ERROR_BASE + 169),
ERROR_WINHTTP_SECURE_CERT_REVOKED = (WINHTTP_ERROR_BASE + 170),
ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE = (WINHTTP_ERROR_BASE + 179),
ERROR_WINHTTP_AUTODETECTION_FAILED = (WINHTTP_ERROR_BASE + 180),
ERROR_WINHTTP_HEADER_COUNT_EXCEEDED = (WINHTTP_ERROR_BASE + 181),
ERROR_WINHTTP_HEADER_SIZE_OVERFLOW = (WINHTTP_ERROR_BASE + 182),
ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW = (WINHTTP_ERROR_BASE + 183),
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW = (WINHTTP_ERROR_BASE + 184),
ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY = (WINHTTP_ERROR_BASE + 185),
ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY = (WINHTTP_ERROR_BASE + 186),
WINHTTP_ERROR_LAST = (WINHTTP_ERROR_BASE + 186)
}
enum : DWORD {
WINHTTP_RESET_STATE = 0x00000001,
WINHTTP_RESET_SWPAD_CURRENT_NETWORK = 0x00000002,
WINHTTP_RESET_SWPAD_ALL = 0x00000004,
WINHTTP_RESET_SCRIPT_CACHE = 0x00000008,
WINHTTP_RESET_ALL = 0x0000FFFF,
WINHTTP_RESET_NOTIFY_NETWORK_CHANGED = 0x00010000,
WINHTTP_RESET_OUT_OF_PROC = 0x00020000
}
enum : DWORD {
WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH = 123,
WINHTTP_WEB_SOCKET_MIN_KEEPALIVE_VALUE = 15000
}
// Version(Windows8) || Version(Windows2012):
static if (_WIN32_WINNT >= 0x602)
{
enum WINHTTP_WEB_SOCKET_OPERATION : DWORD
{
WINHTTP_WEB_SOCKET_SEND_OPERATION = 0,
WINHTTP_WEB_SOCKET_RECEIVE_OPERATION = 1,
WINHTTP_WEB_SOCKET_CLOSE_OPERATION = 2,
WINHTTP_WEB_SOCKET_SHUTDOWN_OPERATION = 3
}
enum WINHTTP_WEB_SOCKET_BUFFER_TYPE : DWORD
{
WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE = 0,
WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE = 1,
WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE = 2,
WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE = 3,
WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE = 4
}
enum WINHTTP_WEB_SOCKET_CLOSE_STATUS : DWORD
{
WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS = 1000,
WINHTTP_WEB_SOCKET_ENDPOINT_TERMINATED_CLOSE_STATUS = 1001,
WINHTTP_WEB_SOCKET_PROTOCOL_ERROR_CLOSE_STATUS = 1002,
WINHTTP_WEB_SOCKET_INVALID_DATA_TYPE_CLOSE_STATUS = 1003,
WINHTTP_WEB_SOCKET_EMPTY_CLOSE_STATUS = 1005,
WINHTTP_WEB_SOCKET_ABORTED_CLOSE_STATUS = 1006,
WINHTTP_WEB_SOCKET_INVALID_PAYLOAD_CLOSE_STATUS = 1007,
WINHTTP_WEB_SOCKET_POLICY_VIOLATION_CLOSE_STATUS = 1008,
WINHTTP_WEB_SOCKET_MESSAGE_TOO_BIG_CLOSE_STATUS = 1009,
WINHTTP_WEB_SOCKET_UNSUPPORTED_EXTENSIONS_CLOSE_STATUS = 1010,
WINHTTP_WEB_SOCKET_SERVER_ERROR_CLOSE_STATUS = 1011,
WINHTTP_WEB_SOCKET_SECURE_HANDSHAKE_ERROR_CLOSE_STATUS = 1015
}
struct WINHTTP_PROXY_RESULT_ENTRY {
BOOL fProxy;
BOOL fBypass;
INTERNET_SCHEME ProxyScheme;
PWSTR pwszProxy;
INTERNET_PORT ProxyPort;
}
struct WINHTTP_PROXY_RESULT {
DWORD cEntries;
WINHTTP_PROXY_RESULT_ENTRY *pEntries;
}
struct WINHTTP_WEB_SOCKET_ASYNC_RESULT {
WINHTTP_ASYNC_RESULT AsyncResult;
WINHTTP_WEB_SOCKET_OPERATION Operation;
}
struct WINHTTP_WEB_SOCKET_STATUS {
DWORD dwBytesTransferred;
WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType;
}
}
extern (Windows) {
BOOL WinHttpAddRequestHeaders(HINTERNET hRequest, LPCWSTR pwszHeaders, DWORD dwHeadersLength, DWORD dwModifiers);
BOOL WinHttpCheckPlatform();
BOOL WinHttpCloseHandle(HINTERNET hInternet);
HINTERNET WinHttpConnect(HINTERNET hSession, LPCWSTR pswzServerName, INTERNET_PORT nServerPort, DWORD dwReserved);
BOOL WinHttpCrackUrl(LPCWSTR pwszUrl, DWORD dwUrlLength, DWORD dwFlags, LPURL_COMPONENTS lpUrlComponents);
BOOL WinHttpCreateUrl(LPURL_COMPONENTS lpUrlComponents, DWORD dwFlags, LPWSTR pwszUrl, LPDWORD lpdwUrlLength);
BOOL WinHttpDetectAutoProxyConfigUrl(DWORD dwAutoDetectFlags, LPWSTR *ppwszAutoConfigUrl);
BOOL WinHttpGetDefaultProxyConfiguration(WINHTTP_PROXY_INFO *pProxyInfo);
BOOL WinHttpGetIEProxyConfigForCurrentUser(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG *pProxyConfig);
BOOL WinHttpGetProxyForUrl(HINTERNET hSession, LPCWSTR lpcwszUrl,
WINHTTP_AUTOPROXY_OPTIONS *pAutoProxyOptions, WINHTTP_PROXY_INFO *pProxyInfo);
HINTERNET WinHttpOpen(LPCWSTR pwszUserAgent, DWORD dwAccessType, LPCWSTR pwszProxyName,
LPCWSTR pwszProxyBypass, DWORD dwFlags);
HINTERNET WinHttpOpenRequest(HINTERNET hConnect, LPCWSTR pwszVerb, LPCWSTR pwszObjectName,
LPCWSTR pwszVersion, LPCWSTR pwszReferrer,
LPCWSTR *ppwszAcceptTypes, DWORD dwFlags);
BOOL WinHttpQueryAuthSchemes(HINTERNET hRequest, LPDWORD lpdwSupportedSchemes,
LPDWORD lpdwFirstScheme, LPDWORD pdwAuthTarget);
BOOL WinHttpQueryDataAvailable(HINTERNET hRequest, LPDWORD lpdwNumberOfBytesAvailable);
BOOL WinHttpQueryHeaders(HINTERNET hRequest, DWORD dwInfoLevel, LPCWSTR pwszName,
LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex);
BOOL WinHttpQueryOption(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer,
LPDWORD lpdwBufferLength);
BOOL WinHttpReadData(HINTERNET hRequest, LPVOID lpBuffer, DWORD dwNumberOfBytesToRead,
LPDWORD lpdwNumberOfBytesRead);
BOOL WinHttpReceiveResponse(HINTERNET hRequest, LPVOID lpReserved);
BOOL WinHttpSendRequest(HINTERNET hRequest, LPCWSTR pwszHeaders, DWORD dwHeadersLength,
LPVOID lpOptional, DWORD dwOptionalLength, DWORD dwTotalLength, DWORD_PTR dwContext);
BOOL WinHttpSetCredentials(HINTERNET hRequest, DWORD AuthTargets, DWORD AuthScheme,
LPCWSTR pwszUserName, LPCWSTR pwszPassword, LPVOID pAuthParams);
BOOL WinHttpSetDefaultProxyConfiguration(WINHTTP_PROXY_INFO *pProxyInfo);
BOOL WinHttpSetOption(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength);
WINHTTP_STATUS_CALLBACK WinHttpSetStatusCallback(HINTERNET hInternet,
WINHTTP_STATUS_CALLBACK lpfnInternetCallback,
DWORD dwNotificationFlags, DWORD_PTR dwReserved);
BOOL WinHttpSetTimeouts(HINTERNET hInternet, int dwResolveTimeout, int dwConnectTimeout,
int dwSendTimeout, int dwReceiveTimeout);
BOOL WinHttpTimeFromSystemTime(const SYSTEMTIME *pst, LPWSTR pwszTime);
BOOL WinHttpTimeToSystemTime(LPCWSTR pwszTime, SYSTEMTIME *pst);
BOOL WinHttpWriteData(HINTERNET hRequest, LPCVOID lpBuffer, DWORD dwNumberOfBytesToWrite,
LPDWORD lpdwNumberOfBytesWritten);
// Version(Windows8) || Version(Windows2012):
static if (_WIN32_WINNT >= 0x602) {
DWORD WinHttpCreateProxyResolver(HINTERNET hSession, HINTERNET *phResolver);
void WinHttpFreeProxyResult(WINHTTP_PROXY_RESULT *pProxyResult);
DWORD WinHttpGetProxyForUrlEx(HINTERNET hResolver, PCWSTR pcwszUrl,
WINHTTP_AUTOPROXY_OPTIONS *pAutoProxyOptions, DWORD_PTR pContext);
DWORD WinHttpGetProxyResult(HINTERNET hResolver, WINHTTP_PROXY_RESULT *pProxyResult);
DWORD WinHttpResetAutoProxy(HINTERNET hSession, DWORD dwFlags);
DWORD WinHttpWebSocketClose(HINTERNET hWebSocket, USHORT usStatus, PVOID pvReason, DWORD dwReasonLength);
HINTERNET WinHttpWebSocketCompleteUpgrade(HINTERNET hRequest, DWORD_PTR pContext);
DWORD WinHttpWebSocketQueryCloseStatus(HINTERNET hWebSocket, USHORT *pusStatus, PVOID pvReason,
DWORD dwReasonLength, DWORD *pdwReasonLengthConsumed);
DWORD WinHttpWebSocketReceive(HINTERNET hWebSocket, PVOID pvBuffer, DWORD dwBufferLength,
DWORD *pdwBytesRead, WINHTTP_WEB_SOCKET_BUFFER_TYPE *peBufferType);
DWORD WinHttpWebSocketSend(HINTERNET hWebSocket, WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType,
PVOID pvBuffer, DWORD dwBufferLength);
DWORD WinHttpWebSocketShutdown(HINTERNET hWebSocket, USHORT usStatus, PVOID pvReason, DWORD dwReasonLength);
}
}