1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System; 6 using System.Runtime.InteropServices; 7 using System.Text; 8 9 internal partial class Interop 10 { 11 internal partial class WinHttp 12 { 13 public const uint ERROR_SUCCESS = 0; 14 public const uint ERROR_FILE_NOT_FOUND = 2; 15 public const uint ERROR_INVALID_HANDLE = 6; 16 public const uint ERROR_INVALID_PARAMETER = 87; 17 public const uint ERROR_INSUFFICIENT_BUFFER = 122; 18 public const uint ERROR_NOT_FOUND = 1168; 19 public const uint ERROR_WINHTTP_INVALID_OPTION = 12009; 20 public const uint ERROR_WINHTTP_LOGIN_FAILURE = 12015; 21 public const uint ERROR_WINHTTP_OPERATION_CANCELLED = 12017; 22 public const uint ERROR_WINHTTP_INCORRECT_HANDLE_STATE = 12019; 23 public const uint ERROR_WINHTTP_CONNECTION_ERROR = 12030; 24 public const uint ERROR_WINHTTP_RESEND_REQUEST = 12032; 25 public const uint ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED = 12044; 26 public const uint ERROR_WINHTTP_HEADER_NOT_FOUND = 12150; 27 public const uint ERROR_WINHTTP_SECURE_FAILURE = 12175; 28 public const uint ERROR_WINHTTP_AUTODETECTION_FAILED = 12180; 29 30 public const uint WINHTTP_OPTION_PROXY = 38; 31 public const uint WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0; 32 public const uint WINHTTP_ACCESS_TYPE_NO_PROXY = 1; 33 public const uint WINHTTP_ACCESS_TYPE_NAMED_PROXY = 3; 34 public const uint WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY = 4; 35 36 public const uint WINHTTP_AUTOPROXY_AUTO_DETECT = 0x00000001; 37 public const uint WINHTTP_AUTOPROXY_CONFIG_URL = 0x00000002; 38 public const uint WINHTTP_AUTOPROXY_HOST_KEEPCASE = 0x00000004; 39 public const uint WINHTTP_AUTOPROXY_HOST_LOWERCASE = 0x00000008; 40 public const uint WINHTTP_AUTOPROXY_RUN_INPROCESS = 0x00010000; 41 public const uint WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY = 0x00020000; 42 public const uint WINHTTP_AUTOPROXY_NO_DIRECTACCESS = 0x00040000; 43 public const uint WINHTTP_AUTOPROXY_NO_CACHE_CLIENT = 0x00080000; 44 public const uint WINHTTP_AUTOPROXY_NO_CACHE_SVC = 0x00100000; 45 public const uint WINHTTP_AUTOPROXY_SORT_RESULTS = 0x00400000; 46 47 public const uint WINHTTP_AUTO_DETECT_TYPE_DHCP = 0x00000001; 48 public const uint WINHTTP_AUTO_DETECT_TYPE_DNS_A = 0x00000002; 49 50 public const string WINHTTP_NO_PROXY_NAME = null; 51 public const string WINHTTP_NO_PROXY_BYPASS = null; 52 53 public const uint WINHTTP_ADDREQ_FLAG_ADD = 0x20000000; 54 public const uint WINHTTP_ADDREQ_FLAG_REPLACE = 0x80000000; 55 56 public const string WINHTTP_NO_REFERER = null; 57 public const string WINHTTP_DEFAULT_ACCEPT_TYPES = null; 58 59 public const ushort INTERNET_DEFAULT_PORT = 0; 60 public const ushort INTERNET_DEFAULT_HTTP_PORT = 80; 61 public const ushort INTERNET_DEFAULT_HTTPS_PORT = 443; 62 63 public const uint WINHTTP_FLAG_SECURE = 0x00800000; 64 public const uint WINHTTP_FLAG_ESCAPE_DISABLE = 0x00000040; 65 66 public const StringBuilder WINHTTP_NO_ADDITIONAL_HEADERS = null; 67 68 public const uint WINHTTP_QUERY_FLAG_NUMBER = 0x20000000; 69 public const uint WINHTTP_QUERY_VERSION = 18; 70 public const uint WINHTTP_QUERY_STATUS_CODE = 19; 71 public const uint WINHTTP_QUERY_STATUS_TEXT = 20; 72 public const uint WINHTTP_QUERY_RAW_HEADERS = 21; 73 public const uint WINHTTP_QUERY_RAW_HEADERS_CRLF = 22; 74 public const uint WINHTTP_QUERY_CONTENT_ENCODING = 29; 75 public const uint WINHTTP_QUERY_SET_COOKIE = 43; 76 public const uint WINHTTP_QUERY_CUSTOM = 65535; 77 public const string WINHTTP_HEADER_NAME_BY_INDEX = null; 78 public const byte[] WINHTTP_NO_OUTPUT_BUFFER = null; 79 80 public const uint WINHTTP_OPTION_DECOMPRESSION = 118; 81 public const uint WINHTTP_DECOMPRESSION_FLAG_GZIP = 0x00000001; 82 public const uint WINHTTP_DECOMPRESSION_FLAG_DEFLATE = 0x00000002; 83 public const uint WINHTTP_DECOMPRESSION_FLAG_ALL = WINHTTP_DECOMPRESSION_FLAG_GZIP | WINHTTP_DECOMPRESSION_FLAG_DEFLATE; 84 85 public const uint WINHTTP_OPTION_REDIRECT_POLICY = 88; 86 public const uint WINHTTP_OPTION_REDIRECT_POLICY_NEVER = 0; 87 public const uint WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP = 1; 88 public const uint WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS = 2; 89 public const uint WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS = 89; 90 91 public const uint WINHTTP_OPTION_MAX_CONNS_PER_SERVER = 73; 92 public const uint WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER = 74; 93 94 public const uint WINHTTP_OPTION_DISABLE_FEATURE = 63; 95 public const uint WINHTTP_DISABLE_COOKIES = 0x00000001; 96 public const uint WINHTTP_DISABLE_REDIRECTS = 0x00000002; 97 public const uint WINHTTP_DISABLE_AUTHENTICATION = 0x00000004; 98 public const uint WINHTTP_DISABLE_KEEP_ALIVE = 0x00000008; 99 100 public const uint WINHTTP_OPTION_ENABLE_FEATURE = 79; 101 public const uint WINHTTP_ENABLE_SSL_REVOCATION = 0x00000001; 102 103 public const uint WINHTTP_OPTION_CLIENT_CERT_CONTEXT = 47; 104 public const uint WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST = 94; 105 public const uint WINHTTP_OPTION_SERVER_CERT_CONTEXT = 78; 106 public const uint WINHTTP_OPTION_SECURITY_FLAGS = 31; 107 public const uint WINHTTP_OPTION_SECURE_PROTOCOLS = 84; 108 public const uint WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 = 0x00000008; 109 public const uint WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 = 0x00000020; 110 public const uint WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 = 0x00000080; 111 public const uint WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 = 0x00000200; 112 public const uint WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 = 0x00000800; 113 114 public const uint SECURITY_FLAG_IGNORE_UNKNOWN_CA = 0x00000100; 115 public const uint SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000; 116 public const uint SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000; 117 public const uint SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE = 0x00000200; 118 119 public const uint WINHTTP_OPTION_AUTOLOGON_POLICY = 77; 120 public const uint WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM = 0; // default creds only sent to intranet servers (default) 121 public const uint WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW = 1; // default creds set to all servers 122 public const uint WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH = 2; // default creds never sent 123 124 public const uint WINHTTP_AUTH_SCHEME_BASIC = 0x00000001; 125 public const uint WINHTTP_AUTH_SCHEME_NTLM = 0x00000002; 126 public const uint WINHTTP_AUTH_SCHEME_PASSPORT = 0x00000004; 127 public const uint WINHTTP_AUTH_SCHEME_DIGEST = 0x00000008; 128 public const uint WINHTTP_AUTH_SCHEME_NEGOTIATE = 0x00000010; 129 130 public const uint WINHTTP_AUTH_TARGET_SERVER = 0x00000000; 131 public const uint WINHTTP_AUTH_TARGET_PROXY = 0x00000001; 132 133 public const uint WINHTTP_OPTION_USERNAME = 0x1000; 134 public const uint WINHTTP_OPTION_PASSWORD = 0x1001; 135 public const uint WINHTTP_OPTION_PROXY_USERNAME = 0x1002; 136 public const uint WINHTTP_OPTION_PROXY_PASSWORD = 0x1003; 137 138 public const uint WINHTTP_OPTION_SERVER_SPN_USED = 106; 139 public const uint WINHTTP_OPTION_SERVER_CBT = 108; 140 141 public const uint WINHTTP_OPTION_CONNECT_TIMEOUT = 3; 142 public const uint WINHTTP_OPTION_SEND_TIMEOUT = 5; 143 public const uint WINHTTP_OPTION_RECEIVE_TIMEOUT = 6; 144 145 public const uint WINHTTP_OPTION_URL = 34; 146 147 public const uint WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE = 91; 148 public const uint WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE = 92; 149 public const uint WINHTTP_OPTION_CONNECTION_INFO = 93; 150 151 public const uint WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS = 111; 152 153 public const uint WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL = 133; 154 public const uint WINHTTP_OPTION_HTTP_PROTOCOL_USED = 134; 155 public const uint WINHTTP_PROTOCOL_FLAG_HTTP2 = 0x1; 156 157 public const uint WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET = 114; 158 public const uint WINHTTP_OPTION_WEB_SOCKET_CLOSE_TIMEOUT = 115; 159 public const uint WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL = 116; 160 161 public const uint WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE = 122; 162 public const uint WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE = 123; 163 164 public enum WINHTTP_WEB_SOCKET_BUFFER_TYPE 165 { 166 WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE = 0, 167 WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE = 1, 168 WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE = 2, 169 WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE = 3, 170 WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE = 4 171 } 172 173 public const uint WINHTTP_OPTION_CONTEXT_VALUE = 45; 174 175 public const uint WINHTTP_FLAG_ASYNC = 0x10000000; 176 177 public const uint WINHTTP_CALLBACK_STATUS_RESOLVING_NAME = 0x00000001; 178 public const uint WINHTTP_CALLBACK_STATUS_NAME_RESOLVED = 0x00000002; 179 public const uint WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER = 0x00000004; 180 public const uint WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER = 0x00000008; 181 public const uint WINHTTP_CALLBACK_STATUS_SENDING_REQUEST = 0x00000010; 182 public const uint WINHTTP_CALLBACK_STATUS_REQUEST_SENT = 0x00000020; 183 public const uint WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE = 0x00000040; 184 public const uint WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED = 0x00000080; 185 public const uint WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION = 0x00000100; 186 public const uint WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED = 0x00000200; 187 public const uint WINHTTP_CALLBACK_STATUS_HANDLE_CREATED = 0x00000400; 188 public const uint WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING = 0x00000800; 189 public const uint WINHTTP_CALLBACK_STATUS_DETECTING_PROXY = 0x00001000; 190 public const uint WINHTTP_CALLBACK_STATUS_REDIRECT = 0x00004000; 191 public const uint WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE = 0x00008000; 192 public const uint WINHTTP_CALLBACK_STATUS_SECURE_FAILURE = 0x00010000; 193 public const uint WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE = 0x00020000; 194 public const uint WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE = 0x00040000; 195 public const uint WINHTTP_CALLBACK_STATUS_READ_COMPLETE = 0x00080000; 196 public const uint WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE = 0x00100000; 197 public const uint WINHTTP_CALLBACK_STATUS_REQUEST_ERROR = 0x00200000; 198 public const uint WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE = 0x00400000; 199 public const uint WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE = 0x01000000; 200 public const uint WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE = 0x02000000; 201 public const uint WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE = 0x04000000; 202 203 public const uint WINHTTP_CALLBACK_FLAG_SEND_REQUEST = 204 WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | 205 WINHTTP_CALLBACK_STATUS_REQUEST_SENT; 206 public const uint WINHTTP_CALLBACK_FLAG_HANDLES = 207 WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | 208 WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING; 209 public const uint WINHTTP_CALLBACK_FLAG_REDIRECT = WINHTTP_CALLBACK_STATUS_REDIRECT; 210 public const uint WINHTTP_CALLBACK_FLAG_SECURE_FAILURE = WINHTTP_CALLBACK_STATUS_SECURE_FAILURE; 211 public const uint WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE = WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE; 212 public const uint WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE = WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE; 213 public const uint WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE = WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE; 214 public const uint WINHTTP_CALLBACK_FLAG_READ_COMPLETE = WINHTTP_CALLBACK_STATUS_READ_COMPLETE; 215 public const uint WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE = WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE; 216 public const uint WINHTTP_CALLBACK_FLAG_REQUEST_ERROR = WINHTTP_CALLBACK_STATUS_REQUEST_ERROR; 217 public const uint WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE = WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE; 218 public const uint WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS = 219 WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | 220 WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE | 221 WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | 222 WINHTTP_CALLBACK_STATUS_READ_COMPLETE | 223 WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | 224 WINHTTP_CALLBACK_STATUS_REQUEST_ERROR | 225 WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE; 226 public const uint WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS = 0xFFFFFFFF; 227 228 public const uint WININET_E_CONNECTION_RESET = 0x80072EFF; 229 230 public const int WINHTTP_INVALID_STATUS_CALLBACK = -1; WINHTTP_STATUS_CALLBACK( IntPtr handle, IntPtr context, uint internetStatus, IntPtr statusInformation, uint statusInformationLength)231 public delegate void WINHTTP_STATUS_CALLBACK( 232 IntPtr handle, 233 IntPtr context, 234 uint internetStatus, 235 IntPtr statusInformation, 236 uint statusInformationLength); 237 238 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 239 public struct WINHTTP_AUTOPROXY_OPTIONS 240 { 241 public uint Flags; 242 public uint AutoDetectFlags; 243 [MarshalAs(UnmanagedType.LPWStr)] 244 public string AutoConfigUrl; 245 public IntPtr Reserved1; 246 public uint Reserved2; 247 [MarshalAs(UnmanagedType.Bool)] 248 public bool AutoLoginIfChallenged; 249 } 250 251 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 252 public struct WINHTTP_CURRENT_USER_IE_PROXY_CONFIG 253 { 254 [MarshalAs(UnmanagedType.Bool)] 255 public bool AutoDetect; 256 public IntPtr AutoConfigUrl; 257 public IntPtr Proxy; 258 public IntPtr ProxyBypass; 259 } 260 261 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 262 public struct WINHTTP_PROXY_INFO 263 { 264 public uint AccessType; 265 public IntPtr Proxy; 266 public IntPtr ProxyBypass; 267 } 268 269 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 270 public struct WINHTTP_CONNECTION_INFO 271 { 272 public uint Size; 273 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] 274 public byte[] LocalAddress; // SOCKADDR_STORAGE 275 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] 276 public byte[] RemoteAddress; // SOCKADDR_STORAGE 277 } 278 279 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 280 public struct WINHTTP_ASYNC_RESULT 281 { 282 public IntPtr dwResult; 283 public uint dwError; 284 } 285 286 public const uint API_RECEIVE_RESPONSE = 1; 287 public const uint API_QUERY_DATA_AVAILABLE = 2; 288 public const uint API_READ_DATA = 3; 289 public const uint API_WRITE_DATA = 4; 290 public const uint API_SEND_REQUEST = 5; 291 292 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 293 public struct WINHTTP_WEB_SOCKET_ASYNC_RESULT 294 { 295 public WINHTTP_ASYNC_RESULT AsyncResult; 296 public WINHTTP_WEB_SOCKET_OPERATION Operation; 297 } 298 299 public enum WINHTTP_WEB_SOCKET_OPERATION 300 { 301 WINHTTP_WEB_SOCKET_SEND_OPERATION = 0, 302 WINHTTP_WEB_SOCKET_RECEIVE_OPERATION = 1, 303 WINHTTP_WEB_SOCKET_CLOSE_OPERATION = 2, 304 WINHTTP_WEB_SOCKET_SHUTDOWN_OPERATION = 3 305 } 306 307 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 308 public struct WINHTTP_WEB_SOCKET_STATUS 309 { 310 public uint dwBytesTransferred; 311 public WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType; 312 } 313 } 314 } 315