golang.zx2c4.com/wireguard/windows@v0.5.4-0.20230123132234-dcc0eb72a04b/updater/winhttp/syscall_windows.go (about)

     1  /* SPDX-License-Identifier: MIT
     2   *
     3   * Copyright (C) 2019-2022 WireGuard LLC. All Rights Reserved.
     4   */
     5  
     6  package winhttp
     7  
     8  import (
     9  	"golang.org/x/sys/windows"
    10  )
    11  
    12  type _HINTERNET windows.Handle
    13  
    14  type Error uint32
    15  
    16  const (
    17  	_WINHTTP_ACCESS_TYPE_DEFAULT_PROXY   = 0
    18  	_WINHTTP_ACCESS_TYPE_NO_PROXY        = 1
    19  	_WINHTTP_ACCESS_TYPE_NAMED_PROXY     = 3
    20  	_WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY = 4
    21  
    22  	_WINHTTP_FLAG_ASYNC = 0x10000000
    23  
    24  	_WINHTTP_INVALID_STATUS_CALLBACK = ^uintptr(0)
    25  
    26  	_WINHTTP_CALLBACK_STATUS_RESOLVING_NAME          = 0x00000001
    27  	_WINHTTP_CALLBACK_STATUS_NAME_RESOLVED           = 0x00000002
    28  	_WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER    = 0x00000004
    29  	_WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER     = 0x00000008
    30  	_WINHTTP_CALLBACK_STATUS_SENDING_REQUEST         = 0x00000010
    31  	_WINHTTP_CALLBACK_STATUS_REQUEST_SENT            = 0x00000020
    32  	_WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE      = 0x00000040
    33  	_WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED       = 0x00000080
    34  	_WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION      = 0x00000100
    35  	_WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED       = 0x00000200
    36  	_WINHTTP_CALLBACK_STATUS_HANDLE_CREATED          = 0x00000400
    37  	_WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING          = 0x00000800
    38  	_WINHTTP_CALLBACK_STATUS_DETECTING_PROXY         = 0x00001000
    39  	_WINHTTP_CALLBACK_STATUS_REDIRECT                = 0x00004000
    40  	_WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE   = 0x00008000
    41  	_WINHTTP_CALLBACK_STATUS_SECURE_FAILURE          = 0x00010000
    42  	_WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE       = 0x00020000
    43  	_WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE          = 0x00040000
    44  	_WINHTTP_CALLBACK_STATUS_READ_COMPLETE           = 0x00080000
    45  	_WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE          = 0x00100000
    46  	_WINHTTP_CALLBACK_STATUS_REQUEST_ERROR           = 0x00200000
    47  	_WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE    = 0x00400000
    48  	_WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE = 0x01000000
    49  	_WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE          = 0x02000000
    50  	_WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE       = 0x04000000
    51  	_WINHTTP_CALLBACK_STATUS_SETTINGS_WRITE_COMPLETE = 0x10000000
    52  	_WINHTTP_CALLBACK_STATUS_SETTINGS_READ_COMPLETE  = 0x20000000
    53  
    54  	_WINHTTP_CALLBACK_FLAG_RESOLVE_NAME            = _WINHTTP_CALLBACK_STATUS_RESOLVING_NAME | _WINHTTP_CALLBACK_STATUS_NAME_RESOLVED
    55  	_WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER       = _WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | _WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER
    56  	_WINHTTP_CALLBACK_FLAG_SEND_REQUEST            = _WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | _WINHTTP_CALLBACK_STATUS_REQUEST_SENT
    57  	_WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE        = _WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE | _WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
    58  	_WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION        = _WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION | _WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
    59  	_WINHTTP_CALLBACK_FLAG_HANDLES                 = _WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | _WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING
    60  	_WINHTTP_CALLBACK_FLAG_DETECTING_PROXY         = _WINHTTP_CALLBACK_STATUS_DETECTING_PROXY
    61  	_WINHTTP_CALLBACK_FLAG_REDIRECT                = _WINHTTP_CALLBACK_STATUS_REDIRECT
    62  	_WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE   = _WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
    63  	_WINHTTP_CALLBACK_FLAG_SECURE_FAILURE          = _WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
    64  	_WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE    = _WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
    65  	_WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE       = _WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
    66  	_WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE          = _WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
    67  	_WINHTTP_CALLBACK_FLAG_READ_COMPLETE           = _WINHTTP_CALLBACK_STATUS_READ_COMPLETE
    68  	_WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE          = _WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE
    69  	_WINHTTP_CALLBACK_FLAG_REQUEST_ERROR           = _WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
    70  	_WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE = _WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE
    71  	_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
    72  	_WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS       = 0xffffffff
    73  
    74  	_INTERNET_DEFAULT_PORT       = 0
    75  	_INTERNET_DEFAULT_HTTP_PORT  = 80
    76  	_INTERNET_DEFAULT_HTTPS_PORT = 443
    77  
    78  	_WINHTTP_FLAG_SECURE               = 0x00800000
    79  	_WINHTTP_FLAG_ESCAPE_PERCENT       = 0x00000004
    80  	_WINHTTP_FLAG_NULL_CODEPAGE        = 0x00000008
    81  	_WINHTTP_FLAG_BYPASS_PROXY_CACHE   = 0x00000100
    82  	_WINHTTP_FLAG_REFRESH              = _WINHTTP_FLAG_BYPASS_PROXY_CACHE
    83  	_WINHTTP_FLAG_ESCAPE_DISABLE       = 0x00000040
    84  	_WINHTTP_FLAG_ESCAPE_DISABLE_QUERY = 0x00000080
    85  
    86  	_WINHTTP_QUERY_MIME_VERSION              = 0
    87  	_WINHTTP_QUERY_CONTENT_TYPE              = 1
    88  	_WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING = 2
    89  	_WINHTTP_QUERY_CONTENT_ID                = 3
    90  	_WINHTTP_QUERY_CONTENT_DESCRIPTION       = 4
    91  	_WINHTTP_QUERY_CONTENT_LENGTH            = 5
    92  	_WINHTTP_QUERY_CONTENT_LANGUAGE          = 6
    93  	_WINHTTP_QUERY_ALLOW                     = 7
    94  	_WINHTTP_QUERY_PUBLIC                    = 8
    95  	_WINHTTP_QUERY_DATE                      = 9
    96  	_WINHTTP_QUERY_EXPIRES                   = 10
    97  	_WINHTTP_QUERY_LAST_MODIFIED             = 11
    98  	_WINHTTP_QUERY_MESSAGE_ID                = 12
    99  	_WINHTTP_QUERY_URI                       = 13
   100  	_WINHTTP_QUERY_DERIVED_FROM              = 14
   101  	_WINHTTP_QUERY_COST                      = 15
   102  	_WINHTTP_QUERY_LINK                      = 16
   103  	_WINHTTP_QUERY_PRAGMA                    = 17
   104  	_WINHTTP_QUERY_VERSION                   = 18
   105  	_WINHTTP_QUERY_STATUS_CODE               = 19
   106  	_WINHTTP_QUERY_STATUS_TEXT               = 20
   107  	_WINHTTP_QUERY_RAW_HEADERS               = 21
   108  	_WINHTTP_QUERY_RAW_HEADERS_CRLF          = 22
   109  	_WINHTTP_QUERY_CONNECTION                = 23
   110  	_WINHTTP_QUERY_ACCEPT                    = 24
   111  	_WINHTTP_QUERY_ACCEPT_CHARSET            = 25
   112  	_WINHTTP_QUERY_ACCEPT_ENCODING           = 26
   113  	_WINHTTP_QUERY_ACCEPT_LANGUAGE           = 27
   114  	_WINHTTP_QUERY_AUTHORIZATION             = 28
   115  	_WINHTTP_QUERY_CONTENT_ENCODING          = 29
   116  	_WINHTTP_QUERY_FORWARDED                 = 30
   117  	_WINHTTP_QUERY_FROM                      = 31
   118  	_WINHTTP_QUERY_IF_MODIFIED_SINCE         = 32
   119  	_WINHTTP_QUERY_LOCATION                  = 33
   120  	_WINHTTP_QUERY_ORIG_URI                  = 34
   121  	_WINHTTP_QUERY_REFERER                   = 35
   122  	_WINHTTP_QUERY_RETRY_AFTER               = 36
   123  	_WINHTTP_QUERY_SERVER                    = 37
   124  	_WINHTTP_QUERY_TITLE                     = 38
   125  	_WINHTTP_QUERY_USER_AGENT                = 39
   126  	_WINHTTP_QUERY_WWW_AUTHENTICATE          = 40
   127  	_WINHTTP_QUERY_PROXY_AUTHENTICATE        = 41
   128  	_WINHTTP_QUERY_ACCEPT_RANGES             = 42
   129  	_WINHTTP_QUERY_SET_COOKIE                = 43
   130  	_WINHTTP_QUERY_COOKIE                    = 44
   131  	_WINHTTP_QUERY_REQUEST_METHOD            = 45
   132  	_WINHTTP_QUERY_REFRESH                   = 46
   133  	_WINHTTP_QUERY_CONTENT_DISPOSITION       = 47
   134  	_WINHTTP_QUERY_AGE                       = 48
   135  	_WINHTTP_QUERY_CACHE_CONTROL             = 49
   136  	_WINHTTP_QUERY_CONTENT_BASE              = 50
   137  	_WINHTTP_QUERY_CONTENT_LOCATION          = 51
   138  	_WINHTTP_QUERY_CONTENT_MD5               = 52
   139  	_WINHTTP_QUERY_CONTENT_RANGE             = 53
   140  	_WINHTTP_QUERY_ETAG                      = 54
   141  	_WINHTTP_QUERY_HOST                      = 55
   142  	_WINHTTP_QUERY_IF_MATCH                  = 56
   143  	_WINHTTP_QUERY_IF_NONE_MATCH             = 57
   144  	_WINHTTP_QUERY_IF_RANGE                  = 58
   145  	_WINHTTP_QUERY_IF_UNMODIFIED_SINCE       = 59
   146  	_WINHTTP_QUERY_MAX_FORWARDS              = 60
   147  	_WINHTTP_QUERY_PROXY_AUTHORIZATION       = 61
   148  	_WINHTTP_QUERY_RANGE                     = 62
   149  	_WINHTTP_QUERY_TRANSFER_ENCODING         = 63
   150  	_WINHTTP_QUERY_UPGRADE                   = 64
   151  	_WINHTTP_QUERY_VARY                      = 65
   152  	_WINHTTP_QUERY_VIA                       = 66
   153  	_WINHTTP_QUERY_WARNING                   = 67
   154  	_WINHTTP_QUERY_EXPECT                    = 68
   155  	_WINHTTP_QUERY_PROXY_CONNECTION          = 69
   156  	_WINHTTP_QUERY_UNLESS_MODIFIED_SINCE     = 70
   157  	_WINHTTP_QUERY_PROXY_SUPPORT             = 75
   158  	_WINHTTP_QUERY_AUTHENTICATION_INFO       = 76
   159  	_WINHTTP_QUERY_PASSPORT_URLS             = 77
   160  	_WINHTTP_QUERY_PASSPORT_CONFIG           = 78
   161  	_WINHTTP_QUERY_MAX                       = 78
   162  	_WINHTTP_QUERY_CUSTOM                    = 65535
   163  	_WINHTTP_QUERY_FLAG_REQUEST_HEADERS      = 0x80000000
   164  	_WINHTTP_QUERY_FLAG_SYSTEMTIME           = 0x40000000
   165  	_WINHTTP_QUERY_FLAG_NUMBER               = 0x20000000
   166  	_WINHTTP_QUERY_FLAG_NUMBER64             = 0x08000000
   167  
   168  	_WINHTTP_FIRST_OPTION                            = _WINHTTP_OPTION_CALLBACK
   169  	_WINHTTP_OPTION_CALLBACK                         = 1
   170  	_WINHTTP_OPTION_RESOLVE_TIMEOUT                  = 2
   171  	_WINHTTP_OPTION_CONNECT_TIMEOUT                  = 3
   172  	_WINHTTP_OPTION_CONNECT_RETRIES                  = 4
   173  	_WINHTTP_OPTION_SEND_TIMEOUT                     = 5
   174  	_WINHTTP_OPTION_RECEIVE_TIMEOUT                  = 6
   175  	_WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT         = 7
   176  	_WINHTTP_OPTION_HANDLE_TYPE                      = 9
   177  	_WINHTTP_OPTION_READ_BUFFER_SIZE                 = 12
   178  	_WINHTTP_OPTION_WRITE_BUFFER_SIZE                = 13
   179  	_WINHTTP_OPTION_PARENT_HANDLE                    = 21
   180  	_WINHTTP_OPTION_EXTENDED_ERROR                   = 24
   181  	_WINHTTP_OPTION_SECURITY_FLAGS                   = 31
   182  	_WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT      = 32
   183  	_WINHTTP_OPTION_URL                              = 34
   184  	_WINHTTP_OPTION_SECURITY_KEY_BITNESS             = 36
   185  	_WINHTTP_OPTION_PROXY                            = 38
   186  	_WINHTTP_OPTION_PROXY_RESULT_ENTRY               = 39
   187  	_WINHTTP_OPTION_USER_AGENT                       = 41
   188  	_WINHTTP_OPTION_CONTEXT_VALUE                    = 45
   189  	_WINHTTP_OPTION_CLIENT_CERT_CONTEXT              = 47
   190  	_WINHTTP_OPTION_REQUEST_PRIORITY                 = 58
   191  	_WINHTTP_OPTION_HTTP_VERSION                     = 59
   192  	_WINHTTP_OPTION_DISABLE_FEATURE                  = 63
   193  	_WINHTTP_OPTION_CODEPAGE                         = 68
   194  	_WINHTTP_OPTION_MAX_CONNS_PER_SERVER             = 73
   195  	_WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER         = 74
   196  	_WINHTTP_OPTION_AUTOLOGON_POLICY                 = 77
   197  	_WINHTTP_OPTION_SERVER_CERT_CONTEXT              = 78
   198  	_WINHTTP_OPTION_ENABLE_FEATURE                   = 79
   199  	_WINHTTP_OPTION_WORKER_THREAD_COUNT              = 80
   200  	_WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT         = 81
   201  	_WINHTTP_OPTION_PASSPORT_COBRANDING_URL          = 82
   202  	_WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH          = 83
   203  	_WINHTTP_OPTION_SECURE_PROTOCOLS                 = 84
   204  	_WINHTTP_OPTION_ENABLETRACING                    = 85
   205  	_WINHTTP_OPTION_PASSPORT_SIGN_OUT                = 86
   206  	_WINHTTP_OPTION_PASSPORT_RETURN_URL              = 87
   207  	_WINHTTP_OPTION_REDIRECT_POLICY                  = 88
   208  	_WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS     = 89
   209  	_WINHTTP_OPTION_MAX_HTTP_STATUS_CONTINUE         = 90
   210  	_WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE         = 91
   211  	_WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE          = 92
   212  	_WINHTTP_OPTION_CONNECTION_INFO                  = 93
   213  	_WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST          = 94
   214  	_WINHTTP_OPTION_SPN                              = 96
   215  	_WINHTTP_OPTION_GLOBAL_PROXY_CREDS               = 97
   216  	_WINHTTP_OPTION_GLOBAL_SERVER_CREDS              = 98
   217  	_WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT              = 99
   218  	_WINHTTP_OPTION_REJECT_USERPWD_IN_URL            = 100
   219  	_WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS    = 101
   220  	_WINHTTP_OPTION_RECEIVE_PROXY_CONNECT_RESPONSE   = 103
   221  	_WINHTTP_OPTION_IS_PROXY_CONNECT_RESPONSE        = 104
   222  	_WINHTTP_OPTION_SERVER_SPN_USED                  = 106
   223  	_WINHTTP_OPTION_PROXY_SPN_USED                   = 107
   224  	_WINHTTP_OPTION_SERVER_CBT                       = 108
   225  	_WINHTTP_OPTION_UNSAFE_HEADER_PARSING            = 110
   226  	_WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS   = 111
   227  	_WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET            = 114
   228  	_WINHTTP_OPTION_WEB_SOCKET_CLOSE_TIMEOUT         = 115
   229  	_WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL    = 116
   230  	_WINHTTP_OPTION_DECOMPRESSION                    = 118
   231  	_WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE   = 122
   232  	_WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE      = 123
   233  	_WINHTTP_OPTION_TCP_PRIORITY_HINT                = 128
   234  	_WINHTTP_OPTION_CONNECTION_FILTER                = 131
   235  	_WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL             = 133
   236  	_WINHTTP_OPTION_HTTP_PROTOCOL_USED               = 134
   237  	_WINHTTP_OPTION_KDC_PROXY_SETTINGS               = 136
   238  	_WINHTTP_OPTION_ENCODE_EXTRA                     = 138
   239  	_WINHTTP_OPTION_DISABLE_STREAM_QUEUE             = 139
   240  	_WINHTTP_OPTION_IPV6_FAST_FALLBACK               = 140
   241  	_WINHTTP_OPTION_CONNECTION_STATS_V0              = 141
   242  	_WINHTTP_OPTION_REQUEST_TIMES                    = 142
   243  	_WINHTTP_OPTION_EXPIRE_CONNECTION                = 143
   244  	_WINHTTP_OPTION_DISABLE_SECURE_PROTOCOL_FALLBACK = 144
   245  	_WINHTTP_OPTION_HTTP_PROTOCOL_REQUIRED           = 145
   246  	_WINHTTP_OPTION_REQUEST_STATS                    = 146
   247  	_WINHTTP_OPTION_SERVER_CERT_CHAIN_CONTEXT        = 147
   248  	_WINHTTP_LAST_OPTION                             = _WINHTTP_OPTION_SERVER_CERT_CHAIN_CONTEXT
   249  
   250  	_ICU_ESCAPE           = 0x80000000
   251  	_ICU_ESCAPE_AUTHORITY = 0x00002000
   252  	_ICU_REJECT_USERPWD   = 0x00004000
   253  
   254  	_INTERNET_SCHEME_HTTP  = 1
   255  	_INTERNET_SCHEME_HTTPS = 2
   256  	_INTERNET_SCHEME_FTP   = 3
   257  	_INTERNET_SCHEME_SOCKS = 4
   258  
   259  	_WINHTTP_FLAG_SECURE_PROTOCOL_SSL2   = 0x00000008
   260  	_WINHTTP_FLAG_SECURE_PROTOCOL_SSL3   = 0x00000020
   261  	_WINHTTP_FLAG_SECURE_PROTOCOL_TLS1   = 0x00000080
   262  	_WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 = 0x00000200
   263  	_WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 = 0x00000800
   264  	_WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3 = 0x00002000
   265  	_WINHTTP_FLAG_SECURE_PROTOCOL_ALL    = _WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 | _WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 | _WINHTTP_FLAG_SECURE_PROTOCOL_TLS1
   266  
   267  	_WINHTTP_PROTOCOL_FLAG_HTTP2 = 0x1
   268  
   269  	_WINHTTP_ERROR_BASE                                  = 12000
   270  	_ERROR_WINHTTP_OUT_OF_HANDLES                        = Error(12000 + 1)
   271  	_ERROR_WINHTTP_TIMEOUT                               = Error(12000 + 2)
   272  	_ERROR_WINHTTP_INTERNAL_ERROR                        = Error(12000 + 4)
   273  	_ERROR_WINHTTP_INVALID_URL                           = Error(12000 + 5)
   274  	_ERROR_WINHTTP_UNRECOGNIZED_SCHEME                   = Error(12000 + 6)
   275  	_ERROR_WINHTTP_NAME_NOT_RESOLVED                     = Error(12000 + 7)
   276  	_ERROR_WINHTTP_INVALID_OPTION                        = Error(12000 + 9)
   277  	_ERROR_WINHTTP_OPTION_NOT_SETTABLE                   = Error(12000 + 11)
   278  	_ERROR_WINHTTP_SHUTDOWN                              = Error(12000 + 12)
   279  	_ERROR_WINHTTP_LOGIN_FAILURE                         = Error(12000 + 15)
   280  	_ERROR_WINHTTP_OPERATION_CANCELLED                   = Error(12000 + 17)
   281  	_ERROR_WINHTTP_INCORRECT_HANDLE_TYPE                 = Error(12000 + 18)
   282  	_ERROR_WINHTTP_INCORRECT_HANDLE_STATE                = Error(12000 + 19)
   283  	_ERROR_WINHTTP_CANNOT_CONNECT                        = Error(12000 + 29)
   284  	_ERROR_WINHTTP_CONNECTION_ERROR                      = Error(12000 + 30)
   285  	_ERROR_WINHTTP_RESEND_REQUEST                        = Error(12000 + 32)
   286  	_ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED               = Error(12000 + 44)
   287  	_ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN               = Error(12000 + 100)
   288  	_ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND               = Error(12000 + 101)
   289  	_ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND                = Error(12000 + 102)
   290  	_ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN                = Error(12000 + 103)
   291  	_ERROR_WINHTTP_HEADER_NOT_FOUND                      = Error(12000 + 150)
   292  	_ERROR_WINHTTP_INVALID_SERVER_RESPONSE               = Error(12000 + 152)
   293  	_ERROR_WINHTTP_INVALID_HEADER                        = Error(12000 + 153)
   294  	_ERROR_WINHTTP_INVALID_QUERY_REQUEST                 = Error(12000 + 154)
   295  	_ERROR_WINHTTP_HEADER_ALREADY_EXISTS                 = Error(12000 + 155)
   296  	_ERROR_WINHTTP_REDIRECT_FAILED                       = Error(12000 + 156)
   297  	_ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR              = Error(12000 + 178)
   298  	_ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT                 = Error(12000 + 166)
   299  	_ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT             = Error(12000 + 167)
   300  	_ERROR_WINHTTP_UNHANDLED_SCRIPT_TYPE                 = Error(12000 + 176)
   301  	_ERROR_WINHTTP_SCRIPT_EXECUTION_ERROR                = Error(12000 + 177)
   302  	_ERROR_WINHTTP_NOT_INITIALIZED                       = Error(12000 + 172)
   303  	_ERROR_WINHTTP_SECURE_FAILURE                        = Error(12000 + 175)
   304  	_ERROR_WINHTTP_SECURE_CERT_DATE_INVALID              = Error(12000 + 37)
   305  	_ERROR_WINHTTP_SECURE_CERT_CN_INVALID                = Error(12000 + 38)
   306  	_ERROR_WINHTTP_SECURE_INVALID_CA                     = Error(12000 + 45)
   307  	_ERROR_WINHTTP_SECURE_CERT_REV_FAILED                = Error(12000 + 57)
   308  	_ERROR_WINHTTP_SECURE_CHANNEL_ERROR                  = Error(12000 + 157)
   309  	_ERROR_WINHTTP_SECURE_INVALID_CERT                   = Error(12000 + 169)
   310  	_ERROR_WINHTTP_SECURE_CERT_REVOKED                   = Error(12000 + 170)
   311  	_ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE               = Error(12000 + 179)
   312  	_ERROR_WINHTTP_AUTODETECTION_FAILED                  = Error(12000 + 180)
   313  	_ERROR_WINHTTP_HEADER_COUNT_EXCEEDED                 = Error(12000 + 181)
   314  	_ERROR_WINHTTP_HEADER_SIZE_OVERFLOW                  = Error(12000 + 182)
   315  	_ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW = Error(12000 + 183)
   316  	_ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW               = Error(12000 + 184)
   317  	_ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY            = Error(12000 + 185)
   318  	_ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY     = Error(12000 + 186)
   319  	_ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED_PROXY         = Error(12000 + 187)
   320  	_ERROR_WINHTTP_SECURE_FAILURE_PROXY                  = Error(12000 + 188)
   321  	_ERROR_WINHTTP_RESERVED_189                          = Error(12000 + 189)
   322  	_ERROR_WINHTTP_HTTP_PROTOCOL_MISMATCH                = Error(12000 + 190)
   323  	_WINHTTP_ERROR_LAST                                  = _WINHTTP_ERROR_BASE + 190
   324  )
   325  
   326  type _URL_COMPONENTS struct {
   327  	structSize      uint32
   328  	scheme          *uint16
   329  	schemeLength    uint32
   330  	schemeType      uint32
   331  	hostName        *uint16
   332  	hostNameLength  uint32
   333  	port            uint16
   334  	username        *uint16
   335  	usernameLength  uint32
   336  	password        *uint16
   337  	passwordLength  uint32
   338  	urlPath         *uint16
   339  	urlPathLength   uint32
   340  	extraInfo       *uint16
   341  	extraInfoLength uint32
   342  }
   343  
   344  //sys	winHttpOpen(userAgent *uint16, accessType uint32, proxy *uint16, proxyBypass *uint16, flags uint32) (sessionHandle _HINTERNET, err error) = winhttp.WinHttpOpen
   345  //sys	winHttpSetStatusCallback(handle _HINTERNET, callback uintptr, notificationFlags uint32, reserved uintptr) (previousCallback uintptr, err error) [failretval==_WINHTTP_INVALID_STATUS_CALLBACK] = winhttp.WinHttpSetStatusCallback
   346  //sys	winHttpCloseHandle(handle _HINTERNET) (err error) = winhttp.WinHttpCloseHandle
   347  //sys	winHttpConnect(sessionHandle _HINTERNET, serverName *uint16, serverPort uint16, reserved uint32) (handle _HINTERNET, err error) = winhttp.WinHttpConnect
   348  //sys	winHttpOpenRequest(connectHandle _HINTERNET, verb *uint16, objectName *uint16, version *uint16, referrer *uint16, acceptTypes **uint16, flags uint32) (requestHandle _HINTERNET, err error) = winhttp.WinHttpOpenRequest
   349  //sys	winHttpSendRequest(requestHandle _HINTERNET, headers *uint16, headersLength uint32, optional *byte, optionalLength uint32, totalLength uint32, context uintptr) (err error) = winhttp.WinHttpSendRequest
   350  //sys	winHttpReceiveResponse(requestHandle _HINTERNET, reserved uintptr) (err error) = winhttp.WinHttpReceiveResponse
   351  //sys	winHttpQueryHeaders(requestHandle _HINTERNET, infoLevel uint32, name *uint16, buffer unsafe.Pointer, bufferLen *uint32, index *uint32) (err error) = winhttp.WinHttpQueryHeaders
   352  //sys	winHttpQueryDataAvailable(requestHandle _HINTERNET, bytesAvailable *uint32) (err error) = winhttp.WinHttpQueryDataAvailable
   353  //sys	winHttpReadData(requestHandle _HINTERNET, buffer *byte, bufferSize uint32, bytesRead *uint32) (err error) = winhttp.WinHttpReadData
   354  //sys	winHttpCrackUrl(url *uint16, urlSize uint32, flags uint32, components *_URL_COMPONENTS) (err error) = winhttp.WinHttpCrackUrl
   355  //sys	winHttpSetOption(sessionOrRequestHandle _HINTERNET, option uint32, buffer unsafe.Pointer, bufferLen uint32) (err error) = winhttp.WinHttpSetOption