Browse Source

* Winhttp unit added (bug id 30650)

git-svn-id: trunk@36677 -
michael 8 years ago
parent
commit
feebdbfc92

+ 1 - 0
.gitattributes

@@ -8020,6 +8020,7 @@ packages/winunits-base/src/tmschema.inc svneol=native#text/plain
 packages/winunits-base/src/typelib.pas svneol=native#text/plain
 packages/winunits-base/src/typelib.pas svneol=native#text/plain
 packages/winunits-base/src/urlmon.pp svneol=native#text/plain
 packages/winunits-base/src/urlmon.pp svneol=native#text/plain
 packages/winunits-base/src/uxtheme.pp svneol=native#text/plain
 packages/winunits-base/src/uxtheme.pp svneol=native#text/plain
+packages/winunits-base/src/winhttp.pp svneol=native#text/plain
 packages/winunits-base/src/wininet.pp svneol=native#text/plain
 packages/winunits-base/src/wininet.pp svneol=native#text/plain
 packages/winunits-base/src/winspool.pp svneol=native#text/pascal
 packages/winunits-base/src/winspool.pp svneol=native#text/pascal
 packages/winunits-base/src/winutils.pp svneol=native#text/pascal
 packages/winunits-base/src/winutils.pp svneol=native#text/pascal

+ 2 - 0
packages/winunits-base/fpmake.pp

@@ -52,6 +52,7 @@ begin
           AddUnit('shfolder');
           AddUnit('shfolder');
           AddUnit('richedit');
           AddUnit('richedit');
           AddUnit('imagehlp');
           AddUnit('imagehlp');
+          AddUnit('winhttp');
 	  AddUnit('wininet');
 	  AddUnit('wininet');
           AddUnit('uxtheme');
           AddUnit('uxtheme');
           AddInclude('tmschema.inc');
           AddInclude('tmschema.inc');
@@ -88,6 +89,7 @@ begin
     T:=P.Targets.AddImplicitUnit('winver.pp');
     T:=P.Targets.AddImplicitUnit('winver.pp');
     T:=P.Targets.AddImplicitUnit('wininet.pp');
     T:=P.Targets.AddImplicitUnit('wininet.pp');
     T:=P.Targets.AddImplicitUnit('imagehlp.pp');
     T:=P.Targets.AddImplicitUnit('imagehlp.pp');
+    T:=P.Targets.AddImplicitUnit('winhttp.pp');
     T:=P.Targets.AddImplicitUnit('commdlg.pp');
     T:=P.Targets.AddImplicitUnit('commdlg.pp');
     T:=P.Targets.AddImplicitUnit('wininet.pp');
     T:=P.Targets.AddImplicitUnit('wininet.pp');
     T:=P.Targets.AddImplicitUnit('uxtheme.pp');
     T:=P.Targets.AddImplicitUnit('uxtheme.pp');

+ 1 - 1
packages/winunits-base/src/buildwinutilsbase.pp

@@ -25,7 +25,7 @@ uses
     ole2, activex, shellapi, shlobj, oleserver,  shfolder, richedit,
     ole2, activex, shellapi, shlobj, oleserver,  shfolder, richedit,
     imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp, winutils,
     imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp, winutils,
     comserv, winspool, imm, imm_dyn, nb30, stdole2,
     comserv, winspool, imm, imm_dyn, nb30, stdole2,
-    eventsink, typelib, libkinect10, urlmon,
+    eventsink, typelib, libkinect10, urlmon, winhttp,
     shlwapi;
     shlwapi;
 
 
 implementation
 implementation

+ 763 - 0
packages/winunits-base/src/winhttp.pp

