Imported Upstream version 5.2.0.175

Former-commit-id: bb0468d0f257ff100aa895eb5fe583fb5dfbf900
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-06-07 13:16:24 +00:00
parent 4bdbaf4a88
commit 966bba02bb
8776 changed files with 346420 additions and 149650 deletions

View File

@ -292,8 +292,9 @@ namespace System.Net.Http
}
if (header.Key == "Transfer-Encoding") {
// Chunked Transfer-Encoding is never set for HttpWebRequest. It's detected
// from ContentLength by HttpWebRequest
//
// Chunked Transfer-Encoding is set for HttpWebRequest later when Content length is checked
//
values = values.Where (l => l != "chunked");
}
@ -354,15 +355,22 @@ namespace System.Net.Http
}
}
//
// Content length has to be set because HttpWebRequest is running without buffering
//
var contentLength = content.Headers.ContentLength;
if (contentLength != null) {
wrequest.ContentLength = contentLength.Value;
if (request.Headers.TransferEncodingChunked == true) {
wrequest.SendChunked = true;
} else {
await content.LoadIntoBufferAsync (MaxRequestContentBufferSize).ConfigureAwait (false);
wrequest.ContentLength = content.Headers.ContentLength.Value;
//
// Content length has to be set because HttpWebRequest is running without buffering
//
var contentLength = content.Headers.ContentLength;
if (contentLength != null) {
wrequest.ContentLength = contentLength.Value;
} else {
if (MaxRequestContentBufferSize == 0)
throw new InvalidOperationException ("The content length of the request content can't be determined. Either set TransferEncodingChunked to true, load content into buffer, or set MaxRequestContentBufferSize.");
await content.LoadIntoBufferAsync (MaxRequestContentBufferSize).ConfigureAwait (false);
wrequest.ContentLength = content.Headers.ContentLength.Value;
}
}
wrequest.ResendContentFactory = content.CopyTo;
@ -394,7 +402,6 @@ namespace System.Net.Http
return CreateResponseMessage (wresponse, request, cancellationToken);
}
#if NETSTANDARD
public bool CheckCertificateRevocationList {
get {
throw new NotImplementedException ();
@ -460,7 +467,5 @@ namespace System.Net.Http
throw new NotImplementedException ();
}
}
#endif
}
}

View File

@ -131,7 +131,6 @@ namespace System.Net.Http
throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
}
#if NETSTANDARD
public bool CheckCertificateRevocationList {
get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
@ -170,6 +169,5 @@ namespace System.Net.Http
get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
}
#endif
}
}

View File

@ -1093,6 +1093,110 @@ namespace MonoTests.System.Net.Http
}
}
[Test]
#if FEATURE_NO_BSD_SOCKETS
[ExpectedException (typeof (PlatformNotSupportedException))]
#endif
public void Post_TransferEncodingChunked ()
{
bool? failed = null;
var listener = CreateListener (l => {
try {
var request = l.Request;
Assert.IsNull (request.AcceptTypes, "#1");
Assert.AreEqual (-1, request.ContentLength64, "#2");
Assert.IsNull (request.ContentType, "#3");
Assert.AreEqual (0, request.Cookies.Count, "#4");
Assert.IsTrue (request.HasEntityBody, "#5");
Assert.AreEqual (TestHost, request.Headers ["Host"], "#6b");
Assert.AreEqual ("POST", request.HttpMethod, "#7");
Assert.IsFalse (request.IsAuthenticated, "#8");
Assert.IsTrue (request.IsLocal, "#9");
Assert.IsFalse (request.IsSecureConnection, "#10");
Assert.IsFalse (request.IsWebSocketRequest, "#11");
Assert.IsTrue (request.KeepAlive, "#12");
Assert.AreEqual (HttpVersion.Version11, request.ProtocolVersion, "#13");
Assert.IsNull (request.ServiceName, "#14");
Assert.IsNull (request.UrlReferrer, "#15");
Assert.IsNull (request.UserAgent, "#16");
Assert.IsNull (request.UserLanguages, "#17");
Assert.AreEqual ("chunked", request.Headers ["Transfer-Encoding"], "#18");
Assert.IsNull (request.Headers ["Content-Length"], "#19");
failed = false;
} catch (Exception e) {
failed = true;
Console.WriteLine (e);
}
});
try {
var client = new HttpClient ();
client.DefaultRequestHeaders.TransferEncodingChunked = true;
var imageContent = new StreamContent (new MemoryStream ());
var response = client.PostAsync (LocalServer, imageContent).Result;
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "#101");
Assert.AreEqual(false, failed, "#102");
} finally {
listener.Close ();
}
}
[Test]
#if FEATURE_NO_BSD_SOCKETS
[ExpectedException (typeof (PlatformNotSupportedException))]
#endif
public void Post_StreamCaching ()
{
bool? failed = null;
var listener = CreateListener (l => {
try {
var request = l.Request;
Assert.IsNull (request.AcceptTypes, "#1");
Assert.AreEqual (0, request.ContentLength64, "#2");
Assert.IsNull (request.ContentType, "#3");
Assert.AreEqual (0, request.Cookies.Count, "#4");
Assert.IsFalse (request.HasEntityBody, "#5");
Assert.AreEqual (TestHost, request.Headers ["Host"], "#6b");
Assert.AreEqual ("POST", request.HttpMethod, "#7");
Assert.IsFalse (request.IsAuthenticated, "#8");
Assert.IsTrue (request.IsLocal, "#9");
Assert.IsFalse (request.IsSecureConnection, "#10");
Assert.IsFalse (request.IsWebSocketRequest, "#11");
Assert.IsTrue (request.KeepAlive, "#12");
Assert.AreEqual (HttpVersion.Version11, request.ProtocolVersion, "#13");
Assert.IsNull (request.ServiceName, "#14");
Assert.IsNull (request.UrlReferrer, "#15");
Assert.IsNull (request.UserAgent, "#16");
Assert.IsNull (request.UserLanguages, "#17");
Assert.IsNull (request.Headers ["Transfer-Encoding"], "#18");
Assert.AreEqual ("0", request.Headers ["Content-Length"], "#19");
failed = false;
} catch (Exception e) {
failed = true;
Console.WriteLine (e);
}
});
try {
var client = new HttpClient ();
var imageContent = new StreamContent (new MemoryStream ());
var response = client.PostAsync (LocalServer, imageContent).Result;
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "#101");
Assert.AreEqual(false, failed, "#102");
} finally {
listener.Close ();
}
}
[Test]
[Category ("MobileNotWorking")] // Missing encoding
#if FEATURE_NO_BSD_SOCKETS