private bool winHttpGetProxyForUrl(string destination, ref NativeMethods.WinHttp.WINHTTP_AUTOPROXY_OPTIONS autoProxyOptions, out string proxyListString) { proxyListString = null; bool flag; var proxyInfo = new NativeMethods.WinHttp.WINHTTP_PROXY_INFO(); RuntimeHelpers.PrepareConstrainedRegions(); try { flag = NativeMethods.WinHttp.WinHttpGetProxyForUrl(session, destination, ref autoProxyOptions, out proxyInfo); if (flag) { proxyListString = Marshal.PtrToStringUni(proxyInfo.Proxy); } } finally { Marshal.FreeHGlobal(proxyInfo.Proxy); Marshal.FreeHGlobal(proxyInfo.ProxyBypass); } return(flag); }
private int getAutoProxies(Uri destination, Uri scriptLocation, out string proxyListString) { int num = 0; var autoProxyOptions = new NativeMethods.WinHttp.WINHTTP_AUTOPROXY_OPTIONS(); autoProxyOptions.AutoLogonIfChallenged = false; if (scriptLocation == null) { autoProxyOptions.Flags = NativeMethods.WinHttp.AutoProxyFlags.AutoDetect; autoProxyOptions.AutoConfigUrl = null; autoProxyOptions.AutoDetectFlags = NativeMethods.WinHttp.AutoDetectType.Dhcp | NativeMethods.WinHttp.AutoDetectType.DnsA; } else { autoProxyOptions.Flags = NativeMethods.WinHttp.AutoProxyFlags.AutoProxyConfigUrl; autoProxyOptions.AutoConfigUrl = scriptLocation.ToString(); autoProxyOptions.AutoDetectFlags = NativeMethods.WinHttp.AutoDetectType.None; } if (!winHttpGetProxyForUrl(destination.ToString(), ref autoProxyOptions, out proxyListString)) { num = getLastWin32Error(); if (num == (int)NativeMethods.WinHttp.ErrorCodes.LoginFailure && Credentials != null) { autoProxyOptions.AutoLogonIfChallenged = true; if (!winHttpGetProxyForUrl(destination.ToString(), ref autoProxyOptions, out proxyListString)) { num = getLastWin32Error(); } } } return(num); }