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;
}
}
+ virtual
public CookieCollection Cookies {
get {
CheckDisposed ();
}
}
+ virtual
public string Method {
get {
CheckDisposed ();
}
}
+ virtual
public HttpStatusCode StatusCode {
get {
return statusCode;
}
}
+ virtual
public string StatusDescription {
get {
CheckDisposed ();
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;
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 ()
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;
}
}
}