| | | 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 | | |
| | | 4 | | using System; |
| | | 5 | | using System.Runtime.InteropServices; |
| | | 6 | | #if NET |
| | | 7 | | using System.Runtime.InteropServices.Marshalling; |
| | | 8 | | #endif |
| | | 9 | | using System.Text; |
| | | 10 | | |
| | | 11 | | internal static partial class Interop |
| | | 12 | | { |
| | | 13 | | internal static partial class WinHttp |
| | | 14 | | { |
| | | 15 | | public const uint ERROR_SUCCESS = 0; |
| | | 16 | | public const uint ERROR_FILE_NOT_FOUND = 2; |
| | | 17 | | public const uint ERROR_INVALID_HANDLE = 6; |
| | | 18 | | public const uint ERROR_INVALID_PARAMETER = 87; |
| | | 19 | | public const uint ERROR_INSUFFICIENT_BUFFER = 122; |
| | | 20 | | public const uint ERROR_NOT_FOUND = 1168; |
| | | 21 | | public const uint ERROR_WINHTTP_INVALID_OPTION = 12009; |
| | | 22 | | public const uint ERROR_WINHTTP_LOGIN_FAILURE = 12015; |
| | | 23 | | public const uint ERROR_WINHTTP_OPERATION_CANCELLED = 12017; |
| | | 24 | | public const uint ERROR_WINHTTP_INCORRECT_HANDLE_STATE = 12019; |
| | | 25 | | public const uint ERROR_WINHTTP_CONNECTION_ERROR = 12030; |
| | | 26 | | public const uint ERROR_WINHTTP_RESEND_REQUEST = 12032; |
| | | 27 | | public const uint ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED = 12044; |
| | | 28 | | public const uint ERROR_WINHTTP_HEADER_NOT_FOUND = 12150; |
| | | 29 | | public const uint ERROR_WINHTTP_SECURE_FAILURE = 12175; |
| | | 30 | | public const uint ERROR_WINHTTP_AUTODETECTION_FAILED = 12180; |
| | | 31 | | |
| | | 32 | | public const uint WINHTTP_OPTION_PROXY = 38; |
| | | 33 | | public const uint WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0; |
| | | 34 | | public const uint WINHTTP_ACCESS_TYPE_NO_PROXY = 1; |
| | | 35 | | public const uint WINHTTP_ACCESS_TYPE_NAMED_PROXY = 3; |
| | | 36 | | public const uint WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY = 4; |
| | | 37 | | |
| | | 38 | | public const uint WINHTTP_AUTOPROXY_AUTO_DETECT = 0x00000001; |
| | | 39 | | public const uint WINHTTP_AUTOPROXY_CONFIG_URL = 0x00000002; |
| | | 40 | | public const uint WINHTTP_AUTOPROXY_HOST_KEEPCASE = 0x00000004; |
| | | 41 | | public const uint WINHTTP_AUTOPROXY_HOST_LOWERCASE = 0x00000008; |
| | | 42 | | public const uint WINHTTP_AUTOPROXY_RUN_INPROCESS = 0x00010000; |
| | | 43 | | public const uint WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY = 0x00020000; |
| | | 44 | | public const uint WINHTTP_AUTOPROXY_NO_DIRECTACCESS = 0x00040000; |
| | | 45 | | public const uint WINHTTP_AUTOPROXY_NO_CACHE_CLIENT = 0x00080000; |
| | | 46 | | public const uint WINHTTP_AUTOPROXY_NO_CACHE_SVC = 0x00100000; |
| | | 47 | | public const uint WINHTTP_AUTOPROXY_SORT_RESULTS = 0x00400000; |
| | | 48 | | |
| | | 49 | | public const uint WINHTTP_AUTO_DETECT_TYPE_DHCP = 0x00000001; |
| | | 50 | | public const uint WINHTTP_AUTO_DETECT_TYPE_DNS_A = 0x00000002; |
| | | 51 | | |
| | | 52 | | public const string WINHTTP_NO_PROXY_NAME = null; |
| | | 53 | | public const string WINHTTP_NO_PROXY_BYPASS = null; |
| | | 54 | | |
| | | 55 | | public const uint WINHTTP_ADDREQ_FLAG_ADD = 0x20000000; |
| | | 56 | | public const uint WINHTTP_ADDREQ_FLAG_REPLACE = 0x80000000; |
| | | 57 | | |
| | | 58 | | public const string WINHTTP_NO_REFERER = null; |
| | | 59 | | public const string WINHTTP_DEFAULT_ACCEPT_TYPES = null; |
| | | 60 | | |
| | | 61 | | public const ushort INTERNET_DEFAULT_PORT = 0; |
| | | 62 | | public const ushort INTERNET_DEFAULT_HTTP_PORT = 80; |
| | | 63 | | public const ushort INTERNET_DEFAULT_HTTPS_PORT = 443; |
| | | 64 | | |
| | | 65 | | public const uint WINHTTP_FLAG_SECURE = 0x00800000; |
| | | 66 | | public const uint WINHTTP_FLAG_ESCAPE_DISABLE = 0x00000040; |
| | | 67 | | public const uint WINHTTP_FLAG_AUTOMATIC_CHUNKING = 0x00000200; |
| | | 68 | | |
| | | 69 | | public const uint WINHTTP_QUERY_FLAG_NUMBER = 0x20000000; |
| | | 70 | | public const uint WINHTTP_QUERY_VERSION = 18; |
| | | 71 | | public const uint WINHTTP_QUERY_STATUS_CODE = 19; |
| | | 72 | | public const uint WINHTTP_QUERY_STATUS_TEXT = 20; |
| | | 73 | | public const uint WINHTTP_QUERY_RAW_HEADERS = 21; |
| | | 74 | | public const uint WINHTTP_QUERY_RAW_HEADERS_CRLF = 22; |
| | | 75 | | public const uint WINHTTP_QUERY_FLAG_TRAILERS = 0x02000000; |
| | | 76 | | public const uint WINHTTP_QUERY_CONTENT_ENCODING = 29; |
| | | 77 | | public const uint WINHTTP_QUERY_SET_COOKIE = 43; |
| | | 78 | | public const uint WINHTTP_QUERY_CUSTOM = 65535; |
| | | 79 | | public const string WINHTTP_HEADER_NAME_BY_INDEX = null; |
| | | 80 | | public const byte[] WINHTTP_NO_OUTPUT_BUFFER = null; |
| | | 81 | | |
| | | 82 | | public const uint WINHTTP_OPTION_DECOMPRESSION = 118; |
| | | 83 | | public const uint WINHTTP_DECOMPRESSION_FLAG_GZIP = 0x00000001; |
| | | 84 | | public const uint WINHTTP_DECOMPRESSION_FLAG_DEFLATE = 0x00000002; |
| | | 85 | | public const uint WINHTTP_DECOMPRESSION_FLAG_ALL = WINHTTP_DECOMPRESSION_FLAG_GZIP | WINHTTP_DECOMPRESSION_FLAG_ |
| | | 86 | | |
| | | 87 | | public const uint WINHTTP_OPTION_REDIRECT_POLICY = 88; |
| | | 88 | | public const uint WINHTTP_OPTION_REDIRECT_POLICY_NEVER = 0; |
| | | 89 | | public const uint WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP = 1; |
| | | 90 | | public const uint WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS = 2; |
| | | 91 | | public const uint WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS = 89; |
| | | 92 | | |
| | | 93 | | public const uint WINHTTP_OPTION_MAX_CONNS_PER_SERVER = 73; |
| | | 94 | | public const uint WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER = 74; |
| | | 95 | | |
| | | 96 | | public const uint WINHTTP_OPTION_DISABLE_FEATURE = 63; |
| | | 97 | | public const uint WINHTTP_DISABLE_COOKIES = 0x00000001; |
| | | 98 | | public const uint WINHTTP_DISABLE_REDIRECTS = 0x00000002; |
| | | 99 | | public const uint WINHTTP_DISABLE_AUTHENTICATION = 0x00000004; |
| | | 100 | | public const uint WINHTTP_DISABLE_KEEP_ALIVE = 0x00000008; |
| | | 101 | | |
| | | 102 | | public const uint WINHTTP_OPTION_ENABLE_FEATURE = 79; |
| | | 103 | | public const uint WINHTTP_ENABLE_SSL_REVOCATION = 0x00000001; |
| | | 104 | | |
| | | 105 | | public const uint WINHTTP_OPTION_CLIENT_CERT_CONTEXT = 47; |
| | | 106 | | public const uint WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST = 94; |
| | | 107 | | public const uint WINHTTP_OPTION_SERVER_CERT_CONTEXT = 78; |
| | | 108 | | public const uint WINHTTP_OPTION_SECURITY_FLAGS = 31; |
| | | 109 | | public const uint WINHTTP_OPTION_SECURE_PROTOCOLS = 84; |
| | | 110 | | public const uint WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 = 0x00000008; |
| | | 111 | | public const uint WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 = 0x00000020; |
| | | 112 | | public const uint WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 = 0x00000080; |
| | | 113 | | public const uint WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 = 0x00000200; |
| | | 114 | | public const uint WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 = 0x00000800; |
| | | 115 | | public const uint WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3 = 0x00002000; |
| | | 116 | | |
| | | 117 | | public const uint SECURITY_FLAG_IGNORE_UNKNOWN_CA = 0x00000100; |
| | | 118 | | public const uint SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000; |
| | | 119 | | public const uint SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000; |
| | | 120 | | public const uint SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE = 0x00000200; |
| | | 121 | | |
| | | 122 | | public const uint WINHTTP_OPTION_AUTOLOGON_POLICY = 77; |
| | | 123 | | public const uint WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM = 0; // default creds only sent to intranet servers (d |
| | | 124 | | public const uint WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW = 1; // default creds set to all servers |
| | | 125 | | public const uint WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH = 2; // default creds never sent |
| | | 126 | | |
| | | 127 | | public const uint WINHTTP_AUTH_SCHEME_BASIC = 0x00000001; |
| | | 128 | | public const uint WINHTTP_AUTH_SCHEME_NTLM = 0x00000002; |
| | | 129 | | public const uint WINHTTP_AUTH_SCHEME_PASSPORT = 0x00000004; |
| | | 130 | | public const uint WINHTTP_AUTH_SCHEME_DIGEST = 0x00000008; |
| | | 131 | | public const uint WINHTTP_AUTH_SCHEME_NEGOTIATE = 0x00000010; |
| | | 132 | | |
| | | 133 | | public const uint WINHTTP_AUTH_TARGET_SERVER = 0x00000000; |
| | | 134 | | public const uint WINHTTP_AUTH_TARGET_PROXY = 0x00000001; |
| | | 135 | | |
| | | 136 | | public const uint WINHTTP_OPTION_USERNAME = 0x1000; |
| | | 137 | | // [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Suppression approved. It is p |
| | | 138 | | public const uint WINHTTP_OPTION_PASSWORD = 0x1001; |
| | | 139 | | public const uint WINHTTP_OPTION_PROXY_USERNAME = 0x1002; |
| | | 140 | | // [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Suppression approved. It is p |
| | | 141 | | public const uint WINHTTP_OPTION_PROXY_PASSWORD = 0x1003; |
| | | 142 | | |
| | | 143 | | public const uint WINHTTP_OPTION_SERVER_SPN_USED = 106; |
| | | 144 | | public const uint WINHTTP_OPTION_SERVER_CBT = 108; |
| | | 145 | | |
| | | 146 | | public const uint WINHTTP_OPTION_CONNECT_TIMEOUT = 3; |
| | | 147 | | public const uint WINHTTP_OPTION_SEND_TIMEOUT = 5; |
| | | 148 | | public const uint WINHTTP_OPTION_RECEIVE_TIMEOUT = 6; |
| | | 149 | | |
| | | 150 | | public const uint WINHTTP_OPTION_URL = 34; |
| | | 151 | | |
| | | 152 | | public const uint WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE = 91; |
| | | 153 | | public const uint WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE = 92; |
| | | 154 | | public const uint WINHTTP_OPTION_CONNECTION_INFO = 93; |
| | | 155 | | |
| | | 156 | | public const uint WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS = 111; |
| | | 157 | | |
| | | 158 | | public const uint WINHTTP_OPTION_ENABLE_HTTP2_PLUS_CLIENT_CERT = 161; |
| | | 159 | | public const uint WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL = 133; |
| | | 160 | | public const uint WINHTTP_OPTION_HTTP_PROTOCOL_USED = 134; |
| | | 161 | | public const uint WINHTTP_PROTOCOL_FLAG_HTTP2 = 0x1; |
| | | 162 | | public const uint WINHTTP_HTTP2_PLUS_CLIENT_CERT_FLAG = 0x1; |
| | | 163 | | public const uint WINHTTP_OPTION_DISABLE_STREAM_QUEUE = 139; |
| | | 164 | | |
| | | 165 | | public const uint WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET = 114; |
| | | 166 | | public const uint WINHTTP_OPTION_WEB_SOCKET_CLOSE_TIMEOUT = 115; |
| | | 167 | | public const uint WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL = 116; |
| | | 168 | | |
| | | 169 | | public const uint WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE = 122; |
| | | 170 | | public const uint WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE = 123; |
| | | 171 | | |
| | | 172 | | public const uint WINHTTP_OPTION_TCP_KEEPALIVE = 152; |
| | | 173 | | public const uint WINHTTP_OPTION_STREAM_ERROR_CODE = 159; |
| | | 174 | | public const uint WINHTTP_OPTION_REQUIRE_STREAM_END = 160; |
| | | 175 | | |
| | | 176 | | public enum WINHTTP_WEB_SOCKET_BUFFER_TYPE |
| | | 177 | | { |
| | | 178 | | WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE = 0, |
| | | 179 | | WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE = 1, |
| | | 180 | | WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE = 2, |
| | | 181 | | WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE = 3, |
| | | 182 | | WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE = 4 |
| | | 183 | | } |
| | | 184 | | |
| | | 185 | | public const uint WINHTTP_OPTION_CONTEXT_VALUE = 45; |
| | | 186 | | |
| | | 187 | | public const uint WINHTTP_FLAG_ASYNC = 0x10000000; |
| | | 188 | | |
| | | 189 | | public const uint WINHTTP_CALLBACK_STATUS_RESOLVING_NAME = 0x00000001; |
| | | 190 | | public const uint WINHTTP_CALLBACK_STATUS_NAME_RESOLVED = 0x00000002; |
| | | 191 | | public const uint WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER = 0x00000004; |
| | | 192 | | public const uint WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER = 0x00000008; |
| | | 193 | | public const uint WINHTTP_CALLBACK_STATUS_SENDING_REQUEST = 0x00000010; |
| | | 194 | | public const uint WINHTTP_CALLBACK_STATUS_REQUEST_SENT = 0x00000020; |
| | | 195 | | public const uint WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE = 0x00000040; |
| | | 196 | | public const uint WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED = 0x00000080; |
| | | 197 | | public const uint WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION = 0x00000100; |
| | | 198 | | public const uint WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED = 0x00000200; |
| | | 199 | | public const uint WINHTTP_CALLBACK_STATUS_HANDLE_CREATED = 0x00000400; |
| | | 200 | | public const uint WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING = 0x00000800; |
| | | 201 | | public const uint WINHTTP_CALLBACK_STATUS_DETECTING_PROXY = 0x00001000; |
| | | 202 | | public const uint WINHTTP_CALLBACK_STATUS_REDIRECT = 0x00004000; |
| | | 203 | | public const uint WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE = 0x00008000; |
| | | 204 | | public const uint WINHTTP_CALLBACK_STATUS_SECURE_FAILURE = 0x00010000; |
| | | 205 | | public const uint WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE = 0x00020000; |
| | | 206 | | public const uint WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE = 0x00040000; |
| | | 207 | | public const uint WINHTTP_CALLBACK_STATUS_READ_COMPLETE = 0x00080000; |
| | | 208 | | public const uint WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE = 0x00100000; |
| | | 209 | | public const uint WINHTTP_CALLBACK_STATUS_REQUEST_ERROR = 0x00200000; |
| | | 210 | | public const uint WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE = 0x00400000; |
| | | 211 | | public const uint WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE = 0x01000000; |
| | | 212 | | public const uint WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE = 0x02000000; |
| | | 213 | | public const uint WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE = 0x04000000; |
| | | 214 | | |
| | | 215 | | public const uint WINHTTP_CALLBACK_FLAG_SEND_REQUEST = |
| | | 216 | | WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | |
| | | 217 | | WINHTTP_CALLBACK_STATUS_REQUEST_SENT; |
| | | 218 | | public const uint WINHTTP_CALLBACK_FLAG_HANDLES = |
| | | 219 | | WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | |
| | | 220 | | WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING; |
| | | 221 | | public const uint WINHTTP_CALLBACK_FLAG_REDIRECT = WINHTTP_CALLBACK_STATUS_REDIRECT; |
| | | 222 | | public const uint WINHTTP_CALLBACK_FLAG_SECURE_FAILURE = WINHTTP_CALLBACK_STATUS_SECURE_FAILURE; |
| | | 223 | | public const uint WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE = WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE; |
| | | 224 | | public const uint WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE = WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE; |
| | | 225 | | public const uint WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE = WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE; |
| | | 226 | | public const uint WINHTTP_CALLBACK_FLAG_READ_COMPLETE = WINHTTP_CALLBACK_STATUS_READ_COMPLETE; |
| | | 227 | | public const uint WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE = WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE; |
| | | 228 | | public const uint WINHTTP_CALLBACK_FLAG_REQUEST_ERROR = WINHTTP_CALLBACK_STATUS_REQUEST_ERROR; |
| | | 229 | | public const uint WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE = WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLET |
| | | 230 | | public const uint WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS = |
| | | 231 | | WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | |
| | | 232 | | WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE | |
| | | 233 | | WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | |
| | | 234 | | WINHTTP_CALLBACK_STATUS_READ_COMPLETE | |
| | | 235 | | WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | |
| | | 236 | | WINHTTP_CALLBACK_STATUS_REQUEST_ERROR | |
| | | 237 | | WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE; |
| | | 238 | | public const uint WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS = 0xFFFFFFFF; |
| | | 239 | | |
| | | 240 | | public const uint WININET_E_CONNECTION_RESET = 0x80072EFF; |
| | | 241 | | |
| | | 242 | | public const int WINHTTP_INVALID_STATUS_CALLBACK = -1; |
| | | 243 | | public delegate void WINHTTP_STATUS_CALLBACK( |
| | | 244 | | IntPtr handle, |
| | | 245 | | IntPtr context, |
| | | 246 | | uint internetStatus, |
| | | 247 | | IntPtr statusInformation, |
| | | 248 | | uint statusInformationLength); |
| | | 249 | | |
| | | 250 | | #if NET |
| | | 251 | | [NativeMarshalling(typeof(Marshaller))] |
| | | 252 | | #endif |
| | | 253 | | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] |
| | | 254 | | public struct WINHTTP_AUTOPROXY_OPTIONS |
| | | 255 | | { |
| | | 256 | | public uint Flags; |
| | | 257 | | public uint AutoDetectFlags; |
| | | 258 | | [MarshalAs(UnmanagedType.LPWStr)] |
| | | 259 | | public string? AutoConfigUrl; |
| | | 260 | | public IntPtr Reserved1; |
| | | 261 | | public uint Reserved2; |
| | | 262 | | [MarshalAs(UnmanagedType.Bool)] |
| | | 263 | | public bool AutoLoginIfChallenged; |
| | | 264 | | #if NET |
| | | 265 | | [CustomMarshaller(typeof(WINHTTP_AUTOPROXY_OPTIONS), MarshalMode.Default, typeof(Marshaller))] |
| | | 266 | | public static class Marshaller |
| | | 267 | | { |
| | 0 | 268 | | public static Native ConvertToUnmanaged(WINHTTP_AUTOPROXY_OPTIONS managed) => new(managed); |
| | | 269 | | |
| | 0 | 270 | | public static WINHTTP_AUTOPROXY_OPTIONS ConvertToManaged(Native native) => native.ToManaged(); |
| | | 271 | | |
| | 0 | 272 | | public static void Free(Native native) => native.FreeNative(); |
| | | 273 | | |
| | | 274 | | public struct Native |
| | | 275 | | { |
| | | 276 | | private uint Flags; |
| | | 277 | | private uint AutoDetectFlags; |
| | | 278 | | private IntPtr AutoConfigUrl; |
| | | 279 | | private IntPtr Reserved1; |
| | | 280 | | private uint Reserved2; |
| | | 281 | | private int AutoLoginIfChallenged; |
| | | 282 | | |
| | | 283 | | public Native(WINHTTP_AUTOPROXY_OPTIONS managed) |
| | 0 | 284 | | { |
| | 0 | 285 | | Flags = managed.Flags; |
| | 0 | 286 | | AutoDetectFlags = managed.AutoDetectFlags; |
| | 0 | 287 | | AutoConfigUrl = managed.AutoConfigUrl is not null ? Marshal.StringToCoTaskMemUni(managed.AutoCon |
| | 0 | 288 | | Reserved1 = managed.Reserved1; |
| | 0 | 289 | | Reserved2 = managed.Reserved2; |
| | 0 | 290 | | AutoLoginIfChallenged = managed.AutoLoginIfChallenged ? 1 : 0; |
| | 0 | 291 | | } |
| | | 292 | | |
| | | 293 | | public WINHTTP_AUTOPROXY_OPTIONS ToManaged() |
| | 0 | 294 | | { |
| | 0 | 295 | | return new WINHTTP_AUTOPROXY_OPTIONS |
| | 0 | 296 | | { |
| | 0 | 297 | | Flags = Flags, |
| | 0 | 298 | | AutoDetectFlags = AutoDetectFlags, |
| | 0 | 299 | | AutoConfigUrl = AutoConfigUrl != IntPtr.Zero ? Marshal.PtrToStringUni(AutoConfigUrl) : null, |
| | 0 | 300 | | Reserved1 = Reserved1, |
| | 0 | 301 | | Reserved2 = Reserved2, |
| | 0 | 302 | | AutoLoginIfChallenged = AutoLoginIfChallenged != 0 |
| | 0 | 303 | | }; |
| | 0 | 304 | | } |
| | | 305 | | |
| | | 306 | | public void FreeNative() |
| | 0 | 307 | | { |
| | 0 | 308 | | Marshal.FreeCoTaskMem(AutoConfigUrl); |
| | 0 | 309 | | } |
| | | 310 | | } |
| | | 311 | | } |
| | | 312 | | #endif |
| | | 313 | | } |
| | | 314 | | |
| | | 315 | | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] |
| | | 316 | | public struct WINHTTP_CURRENT_USER_IE_PROXY_CONFIG |
| | | 317 | | { |
| | | 318 | | public int AutoDetect; |
| | | 319 | | public IntPtr AutoConfigUrl; |
| | | 320 | | public IntPtr Proxy; |
| | | 321 | | public IntPtr ProxyBypass; |
| | | 322 | | } |
| | | 323 | | |
| | | 324 | | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] |
| | | 325 | | public struct WINHTTP_PROXY_INFO |
| | | 326 | | { |
| | | 327 | | public uint AccessType; |
| | | 328 | | public IntPtr Proxy; |
| | | 329 | | public IntPtr ProxyBypass; |
| | | 330 | | } |
| | | 331 | | |
| | | 332 | | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] |
| | | 333 | | public struct WINHTTP_ASYNC_RESULT |
| | | 334 | | { |
| | | 335 | | public IntPtr dwResult; |
| | | 336 | | public uint dwError; |
| | | 337 | | } |
| | | 338 | | |
| | | 339 | | [StructLayout(LayoutKind.Sequential)] |
| | | 340 | | public unsafe struct WINHTTP_CONNECTION_INFO |
| | | 341 | | { |
| | | 342 | | // This field is actually 4 bytes, but we use nuint to avoid alignment issues for x64. |
| | | 343 | | // If we want to read this field in the future, we need to change type and make sure |
| | | 344 | | // alignment is correct for necessary archs. |
| | | 345 | | public nuint cbSize; |
| | | 346 | | public fixed byte LocalAddress[128]; |
| | | 347 | | public fixed byte RemoteAddress[128]; |
| | | 348 | | } |
| | | 349 | | |
| | | 350 | | [StructLayout(LayoutKind.Sequential)] |
| | | 351 | | public struct tcp_keepalive |
| | | 352 | | { |
| | | 353 | | public uint onoff; |
| | | 354 | | public uint keepalivetime; |
| | | 355 | | public uint keepaliveinterval; |
| | | 356 | | } |
| | | 357 | | |
| | | 358 | | public const uint API_RECEIVE_RESPONSE = 1; |
| | | 359 | | public const uint API_QUERY_DATA_AVAILABLE = 2; |
| | | 360 | | public const uint API_READ_DATA = 3; |
| | | 361 | | public const uint API_WRITE_DATA = 4; |
| | | 362 | | public const uint API_SEND_REQUEST = 5; |
| | | 363 | | |
| | | 364 | | public enum WINHTTP_WEB_SOCKET_OPERATION |
| | | 365 | | { |
| | | 366 | | WINHTTP_WEB_SOCKET_SEND_OPERATION = 0, |
| | | 367 | | WINHTTP_WEB_SOCKET_RECEIVE_OPERATION = 1, |
| | | 368 | | WINHTTP_WEB_SOCKET_CLOSE_OPERATION = 2, |
| | | 369 | | WINHTTP_WEB_SOCKET_SHUTDOWN_OPERATION = 3 |
| | | 370 | | } |
| | | 371 | | } |
| | | 372 | | } |