private int GetProxies(Uri destination, Uri scriptLocation, out string proxyListString)
 {
     int num = 0;
     proxyListString = null;
     UnsafeNclNativeMethods.WinHttp.WINHTTP_AUTOPROXY_OPTIONS autoProxyOptions = new UnsafeNclNativeMethods.WinHttp.WINHTTP_AUTOPROXY_OPTIONS {
         AutoLogonIfChallenged = false
     };
     if (scriptLocation == null)
     {
         autoProxyOptions.Flags = UnsafeNclNativeMethods.WinHttp.AutoProxyFlags.AutoDetect;
         autoProxyOptions.AutoConfigUrl = null;
         autoProxyOptions.AutoDetectFlags = UnsafeNclNativeMethods.WinHttp.AutoDetectType.DnsA | UnsafeNclNativeMethods.WinHttp.AutoDetectType.Dhcp;
     }
     else
     {
         autoProxyOptions.Flags = UnsafeNclNativeMethods.WinHttp.AutoProxyFlags.AutoProxyConfigUrl;
         autoProxyOptions.AutoConfigUrl = scriptLocation.ToString();
         autoProxyOptions.AutoDetectFlags = UnsafeNclNativeMethods.WinHttp.AutoDetectType.None;
     }
     if (!this.WinHttpGetProxyForUrl(destination.ToString(), ref autoProxyOptions, out proxyListString))
     {
         num = GetLastWin32Error();
         if ((num == 0x2eef) && (base.Engine.Credentials != null))
         {
             autoProxyOptions.AutoLogonIfChallenged = true;
             if (!this.WinHttpGetProxyForUrl(destination.ToString(), ref autoProxyOptions, out proxyListString))
             {
                 num = GetLastWin32Error();
             }
         }
         if (Logging.On)
         {
             Logging.PrintError(Logging.Web, SR.GetString("net_log_proxy_winhttp_getproxy_failed", new object[] { destination, num }));
         }
     }
     return num;
 }
        private int GetProxies(Uri destination, Uri scriptLocation, out string proxyListString)
        {
            int errorCode = 0;
            proxyListString = null;

            UnsafeNclNativeMethods.WinHttp.WINHTTP_AUTOPROXY_OPTIONS autoProxyOptions =
                new UnsafeNclNativeMethods.WinHttp.WINHTTP_AUTOPROXY_OPTIONS();

            // Always try to download the PAC file without authentication. If we turn auth. on, the WinHttp
            // service will create a new session for every request (performance/memory implications).
            // Therefore we only turn auto-logon on if it is really needed.
            autoProxyOptions.AutoLogonIfChallenged = false;

            if (scriptLocation == null)
            {
                // Use auto-discovery to find the script location.
                autoProxyOptions.Flags = UnsafeNclNativeMethods.WinHttp.AutoProxyFlags.AutoDetect;
                autoProxyOptions.AutoConfigUrl = null;
                autoProxyOptions.AutoDetectFlags = UnsafeNclNativeMethods.WinHttp.AutoDetectType.Dhcp |
                    UnsafeNclNativeMethods.WinHttp.AutoDetectType.DnsA;
            }
            else
            {
                // Use the provided script location for the PAC file.
                autoProxyOptions.Flags = UnsafeNclNativeMethods.WinHttp.AutoProxyFlags.AutoProxyConfigUrl;
                autoProxyOptions.AutoConfigUrl = scriptLocation.ToString();
                autoProxyOptions.AutoDetectFlags = UnsafeNclNativeMethods.WinHttp.AutoDetectType.None;
            }

            if (!WinHttpGetProxyForUrl(destination.ToString(), ref autoProxyOptions, out proxyListString))
            {
                errorCode = GetLastWin32Error();

                // If the PAC file can't be downloaded because auth. was required, we check if the
                // credentials are set; if so, then we try again using auto-logon.
                // Note that by default webProxy.Credentials will be null. The user needs to set
                // <defaultProxy useDefaultCredentials="true"> in the config file, in order for
                // webProxy.Credentials to be set to DefaultNetworkCredentials.
                if ((errorCode == (int)UnsafeNclNativeMethods.WinHttp.ErrorCodes.LoginFailure) &&
                    (Engine.Credentials != null))
                {
                    // Now we need to try again, this time by enabling auto-logon.
                    autoProxyOptions.AutoLogonIfChallenged = true;

                    if (!WinHttpGetProxyForUrl(destination.ToString(), ref autoProxyOptions,
                        out proxyListString))
                    {
                        errorCode = GetLastWin32Error();
                    }
                }

                if (Logging.On) Logging.PrintError(Logging.Web, SR.GetString(SR.net_log_proxy_winhttp_getproxy_failed, destination, errorCode));
            }

            return errorCode;
        }