}
string content_encoding = webHeaders ["Content-Encoding"];
- if (content_encoding == "gzip" && (data.request.AutomaticDecompression & DecompressionMethods.GZip) != 0)
+ if (content_encoding == "gzip" && (data.request.AutomaticDecompression & DecompressionMethods.GZip) != 0) {
stream = new GZipStream (stream, CompressionMode.Decompress);
- else if (content_encoding == "deflate" && (data.request.AutomaticDecompression & DecompressionMethods.Deflate) != 0)
+ webHeaders.Remove (HttpRequestHeader.ContentEncoding);
+ }
+ else if (content_encoding == "deflate" && (data.request.AutomaticDecompression & DecompressionMethods.Deflate) != 0) {
stream = new DeflateStream (stream, CompressionMode.Decompress);
+ webHeaders.Remove (HttpRequestHeader.ContentEncoding);
+ }
}
[Obsolete ("Serialization is obsoleted for this type", false)]
version = (Version) info.GetValue ("version", typeof (Version));
statusCode = (HttpStatusCode) info.GetValue ("statusCode", typeof (HttpStatusCode));
}
-
+
// Properties
public string CharacterSet {
}
}
-#if NET_4_5
virtual
-#endif
public CookieCollection Cookies {
get {
CheckDisposed ();
}
}
-#if NET_4_5
virtual
-#endif
public string Method {
get {
CheckDisposed ();
public string Server {
get {
CheckDisposed ();
- return webHeaders ["Server"];
+ return webHeaders ["Server"] ?? "";
}
}
-#if NET_4_5
virtual
-#endif
public HttpStatusCode StatusCode {
get {
return statusCode;
}
}
-#if NET_4_5
virtual
-#endif
public string StatusDescription {
get {
CheckDisposed ();
}
}
+ public override bool SupportsHeaders {
+ get {
+ return true;
+ }
+ }
+
// Methods
public string GetResponseHeader (string headerName)
Dispose (true);
}
-#if NET_4_0
protected override void Dispose (bool disposing)
{
this.disposed = true;
base.Dispose (true);
}
-#else
- void Dispose (bool disposing)
- {
- this.disposed = true;
- if (disposing)
- Close ();
- }
-#endif
private void CheckDisposed ()
{
// Don't terminate response reading on bad cookie value
//
string value;
+ CookieCollection cookies = null;
try {
value = webHeaders.Get ("Set-Cookie");
- if (value != null && SetCookie (value))
- return;
+ if (value != null)
+ cookies = cookie_container.CookieCutter (uri, HttpKnownHeaderNames.SetCookie, value, false);
} catch {
}
try {
value = webHeaders.Get ("Set-Cookie2");
- if (value != null)
- SetCookie (value);
- } catch {
- }
- }
+ if (value != null) {
+ var cookies2 = cookie_container.CookieCutter (uri, HttpKnownHeaderNames.SetCookie2, value, false);
- bool SetCookie (string header)
- {
- if (cookieCollection == null)
- cookieCollection = new CookieCollection ();
-
- bool at_least_one_set = false;
- var parser = new CookieParser (header);
- foreach (var cookie in parser.Parse ()) {
- if (cookie.Domain == "") {
- cookie.Domain = uri.Host;
- cookie.HasDomain = false;
- }
-
- if (cookie.HasDomain &&
- !CookieContainer.CheckSameOrigin (uri, cookie.Domain))
- continue;
-
- cookieCollection.Add (cookie);
- if (cookie_container != null) {
- cookie_container.Add (uri, cookie);
- at_least_one_set = true;
+ if (cookies != null && cookies.Count != 0) {
+ cookies.Add (cookies2);
+ } else {
+ cookies = cookies2;
+ }
}
+ } catch {
}
- return at_least_one_set;
+ this.cookieCollection = cookies;
}
}
}