@@ -0,0 +1,763 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2017 by Michael Van Canneyt
+    member of the Free Pascal development team.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+    Original copyright statement follows.
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Module Name:
+
+    winhttp.h
+
+Abstract:
+
+    Contains manifests, macros, types and prototypes for Windows HTTP Services
+
+}	
+unit winhttp;
+interface
+
+uses windows;
+
+{
+  Automatically converted by H2Pas 1.0.0 from winhttp.h
+  The following command line parameters were used:
+    -D
+    -w
+    -S
+    -l
+    winhttp.dll
+    winhttp.h
+}
+
+  const
+    External_library='winhttp.dll'; {Setup as you need}
+
+{$IFDEF FPC}
+{$PACKRECORDS C}
+{$ENDIF}
+
+
+
+
+  const
+    INTERNET_DEFAULT_PORT = 0;    
+    INTERNET_DEFAULT_HTTP_PORT = 80;    
+    INTERNET_DEFAULT_HTTPS_PORT = 443;    
+    WINHTTP_FLAG_ASYNC = $10000000;    
+    WINHTTP_FLAG_SECURE = $00800000;    
+    WINHTTP_FLAG_ESCAPE_PERCENT = $00000004;    
+    WINHTTP_FLAG_NULL_CODEPAGE = $00000008;    
+    WINHTTP_FLAG_BYPASS_PROXY_CACHE = $00000100;    
+    WINHTTP_FLAG_REFRESH = WINHTTP_FLAG_BYPASS_PROXY_CACHE;    
+    WINHTTP_FLAG_ESCAPE_DISABLE = $00000040;    
+    WINHTTP_FLAG_ESCAPE_DISABLE_QUERY = $00000080;    
+    SECURITY_FLAG_IGNORE_UNKNOWN_CA = $00000100;    
+    SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = $00002000;    
+    SECURITY_FLAG_IGNORE_CERT_CN_INVALID = $00001000;    
+    SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE = $00000200;    
+
+    INTERNET_SCHEME_HTTP = 1;    
+    INTERNET_SCHEME_HTTPS = 2;    
+    INTERNET_SCHEME_FTP = 3;    
+    INTERNET_SCHEME_SOCKS = 4;    
+    WINHTTP_AUTOPROXY_AUTO_DETECT = $00000001;    
+    WINHTTP_AUTOPROXY_CONFIG_URL = $00000002;    
+    WINHTTP_AUTOPROXY_HOST_KEEPCASE = $00000004;    
+    WINHTTP_AUTOPROXY_HOST_LOWERCASE = $00000008;    
+    WINHTTP_AUTOPROXY_ALLOW_AUTOCONFIG = $00000100;    
+    WINHTTP_AUTOPROXY_ALLOW_STATIC = $00000200;    
+    WINHTTP_AUTOPROXY_ALLOW_CM = $00000400;    
+    WINHTTP_AUTOPROXY_RUN_INPROCESS = $00010000;    
+    WINHTTP_AUTOPROXY_RUN_PROCESS_ONLY = $00020000;    
+    WINHTTP_AUTOPROXY_NO_DIRECTACCESS = $00040000;    
+    WINHTTP_AUTOPROXY_NO_CACHE_CLIENT = $00080000;    
+    WINHTTP_AUTOPROXY_NO_CACHE_SVC = $00100000;    
+    WINHTTP_AUTOPROXY_SORT_RESULTS = $00400000;    
+    WINHTTP_AUTO_DETECT_TYPE_DHCP = $00000001;    
+    WINHTTP_AUTO_DETECT_TYPE_DNS_A = $00000002;    
+    NETWORKING_KEY_BUFSIZE = 128;    
+    WINHTTP_TIME_FORMAT_BUFSIZE = 62;    
+    WINHTTP_OPTION_CALLBACK = 1;    
+    WINHTTP_FIRST_OPTION = WINHTTP_OPTION_CALLBACK;    
+    WINHTTP_OPTION_RESOLVE_TIME = 2;    
+    WINHTTP_OPTION_CONNECT_TIME = 3;    
+    WINHTTP_OPTION_CONNECT_RETRIES = 4;    
+    WINHTTP_OPTION_SEND_TIME = 5;    
+    WINHTTP_OPTION_RECEIVE_TIME = 6;    
+    WINHTTP_OPTION_RECEIVE_RESPONSE_TIME = 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_ = 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_TIME = 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_OPTION_CONNECTION_FILTER = 131;    
+    WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL = 133;    
+    WINHTTP_OPTION_HTTP_PROTOCOL_USED = 134;    
+    WINHTTP_OPTION_KDC_PROXY_SETTINGS = 136;    
+    WINHTTP_LAST_OPTION = WINHTTP_OPTION_KDC_PROXY_SETTINGS;    
+    WINHTTP_OPTION_USERNAME = $1000;    
+    WINHTTP_OPTION_PASSWORD = $1001;    
+    WINHTTP_OPTION_PROXY_USERNAME = $1002;    
+    WINHTTP_OPTION_PROXY_PASSWORD = $1003;    
+    WINHTTP_CONNS_PER_SERVER_UNLIMITED = $FFFFFFFF;    
+    WINHTTP_DECOMPRESSION_FLAG_GZIP = $00000001;    
+    WINHTTP_DECOMPRESSION_FLAG_DEFLATE = $00000002;    
+    WINHTTP_DECOMPRESSION_FLAG_ALL = WINHTTP_DECOMPRESSION_FLAG_GZIP or WINHTTP_DECOMPRESSION_FLAG_DEFLATE;    
+    WINHTTP_PROTOCOL_FLAG_HTTP2 = $1;    
+    WINHTTP_PROTOCOL_MASK = WINHTTP_PROTOCOL_FLAG_HTTP2;    
+    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 = $00000000;    
+    WINHTTP_ENABLE_PASSPORT_AUTH = $10000000;    
+    WINHTTP_DISABLE_PASSPORT_KEYRING = $20000000;    
+    WINHTTP_ENABLE_PASSPORT_KEYRING = $40000000;    
+    WINHTTP_DISABLE_COOKIES = $00000001;    
+    WINHTTP_DISABLE_REDIRECTS = $00000002;    
+    WINHTTP_DISABLE_AUTHENTICATION = $00000004;    
+    WINHTTP_DISABLE_KEEP_ALIVE = $00000008;    
+    WINHTTP_ENABLE_SSL_REVOCATION = $00000001;    
+    WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION = $00000002;    
+    WINHTTP_DISABLE_SPN_SERVER_PORT = $00000000;    
+    WINHTTP_ENABLE_SPN_SERVER_PORT = $00000001;    
+    WINHTTP_OPTION_SPN_MASK = WINHTTP_ENABLE_SPN_SERVER_PORT;    
+
+
+  const
+    WINHTTP_HANDLE_TYPE_SESSION = 1;    
+    WINHTTP_HANDLE_TYPE_CONNECT = 2;    
+    WINHTTP_HANDLE_TYPE_REQUEST = 3;    
+    WINHTTP_AUTH_SCHEME_BASIC = $00000001;    
+    WINHTTP_AUTH_SCHEME_NTLM = $00000002;    
+    WINHTTP_AUTH_SCHEME_PASSPORT = $00000004;    
+    WINHTTP_AUTH_SCHEME_DIGEST = $00000008;    
+    WINHTTP_AUTH_SCHEME_NEGOTIATE = $00000010;    
+    WINHTTP_AUTH_TARGET_SERVER = $00000000;    
+    WINHTTP_AUTH_TARGET_PROXY = $00000001;    
+    SECURITY_FLAG_SECURE = $00000001;    
+    SECURITY_FLAG_STRENGTH_WEAK = $10000000;    
+    SECURITY_FLAG_STRENGTH_MEDIUM = $40000000;    
+    SECURITY_FLAG_STRENGTH_STRONG = $20000000;    
+    WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED = $00000001;    
+    WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT = $00000002;    
+    WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED = $00000004;    
+    WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA = $00000008;    
+    WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID = $00000010;    
+    WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID = $00000020;    
+    WINHTTP_CALLBACK_STATUS_FLAG_CERT_WRONG_USAGE = $00000040;    
+    WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR = $80000000;    
+    WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 = $00000008;    
+    WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 = $00000020;    
+    WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 = $00000080;    
+    WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 = $00000200;    
+    WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 = $00000800;    
+    WINHTTP_FLAG_SECURE_PROTOCOL_ALL = (WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 or WINHTTP_FLAG_SECURE_PROTOCOL_SSL3) or WINHTTP_FLAG_SECURE_PROTOCOL_TLS1;    
+
+    WINHTTP_CALLBACK_STATUS_RESOLVING_NAME = $00000001;    
+    WINHTTP_CALLBACK_STATUS_NAME_RESOLVED = $00000002;    
+    WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER = $00000004;    
+    WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER = $00000008;    
+    WINHTTP_CALLBACK_STATUS_SENDING_REQUEST = $00000010;    
+    WINHTTP_CALLBACK_STATUS_REQUEST_SENT = $00000020;    
+    WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE = $00000040;    
+    WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED = $00000080;    
+    WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION = $00000100;    
+    WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED = $00000200;    
+    WINHTTP_CALLBACK_STATUS_HANDLE_CREATED = $00000400;    
+    WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING = $00000800;    
+    WINHTTP_CALLBACK_STATUS_DETECTING_PROXY = $00001000;    
+    WINHTTP_CALLBACK_STATUS_REDIRECT = $00004000;    
+    WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE = $00008000;    
+    WINHTTP_CALLBACK_STATUS_SECURE_FAILURE = $00010000;    
+    WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE = $00020000;    
+    WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE = $00040000;    
+    WINHTTP_CALLBACK_STATUS_READ_COMPLETE = $00080000;    
+    WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE = $00100000;    
+    WINHTTP_CALLBACK_STATUS_REQUEST_ERROR = $00200000;    
+    WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE = $00400000;    
+    WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE = $01000000;    
+    WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE = $02000000;    
+    WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE = $04000000;    
+    WINHTTP_CALLBACK_STATUS_SETTINGS_WRITE_COMPLETE = $10000000;    
+    WINHTTP_CALLBACK_STATUS_SETTINGS_READ_COMPLETE = $20000000;    
+    API_RECEIVE_RESPONSE = 1;    
+    API_QUERY_DATA_AVAILABLE = 2;    
+    API_READ_DATA = 3;    
+    API_WRITE_DATA = 4;    
+    API_SEND_REQUEST = 5;    
+    API_GET_PROXY_FOR_URL = 6;    
+    WINHTTP_CALLBACK_FLAG_RESOLVE_NAME = WINHTTP_CALLBACK_STATUS_RESOLVING_NAME or WINHTTP_CALLBACK_STATUS_NAME_RESOLVED;    
+    WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER = WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER or WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER;    
+    WINHTTP_CALLBACK_FLAG_SEND_REQUEST = WINHTTP_CALLBACK_STATUS_SENDING_REQUEST or WINHTTP_CALLBACK_STATUS_REQUEST_SENT;    
+    WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE = WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE or WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED;    
+    WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION = WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION or WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED;    
+    WINHTTP_CALLBACK_FLAG_HANDLES = WINHTTP_CALLBACK_STATUS_HANDLE_CREATED or 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;    
+    WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE = WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE;    
+    WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS = (((((WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE or WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE) or WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE) or WINHTTP_CALLBACK_STATUS_READ_COMPLETE) or WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE) or WINHTTP_CALLBACK_STATUS_REQUEST_ERROR) or WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE;    
+    WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS = $ffffffff;    
+    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;    
+    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 = $80000000;    
+    WINHTTP_QUERY_FLAG_SYSTEMTIME = $40000000;    
+    WINHTTP_QUERY_FLAG_NUMBER = $20000000;    
+    WINHTTP_QUERY_FLAG_NUMBER64 = $08000000;    
+    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_PERMANENT_REDIRECT = 308;    
+    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_TIME = 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_TIME = 504;    
+    HTTP_STATUS_VERSION_NOT_SUP = 505;    
+    HTTP_STATUS_FIRST = HTTP_STATUS_CONTINUE;    
+    HTTP_STATUS_LAST = HTTP_STATUS_VERSION_NOT_SUP;    
+    ICU_NO_ENCODE = $20000000;    
+    ICU_DECODE = $10000000;    
+    ICU_NO_META = $08000000;    
+    ICU_ENCODE_SPACES_ONLY = $04000000;    
+    ICU_BROWSER_MODE = $02000000;    
+    ICU_ENCODE_PERCENT = $00001000;    
+    ICU_ESCAPE = $80000000;    
+    ICU_ESCAPE_AUTHORITY = $00002000;    
+    ICU_REJECT_USERPWD = $00004000;    
+    WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0;    
+    WINHTTP_ACCESS_TYPE_NO_PROXY = 1;    
+    WINHTTP_ACCESS_TYPE_NAMED_PROXY = 3;    
+    WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY = 4;    
+    WINHTTP_NO_PROXY_NAME = Nil;    
+    WINHTTP_NO_PROXY_BYPASS = Nil;    
+    WINHTTP_NO_CLIENT_CERT_CONTEXT = Nil;    
+    WINHTTP_NO_REFERER = Nil;    
+    WINHTTP_DEFAULT_ACCEPT_TYPES = Nil;    
+    WINHTTP_ADDREQ_INDEX_MASK = $0000FFFF;    
+    WINHTTP_ADDREQ_FLAGS_MASK = $FFFF0000;    
+    WINHTTP_ADDREQ_FLAG_ADD_IF_NEW = $10000000;    
+    WINHTTP_ADDREQ_FLAG_ADD = $20000000;    
+    WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA = $40000000;    
+    WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON = $01000000;    
+    WINHTTP_ADDREQ_FLAG_COALESCE = WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA;    
+    WINHTTP_ADDREQ_FLAG_REPLACE = $80000000;    
+    WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH = 0;    
+    WINHTTP_NO_ADDITIONAL_HEADERS = Nil;    
+    WINHTTP_NO_REQUEST_DATA = Nil;    
+    WINHTTP_HEADER_NAME_BY_INDEX = Nil;    
+    WINHTTP_NO_PUT_BUFFER = Nil;    
+    WINHTTP_ERROR_BASE = 12000;    
+    ERROR_WINHTTPOF_HANDLES = WINHTTP_ERROR_BASE+1;    
+    ERROR_WINHTTP_TIME = 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;    
+    ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED_PROXY = WINHTTP_ERROR_BASE+187;    
+    ERROR_WINHTTP_SECURE_FAILURE_PROXY = WINHTTP_ERROR_BASE+188;    
+    WINHTTP_ERROR_LAST = WINHTTP_ERROR_BASE+188;    
+    WINHTTP_RESET_STATE = $00000001;    
+    WINHTTP_RESET_SWPAD_CURRENT_NETWORK = $00000002;    
+    WINHTTP_RESET_SWPAD_ALL = $00000004;    
+    WINHTTP_RESET_SCRIPT_CACHE = $00000008;    
+    WINHTTP_RESET_ALL = $0000FFFF;    
+    WINHTTP_RESET_NOTIFY_NETWORK_CHANGED = $00010000;    
+    WINHTTP_RESETOF_PROC = $00020000;    
+    WINHTTP_NO_HEADER_INDEX = Nil;    
+    WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH = 123;    
+    WINHTTP_WEB_SOCKET_MIN_KEEPALIVE_VALUE = 15000;    
+
+type
+   PWSTR = LPWSTR;
+   HINTERNET = LPVOID;
+   LPHINTERNET = ^HINTERNET;
+   INTERNET_PORT = WORD;
+   LPINTERNET_PORT = ^INTERNET_PORT;
+   WINHTTP_ASYNC_RESULT = record
+        dwResult : DWORD_PTR;
+        dwError : DWORD;
+      end;
+    LPWINHTTP_ASYNC_RESULT = ^WINHTTP_ASYNC_RESULT;
+
+    HTTP_VERSION_INFO = record
+        dwMajorVersion : DWORD;
+        dwMinorVersion : DWORD;
+      end;
+    LPHTTP_VERSION_INFO = ^HTTP_VERSION_INFO;
+
+    INTERNET_SCHEME = longint;
+    LPINTERNET_SCHEME = ^INTERNET_SCHEME;
+
+    URL_COMPONENTS = record
+        dwStructSize : DWORD;
+        lpszScheme : LPWSTR;
+        dwSchemeLength : DWORD;
+        nScheme : INTERNET_SCHEME;
+        lpszHostName : LPWSTR;
+        dwHostNameLength : DWORD;
+        nPort : INTERNET_PORT;
+        lpszUserName : LPWSTR;
+        dwUserNameLength : DWORD;
+        lpszPassword : LPWSTR;
+        dwPasswordLength : DWORD;
+        lpszUrlPath : LPWSTR;
+        dwUrlPathLength : DWORD;
+        lpszExtraInfo : LPWSTR;
+        dwExtraInfoLength : DWORD;
+      end;
+    LPURL_COMPONENTS = ^URL_COMPONENTS;
+
+    URL_COMPONENTSW = URL_COMPONENTS;
+
+    LPURL_COMPONENTSW = LPURL_COMPONENTS;
+
+    WINHTTP_PROXY_INFO = record
+        dwAccessType : DWORD;
+        lpszProxy : LPWSTR;
+        lpszProxyBypass : LPWSTR;
+      end;
+    LPWINHTTP_PROXY_INFO = ^WINHTTP_PROXY_INFO;
+
+    WINHTTP_PROXY_INFOW = WINHTTP_PROXY_INFO;
+
+    LPWINHTTP_PROXY_INFOW = LPWINHTTP_PROXY_INFO;
+
+    WINHTTP_AUTOPROXY_OPTIONS = record
+        dwFlags : DWORD;
+        dwAutoDetectFlags : DWORD;
+        lpszAutoConfigUrl : LPCWSTR;
+        lpvReserved : LPVOID;
+        dwReserved : DWORD;
+        fAutoLogonIfChallenged : BOOL;
+      end;
+
+
+    _WINHTTP_PROXY_RESULT_ENTRY = record
+        fProxy : BOOL;
+        fBypass : BOOL;
+        ProxyScheme : INTERNET_SCHEME;
+        pwszProxy : PWSTR;
+        ProxyPort : INTERNET_PORT;
+      end;
+    WINHTTP_PROXY_RESULT_ENTRY = _WINHTTP_PROXY_RESULT_ENTRY;
+
+    _WINHTTP_PROXY_RESULT = record
+        cEntries : DWORD;
+        pEntries : ^WINHTTP_PROXY_RESULT_ENTRY;
+      end;
+    WINHTTP_PROXY_RESULT = _WINHTTP_PROXY_RESULT;
+
+    _WINHTTP_PROXY_RESULT_EX = record
+        cEntries : DWORD;
+        pEntries : ^WINHTTP_PROXY_RESULT_ENTRY;
+        hProxyDetectionHandle : HANDLE;
+        dwProxyInterfaceAffinity : DWORD;
+      end;
+    WINHTTP_PROXY_RESULT_EX = _WINHTTP_PROXY_RESULT_EX;
+    _WinHttpProxyNetworkKey = record
+        pbBuffer : array[0..(NETWORKING_KEY_BUFSIZE)-1] of byte;
+      end;
+    WINHTTP_PROXY_NETWORKING_KEY = _WinHttpProxyNetworkKey;
+    PWINHTTP_PROXY_NETWORKING_KEY = ^_WinHttpProxyNetworkKey;
+
+    _WINHTTP_PROXY_SETTINGS = record
+        dwStructSize : DWORD;
+        dwFlags : DWORD;
+        dwCurrentSettingsVersion : DWORD;
+        pwszConnectionName : PWSTR;
+        pwszProxy : PWSTR;
+        pwszProxyBypass : PWSTR;
+        pwszAutoconfigUrl : PWSTR;
+        pwszAutoconfigSecondaryUrl : PWSTR;
+        dwAutoDiscoveryFlags : DWORD;
+        pwszLastKnownGoodAutoConfigUrl : PWSTR;
+        dwAutoconfigReloadDelayMins : DWORD;
+        ftLastKnownDetectTime : FILETIME;
+        dwDetectedInterfaceIpCount : DWORD;
+        pdwDetectedInterfaceIp : PDWORD;
+        cNetworkKeys : DWORD;
+        pNetworkKeys : PWINHTTP_PROXY_NETWORKING_KEY;
+      end;
+    WINHTTP_PROXY_SETTINGS = _WINHTTP_PROXY_SETTINGS;
+    PWINHTTP_PROXY_SETTINGS = ^_WINHTTP_PROXY_SETTINGS;
+
+    WINHTTP_CERTIFICATE_INFO = record
+        ftExpiry : FILETIME;
+        ftStart : FILETIME;
+        lpszSubjectInfo : LPWSTR;
+        lpszIssuerInfo : LPWSTR;
+        lpszProtocolName : LPWSTR;
+        lpszSignatureAlgName : LPWSTR;
+        lpszEncryptionAlgName : LPWSTR;
+        dwKeySize : DWORD;
+      end;
+
+    
+    tagWINHTTP_CREDS = record
+        lpszUserName : LPSTR;
+        lpszPassword : LPSTR;
+        lpszRealm : LPSTR;
+        dwAuthScheme : DWORD;
+        lpszHostName : LPSTR;
+        dwPort : DWORD;
+      end;
+    WINHTTP_CREDS = tagWINHTTP_CREDS;
+    PWINHTTP_CREDS = ^tagWINHTTP_CREDS;
+
+    tagWINHTTP_CREDS_EX = record
+        lpszUserName : LPSTR;
+        lpszPassword : LPSTR;
+        lpszRealm : LPSTR;
+        dwAuthScheme : DWORD;
+        lpszHostName : LPSTR;
+        dwPort : DWORD;
+        lpszUrl : LPSTR;
+      end;
+    WINHTTP_CREDS_EX = tagWINHTTP_CREDS_EX;
+    PWINHTTP_CREDS_EX = ^tagWINHTTP_CREDS_EX;
+
+    WINHTTP_STATUS_CALLBACK = procedure(hInterneth: HINTERNET;
+    dwContext: DWORD_PTR; dwInternetStatus: DWORD; lpvStatusInformation: LPVOID;
+    dwStatusInformationLength: DWORD); stdcall;
+	LPWINHTTP_STATUS_CALLBACK = ^WINHTTP_STATUS_CALLBACK;
+	
+    WINHTTP_CURRENT_USER_IE_PROXY_CONFIG = record
+        fAutoDetect : BOOL;
+        lpszAutoConfigUrl : LPWSTR;
+        lpszProxy : LPWSTR;
+        lpszProxyBypass : LPWSTR;
+      end;
+
+    _WINHTTP_WEB_SOCKET_OPERATION = (WINHTTP_WEB_SOCKET_SEND_OPERATION := 0,
+      WINHTTP_WEB_SOCKET_RECEIVE_OPERATION := 1,
+      WINHTTP_WEB_SOCKET_CLOSE_OPERATION := 2,
+      WINHTTP_WEB_SOCKET_SHUTDOWN_OPERATION := 3
+      );
+    WINHTTP_WEB_SOCKET_OPERATION = _WINHTTP_WEB_SOCKET_OPERATION;
+
+    _WINHTTP_WEB_SOCKET_BUFFER_TYPE = (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
+      );
+    WINHTTP_WEB_SOCKET_BUFFER_TYPE = _WINHTTP_WEB_SOCKET_BUFFER_TYPE;
+
+    _WINHTTP_WEB_SOCKET_CLOSE_STATUS = (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
+      );
+    WINHTTP_WEB_SOCKET_CLOSE_STATUS = _WINHTTP_WEB_SOCKET_CLOSE_STATUS;
+
+    _WINHTTP_WEB_SOCKET_ASYNC_RESULT = record
+        AsyncResult : WINHTTP_ASYNC_RESULT;
+        Operation : WINHTTP_WEB_SOCKET_OPERATION;
+      end;
+    WINHTTP_WEB_SOCKET_ASYNC_RESULT = _WINHTTP_WEB_SOCKET_ASYNC_RESULT;
+
+    _WINHTTP_WEB_SOCKET_STATUS = record
+        dwBytesTransferred : DWORD;
+        eBufferType : WINHTTP_WEB_SOCKET_BUFFER_TYPE;
+      end;
+    WINHTTP_WEB_SOCKET_STATUS = _WINHTTP_WEB_SOCKET_STATUS;
+
+  function WINHTTP_INVALID_STATUS_CALLBACK : WINHTTP_STATUS_CALLBACK;    
+
+  function WinHttpSetStatusCallback(hInternet:HINTERNET; lpfnInternetCallback:WINHTTP_STATUS_CALLBACK; dwNotificationFlags:DWORD; dwReserved:DWORD_PTR):WINHTTP_STATUS_CALLBACK;stdcall;external External_library name 'WinHttpSetStatusCallback';
+  function WinHttpTimeFromSystemTime(var pst:SYSTEMTIME; pwszTime:LPWSTR):WINBOOL;stdcall;external External_library name 'WinHttpTimeFromSystemTime';
+  function WinHttpTimeToSystemTime(pwszTime:LPCWSTR; var pst:SYSTEMTIME):WINBOOL;stdcall;external External_library name 'WinHttpTimeToSystemTime';
+  function WinHttpCrackUrl(pwszUrl:LPCWSTR; dwUrlLength:DWORD; dwFlags:DWORD; lpUrlComponents:LPURL_COMPONENTS):WINBOOL;stdcall;external External_library name 'WinHttpCrackUrl';
+  function WinHttpCreateUrl(lpUrlComponents:LPURL_COMPONENTS; dwFlags:DWORD; pwszUrl:LPWSTR; pdwUrlLength:LPDWORD):WINBOOL;stdcall;external External_library name 'WinHttpCreateUrl';
+  function WinHttpCheckPlatform:WINBOOL;stdcall;external External_library name 'WinHttpCheckPlatform';
+  function WinHttpGetDefaultProxyConfiguration(var pProxyInfo:WINHTTP_PROXY_INFO):BOOL;stdcall;external External_library name 'WinHttpGetDefaultProxyConfiguration';
+  function WinHttpSetDefaultProxyConfiguration(var pProxyInfo:WINHTTP_PROXY_INFO):BOOL;stdcall;external External_library name 'WinHttpSetDefaultProxyConfiguration';
+  function WinHttpOpen(pszAgentW:LPCWSTR; dwAccessType:DWORD; pszProxyW:LPCWSTR; pszProxyBypassW:LPCWSTR; dwFlags:DWORD):HINTERNET;stdcall;external External_library name 'WinHttpOpen';
+  function WinHttpCloseHandle(hInternet:HINTERNET):WINBOOL;stdcall;external External_library name 'WinHttpCloseHandle';
+  function WinHttpConnect(hSession:HINTERNET; pswzServerName:LPCWSTR; nServerPort:INTERNET_PORT; dwReserved:DWORD):HINTERNET;stdcall;external External_library name 'WinHttpConnect';
+  function WinHttpReadData(hRequest:HINTERNET; lpBuffer:LPVOID; dwNumberOfBytesToRead:DWORD; lpdwNumberOfBytesRead:LPDWORD):WINBOOL;stdcall;external External_library name 'WinHttpReadData';
+  function WinHttpWriteData(hRequest:HINTERNET; lpBuffer:LPCVOID; dwNumberOfBytesToWrite:DWORD; lpdwNumberOfBytesWritten:LPDWORD):WINBOOL;stdcall;external External_library name 'WinHttpWriteData';
+  function WinHttpQueryDataAvailable(hRequest:HINTERNET; lpdwNumberOfBytesAvailable:LPDWORD):WINBOOL;stdcall;external External_library name 'WinHttpQueryDataAvailable';
+  function WinHttpQueryOption(hInternet:HINTERNET; dwOption:DWORD; lpBuffer:LPVOID; lpdwBufferLength:LPDWORD):WINBOOL;stdcall;external External_library name 'WinHttpQueryOption';
+  function WinHttpSetOption(hInternet:HINTERNET; dwOption:DWORD; lpBuffer:LPVOID; dwBufferLength:DWORD):WINBOOL;stdcall;external External_library name 'WinHttpSetOption';
+  function WinHttpSetTimes(hInternet:HINTERNET; nResolveTime:longint; nConnectTime:longint; nSendTime:longint; nReceiveTime:longint):WINBOOL;stdcall;external External_library name 'WinHttpSetTimes';
+  function WinHttpIsHostInProxyBypassList(var pProxyInfo:WINHTTP_PROXY_INFO; pwszHost:PCWSTR; tScheme:INTERNET_SCHEME; nPort:INTERNET_PORT; var pfIsInBypassList:BOOL):DWORD;stdcall;external External_library name 'WinHttpIsHostInProxyBypassList';
+  function WinHttpOpenRequest(hConnect:HINTERNET; pwszVerb:LPCWSTR; pwszObjectName:LPCWSTR; pwszVersion:LPCWSTR; pwszReferrer:LPCWSTR; 
+            var ppwszAcceptTypes:LPCWSTR; dwFlags:DWORD):HINTERNET;stdcall;external External_library name 'WinHttpOpenRequest';
+  function WinHttpAddRequestHeaders(hRequest:HINTERNET; lpszHeaders:LPCWSTR; dwHeadersLength:DWORD; dwModifiers:DWORD):WINBOOL;stdcall;external External_library name 'WinHttpAddRequestHeaders';
+  function WinHttpSendRequest(hRequest:HINTERNET; lpszHeaders:LPCWSTR; dwHeadersLength:DWORD; lp:LPVOID; dwLength:DWORD; 
+            dwTotalLength:DWORD; dwContext:DWORD_PTR):WINBOOL;stdcall;external External_library name 'WinHttpSendRequest';
+ function WinHttpSetCredentials(hRequest:HINTERNET; AuthTargets:DWORD; AuthScheme:DWORD; pwszUserName:LPCWSTR; pwszPassword:LPCWSTR; 
+             pAuthParams:LPVOID):WINBOOL;stdcall;external External_library name 'WinHttpSetCredentials';
+  function WinHttpQueryAuthSchemes(hRequest:HINTERNET; lpdwSupportedSchemes:LPDWORD; lpdwFirstScheme:LPDWORD; pdwAuthTarget:LPDWORD):WINBOOL;stdcall;external External_library name 'WinHttpQueryAuthSchemes';
+  function WinHttpQueryAuthParams(hRequest:HINTERNET; AuthScheme:DWORD; var pAuthParams:LPVOID):WINBOOL;stdcall;external External_library name 'WinHttpQueryAuthParams';
+  function WinHttpReceiveResponse(hRequest:HINTERNET; lpReserved:LPVOID):BOOL;stdcall;external External_library name 'WinHttpReceiveResponse';
+  function WinHttpQueryHeaders(hRequest:HINTERNET; dwInfoLevel:DWORD; pwszName:LPCWSTR; lpBuffer:LPVOID; lpdwBufferLength:LPDWORD; 
+             lpdwIndex:LPDWORD):WINBOOL;stdcall;external External_library name 'WinHttpQueryHeaders';
+  function WinHttpDetectAutoProxyConfigUrl(dwAutoDetectFlags:DWORD; var ppwstrAutoConfigUrl:LPWSTR):WINBOOL;stdcall;external External_library name 'WinHttpDetectAutoProxyConfigUrl';
+  function WinHttpGetProxyForUrl(hSession:HINTERNET; lpcwszUrl:LPCWSTR; var pAutoProxyOptions:WINHTTP_AUTOPROXY_OPTIONS; var pProxyInfo:WINHTTP_PROXY_INFO):WINBOOL;stdcall;external External_library name 'WinHttpGetProxyForUrl';
+  function WinHttpCreateProxyResolver(hSession:HINTERNET; var phResolver:HINTERNET):DWORD;stdcall;external External_library name 'WinHttpCreateProxyResolver';
+  function WinHttpGetProxyForUrlEx(hResolver:HINTERNET; pcwszUrl:PCWSTR; var pAutoProxyOptions:WINHTTP_AUTOPROXY_OPTIONS; pContext:DWORD_PTR):DWORD;stdcall;external External_library name 'WinHttpGetProxyForUrlEx';
+  function WinHttpGetProxyForUrlEx2(hResolver:HINTERNET; pcwszUrl:PCWSTR; var pAutoProxyOptions:WINHTTP_AUTOPROXY_OPTIONS; cbInterfaceSelectionContext:DWORD; var pInterfaceSelectionContext:BYTE; 
+            pContext:DWORD_PTR):DWORD;stdcall;external External_library name 'WinHttpGetProxyForUrlEx2';
+  function WinHttpGetProxyResult(hResolver:HINTERNET; var pProxyResult:WINHTTP_PROXY_RESULT):DWORD;stdcall;external External_library name 'WinHttpGetProxyResult';
+  function WinHttpGetProxyResultEx(hResolver:HINTERNET; var pProxyResultEx:WINHTTP_PROXY_RESULT_EX):DWORD;stdcall;external External_library name 'WinHttpGetProxyResultEx';
+  procedure WinHttpFreeProxyResult(var pProxyResult:WINHTTP_PROXY_RESULT);stdcall;external External_library name 'WinHttpFreeProxyResult';
+  procedure WinHttpFreeProxyResultEx(var pProxyResultEx:WINHTTP_PROXY_RESULT_EX);stdcall;external External_library name 'WinHttpFreeProxyResultEx';
+  function WinHttpResetAutoProxy(hSession:HINTERNET; dwFlags:DWORD):DWORD;stdcall;external External_library name 'WinHttpResetAutoProxy';
+  function WinHttpGetIEProxyConfigForCurrentUser(var pProxyConfig:WINHTTP_CURRENT_USER_IE_PROXY_CONFIG):WINBOOL;stdcall;external External_library name 'WinHttpGetIEProxyConfigForCurrentUser';
+  function WinHttpWriteProxySettings(hSession:HINTERNET; fForceUpdate:BOOL; var pWinHttpProxySettings:WINHTTP_PROXY_SETTINGS):DWORD;stdcall;external External_library name 'WinHttpWriteProxySettings';
+  function WinHttpReadProxySettings(hSession:HINTERNET; pcwszConnectionName:PCWSTR; fFallBackToDefaultSettings:BOOL; fSetAutoDiscoverForDefaultSettings:BOOL; var pdwSettingsVersion:DWORD; 
+            var pfDefaultSettingsAreReturned:BOOL; var pWinHttpProxySettings:WINHTTP_PROXY_SETTINGS):DWORD;stdcall;external External_library name 'WinHttpReadProxySettings';
+  procedure WinHttpFreeProxySettings(var pWinHttpProxySettings:WINHTTP_PROXY_SETTINGS);stdcall;external External_library name 'WinHttpFreeProxySettings';
+  function WinHttpGetProxySettingsVersion(hSession:HINTERNET; var pdwProxySettingsVersion:DWORD):DWORD;stdcall;external External_library name 'WinHttpGetProxySettingsVersion';
+  function WinHttpWebSocketCompleteUpgrade(hRequest:HINTERNET; pContext:DWORD_PTR):HINTERNET;stdcall;external External_library name 'WinHttpWebSocketCompleteUpgrade';
+  function WinHttpWebSocketSend(hWebSocket:HINTERNET; eBufferType:WINHTTP_WEB_SOCKET_BUFFER_TYPE; pvBuffer:PVOID; dwBufferLength:DWORD):DWORD;stdcall;external External_library name 'WinHttpWebSocketSend';
+  function WinHttpWebSocketReceive(hWebSocket:HINTERNET; pvBuffer:PVOID; dwBufferLength:DWORD; var pdwBytesRead:DWORD; var peBufferType:WINHTTP_WEB_SOCKET_BUFFER_TYPE):DWORD;stdcall;external External_library name 'WinHttpWebSocketReceive';
+  function WinHttpWebSocketShutdown(hWebSocket:HINTERNET; usStatus:USHORT; pvReason:PVOID; dwReasonLength:DWORD):DWORD;stdcall;external External_library name 'WinHttpWebSocketShutdown';
+  function WinHttpWebSocketClose(hWebSocket:HINTERNET; usStatus:USHORT; pvReason:PVOID; dwReasonLength:DWORD):DWORD;stdcall;external External_library name 'WinHttpWebSocketClose';
+  function WinHttpWebSocketQueryCloseStatus(hWebSocket:HINTERNET; var pusStatus:USHORT; pvReason:PVOID; dwReasonLength:DWORD; var pdwReasonLengthConsumed:DWORD):DWORD;stdcall;external External_library name 'WinHttpWebSocketQueryCloseStatus';
+
+
+implementation
+
+  function WINHTTP_INVALID_STATUS_CALLBACK : WINHTTP_STATUS_CALLBACK;
+    begin
+      WINHTTP_INVALID_STATUS_CALLBACK:=WINHTTP_STATUS_CALLBACK(-(1));
+    end;
+
+
+end.