aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2019-07-24 23:46:58 +0200
committerBond_009 <bond.009@outlook.com>2019-07-24 23:46:58 +0200
commit773af2eef907186b6552b845eb61820909154413 (patch)
tree2573530069be8d182afa86ef868e78867c285865
parente8028de4d7cf1372dad54a7d871e853ac737d023 (diff)
Don't copy the complete response stream
-rw-r--r--Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs51
1 files changed, 14 insertions, 37 deletions
diff --git a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs
index 3e23150d8..331b5e29d 100644
--- a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs
+++ b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs
@@ -284,47 +284,24 @@ namespace Emby.Server.Implementations.HttpClientManager
options.CancellationToken.ThrowIfCancellationRequested();
- if (!options.BufferContent)
- {
- var response = await client.SendAsync(httpWebRequest, HttpCompletionOption.ResponseHeadersRead, options.CancellationToken).ConfigureAwait(false);
-
- await EnsureSuccessStatusCode(response, options).ConfigureAwait(false);
+ var response = await client.SendAsync(
+ httpWebRequest,
+ options.BufferContent ? HttpCompletionOption.ResponseContentRead : HttpCompletionOption.ResponseHeadersRead,
+ options.CancellationToken).ConfigureAwait(false);
- options.CancellationToken.ThrowIfCancellationRequested();
+ await EnsureSuccessStatusCode(response, options).ConfigureAwait(false);
- var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);
- return new HttpResponseInfo(response.Headers, response.Content.Headers)
- {
- Content = stream,
- StatusCode = response.StatusCode,
- ContentType = response.Content.Headers.ContentType?.MediaType,
- ContentLength = response.Content.Headers.ContentLength,
- ResponseUrl = response.Content.Headers.ContentLocation?.ToString()
- };
- }
+ options.CancellationToken.ThrowIfCancellationRequested();
- using (var response = await client.SendAsync(httpWebRequest, HttpCompletionOption.ResponseHeadersRead, options.CancellationToken).ConfigureAwait(false))
+ var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);
+ return new HttpResponseInfo(response.Headers, response.Content.Headers)
{
- await EnsureSuccessStatusCode(response, options).ConfigureAwait(false);
-
- options.CancellationToken.ThrowIfCancellationRequested();
-
- using (var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
- {
- var memoryStream = new MemoryStream();
- await stream.CopyToAsync(memoryStream, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false);
- memoryStream.Position = 0;
-
- return new HttpResponseInfo(response.Headers, response.Content.Headers)
- {
- Content = memoryStream,
- StatusCode = response.StatusCode,
- ContentType = response.Content.Headers.ContentType?.MediaType,
- ContentLength = memoryStream.Length,
- ResponseUrl = response.Content.Headers.ContentLocation?.ToString()
- };
- }
- }
+ Content = stream,
+ StatusCode = response.StatusCode,
+ ContentType = response.Content.Headers.ContentType?.MediaType,
+ ContentLength = response.Content.Headers.ContentLength,
+ ResponseUrl = response.Content.Headers.ContentLocation?.ToString()
+ };
}
public Task<HttpResponseInfo> Post(HttpRequestOptions options)