/mcs/class/System/ReferenceSources/AutoWebProxyScriptEngine.cs
C# | 181 lines | 147 code | 32 blank | 2 comment | 27 complexity | a29efb655ebfcecf4d4c2b142758a8d8 MD5 | raw file
Possible License(s): LGPL-2.0, MPL-2.0-no-copyleft-exception, CC-BY-SA-3.0, GPL-2.0
- using System.Collections;
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- #if !MONOTOUCH_WATCH
- using Mono.Net;
- #endif
- namespace System.Net
- {
- class AutoWebProxyScriptEngine
- {
- public AutoWebProxyScriptEngine (WebProxy proxy, bool useRegistry)
- {
- }
- public Uri AutomaticConfigurationScript { get; set; }
- public bool AutomaticallyDetectSettings { get; set; }
- public bool GetProxies (Uri destination, out IList<string> proxyList)
- {
- int i = 0;
- return GetProxies (destination, out proxyList, ref i);
- }
- public bool GetProxies(Uri destination, out IList<string> proxyList, ref int syncStatus)
- {
- proxyList = null;
- return false;
- }
- public void Close ()
- {
- }
- public void Abort (ref int syncStatus)
- {
- }
- public void CheckForChanges ()
- {
- }
- #if !MOBILE
- public WebProxyData GetWebProxyData ()
- {
- WebProxyData data;
- // TODO: Could re-use some pieces from _AutoWebProxyScriptEngine.cs
- if (IsWindows ()) {
- data = InitializeRegistryGlobalProxy ();
- if (data != null)
- return data;
- }
- data = ReadEnvVariables ();
- return data ?? new WebProxyData ();
- }
- WebProxyData ReadEnvVariables ()
- {
- string address = Environment.GetEnvironmentVariable ("http_proxy") ?? Environment.GetEnvironmentVariable ("HTTP_PROXY");
- if (address != null) {
- try {
- if (!address.StartsWith ("http://"))
- address = "http://" + address;
- Uri uri = new Uri (address);
- IPAddress ip;
-
- if (IPAddress.TryParse (uri.Host, out ip)) {
- if (IPAddress.Any.Equals (ip)) {
- UriBuilder builder = new UriBuilder (uri);
- builder.Host = "127.0.0.1";
- uri = builder.Uri;
- } else if (IPAddress.IPv6Any.Equals (ip)) {
- UriBuilder builder = new UriBuilder (uri);
- builder.Host = "[::1]";
- uri = builder.Uri;
- }
- }
- bool bBypassOnLocal = false;
- ArrayList al = new ArrayList ();
- string bypass = Environment.GetEnvironmentVariable ("no_proxy") ?? Environment.GetEnvironmentVariable ("NO_PROXY");
-
- if (bypass != null) {
- string[] bypassList = bypass.Split (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
-
- foreach (string str in bypassList) {
- if (str != "*.local")
- al.Add (str);
- else
- bBypassOnLocal = true;
- }
- }
- return new WebProxyData {
- proxyAddress = uri,
- bypassOnLocal = bBypassOnLocal,
- bypassList = CreateBypassList (al)
- };
- } catch (UriFormatException) {
- }
- }
- return null;
- }
- static bool IsWindows ()
- {
- return (int) Environment.OSVersion.Platform < 4;
- }
-
- WebProxyData InitializeRegistryGlobalProxy ()
- {
- int iProxyEnable = (int)Microsoft.Win32.Registry.GetValue ("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "ProxyEnable", 0);
- if (iProxyEnable > 0) {
- string strHttpProxy = "";
- bool bBypassOnLocal = false;
- ArrayList al = new ArrayList ();
-
- string strProxyServer = (string)Microsoft.Win32.Registry.GetValue ("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "ProxyServer", null);
- string strProxyOverrride = (string)Microsoft.Win32.Registry.GetValue ("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "ProxyOverride", null);
-
- if (strProxyServer.Contains ("=")) {
- foreach (string strEntry in strProxyServer.Split (new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
- if (strEntry.StartsWith ("http=")) {
- strHttpProxy = strEntry.Substring (5);
- break;
- }
- } else strHttpProxy = strProxyServer;
-
- if (strProxyOverrride != null) {
- string[] bypassList = strProxyOverrride.Split (new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
-
- foreach (string str in bypassList) {
- if (str != "<local>")
- al.Add (str);
- else
- bBypassOnLocal = true;
- }
- }
- return new WebProxyData {
- proxyAddress = ToUri (strHttpProxy),
- bypassOnLocal = bBypassOnLocal,
- bypassList = CreateBypassList (al)
- };
- }
- return null;
- }
- static Uri ToUri (string address)
- {
- if (address == null)
- return null;
-
- if (address.IndexOf ("://", StringComparison.Ordinal) == -1)
- address = "http://" + address;
- return new Uri (address);
- }
- // Takes an ArrayList of fileglob-formatted strings and returns an array of Regex-formatted strings
- static ArrayList CreateBypassList (ArrayList al)
- {
- string[] result = al.ToArray (typeof (string)) as string[];
- for (int c = 0; c < result.Length; c++)
- {
- result [c] = "^" +
- Regex.Escape (result [c]).Replace (@"\*", ".*").Replace (@"\?", ".") +
- "$";
- }
- return new ArrayList (result);
- }
- #endif
- }
- }