https://bugzilla.novell.com/show_bug.cgi?id=691291
https://bugzilla.novell.com/show_bug.cgi?id=691291#c3 --- Comment #3 from QuickJack . <test051...@hotmail.com> 2011-09-30 07:39:56 UTC --- By debugging the class library I found a solution which provides full support for proxy bypassing in Linux. I have tested the scenario in Ubuntu Maverick. Problem #################### IWebProxy WebRequest.GetSysteWebProxy() creates an object of class WebProxy. However, the current implementation is always using the default constructor. As a result, the proxy bypass list is always null. Following is the original code located in WebProxy.cs: [MonoTODO("Look in other places for proxy config info")] public static IWebProxy GetSystemWebProxy () { string address = Environment.GetEnvironmentVariable ("http_proxy"); if (address == null) address = 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; } } return new WebProxy (uri); } catch (UriFormatException) { } } if (cfGetDefaultProxy != null) return (IWebProxy) cfGetDefaultProxy.Invoke (null, null); return new WebProxy (); } if (cfGetDefaultProxy != null) return (IWebProxy) cfGetDefaultProxy.Invoke (null, null); return new WebProxy (); } Solution #################### (1) IWebProxy WebRequest.GetSystemWebProxy() must use the full constructor the create a complete proxy object. This constructor contains a parameter called "string [] bypassList" (2) Within GetSystemeWideProxy() the bypassList must be determined depending on the no_proxy environment variable. I have modified WebRequest.cs as follows: [MonoTODO("Look in other places for proxy config info")] public static IWebProxy GetSystemWebProxy () { string address = Environment.GetEnvironmentVariable ("http_proxy"); if (address == null) address = 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; } } string[] bypassList=null; string bypass = Environment.GetEnvironmentVariable ("no_proxy"); if (bypass == null) bypass = Environment.GetEnvironmentVariable ("NO_PROXY"); if (bypass != null) { bypass = bypass.Remove (bypass.IndexOf("*.local"), 7);//remove Ubuntu's standard "*.local" entry to prevent exception bypassList = bypass.Split (new char[]{','}, StringSplitOptions.RemoveEmptyEntries); } return new WebProxy (uri, false, bypassList); } catch (UriFormatException) { } } if (cfGetDefaultProxy != null) return (IWebProxy) cfGetDefaultProxy.Invoke (null, null); return new WebProxy (); } -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - mono-bugs@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-bugs