Browse Source

Merge pull request #1562 from Bond-009/buffered

Don't copy the complete response stream
Anthony Lavado 5 years ago
parent
commit
80145cd5a3
1 changed files with 14 additions and 37 deletions
  1. 14 37
      Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs

+ 14 - 37
Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs

@@ -284,47 +284,24 @@ namespace Emby.Server.Implementations.HttpClientManager
 
 
             options.CancellationToken.ThrowIfCancellationRequested();
             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)
         public Task<HttpResponseInfo> Post(HttpRequestOptions options)