X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem%2FSystem.Net%2FHttpWebResponse.cs;h=32e9c14efbcc7860e1627831f4e40b9677fad1ca;hb=1ad39faaa0022f44e6409dac11a087197791eb3d;hp=1e6757d4f7cd8901482b2c838b5c0796031a67a7;hpb=f4a44a474ea9dbf49544cf9c97d727645c2d8e4a;p=mono.git diff --git a/mcs/class/System/System.Net/HttpWebResponse.cs b/mcs/class/System/System.Net/HttpWebResponse.cs index 1e6757d4f7c..32e9c14efbc 100644 --- a/mcs/class/System/System.Net/HttpWebResponse.cs +++ b/mcs/class/System/System.Net/HttpWebResponse.cs @@ -43,12 +43,8 @@ using System.Text; namespace System.Net { -#if MOONLIGHT - internal class HttpWebResponse : WebResponse, ISerializable, IDisposable { -#else [Serializable] public class HttpWebResponse : WebResponse, ISerializable, IDisposable { -#endif Uri uri; WebHeaderCollection webHeaders; CookieCollection cookieCollection; @@ -159,6 +155,7 @@ namespace System.Net } } + virtual public CookieCollection Cookies { get { CheckDisposed (); @@ -203,6 +200,7 @@ namespace System.Net } } + virtual public string Method { get { CheckDisposed (); @@ -231,12 +229,14 @@ namespace System.Net } } + virtual public HttpStatusCode StatusCode { get { return statusCode; } } + virtual public string StatusDescription { get { CheckDisposed (); @@ -269,7 +269,7 @@ namespace System.Net CheckDisposed (); if (stream == null) return Stream.Null; - if (0 == String.Compare (method, "HEAD", true)) // see par 4.3 & 9.4 + if (string.Equals (method, "HEAD", StringComparison.OrdinalIgnoreCase)) // see par 4.3 & 9.4 return Stream.Null; return stream; @@ -311,14 +311,12 @@ namespace System.Net void IDisposable.Dispose () { Dispose (true); - GC.SuppressFinalize (this); } - - void Dispose (bool disposing) + + protected override void Dispose (bool disposing) { this.disposed = true; - if (disposing) - Close (); + base.Dispose (true); } private void CheckDisposed () @@ -332,31 +330,33 @@ namespace System.Net if (webHeaders == null) return; - string value = webHeaders.Get ("Set-Cookie"); - if (value != null) { - SetCookie (value); - } - - value = webHeaders.Get ("Set-Cookie2"); - if (value != null) { - SetCookie (value); + // + // Don't terminate response reading on bad cookie value + // + string value; + CookieCollection cookies = null; + try { + value = webHeaders.Get ("Set-Cookie"); + if (value != null) + cookies = cookie_container.CookieCutter (uri, HttpKnownHeaderNames.SetCookie, value, false); + } catch { } - } - void SetCookie (string header) - { - if (cookieCollection == null) - cookieCollection = new CookieCollection (); - - var parser = new CookieParser (header); - foreach (var cookie in parser.Parse ()) { - if (cookie.Domain == "") - cookie.Domain = uri.Host; + try { + value = webHeaders.Get ("Set-Cookie2"); + if (value != null) { + var cookies2 = cookie_container.CookieCutter (uri, HttpKnownHeaderNames.SetCookie2, value, false); - cookieCollection.Add (cookie); - if (cookie_container != null) - cookie_container.Add (uri, cookie); + if (cookies != null && cookies.Count != 0) { + cookies.Add (cookies2); + } else { + cookies = cookies2; + } + } + } catch { } + + this.cookieCollection = cookies; } } }