From a1b96a3135bdae274db58ef35ab35708f2257896 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Wed, 26 Dec 2018 01:16:02 +0100 Subject: Clean up HttpClientManager, LiveTvManager and InstallationManager --- .../HttpClientManager/HttpClientManager.cs | 123 ++++++++------------- 1 file changed, 44 insertions(+), 79 deletions(-) (limited to 'Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs') diff --git a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs index 23dd55b18..a2f508b80 100644 --- a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs +++ b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs @@ -5,18 +5,15 @@ using System.Globalization; using System.IO; using System.Linq; using System.Net; -using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; -using Emby.Server.Implementations.IO; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; using MediaBrowser.Model.IO; using Microsoft.Extensions.Logging; using MediaBrowser.Model.Net; -using MediaBrowser.Controller.IO; namespace Emby.Server.Implementations.HttpClientManager { @@ -136,9 +133,8 @@ namespace Emby.Server.Implementations.HttpClientManager } var request = CreateWebRequest(url); - var httpWebRequest = request as HttpWebRequest; - if (httpWebRequest != null) + if (request is HttpWebRequest httpWebRequest) { AddRequestHeaders(httpWebRequest, options); @@ -159,25 +155,12 @@ namespace Emby.Server.Implementations.HttpClientManager { httpWebRequest.AutomaticDecompression = DecompressionMethods.None; } - } - - - - request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.BypassCache); - if (httpWebRequest != null) - { if (options.EnableKeepAlive) { httpWebRequest.KeepAlive = true; } - } - request.Method = method; - request.Timeout = options.TimeoutMs; - - if (httpWebRequest != null) - { if (!string.IsNullOrEmpty(options.Host)) { httpWebRequest.Host = options.Host; @@ -189,6 +172,11 @@ namespace Emby.Server.Implementations.HttpClientManager } } + request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.BypassCache); + + request.Method = method; + request.Timeout = options.TimeoutMs; + if (!string.IsNullOrWhiteSpace(userInfo)) { var parts = userInfo.Split(':'); @@ -215,7 +203,7 @@ namespace Emby.Server.Implementations.HttpClientManager { var hasUserAgent = false; - foreach (var header in options.RequestHeaders.ToList()) + foreach (var header in options.RequestHeaders) { if (string.Equals(header.Key, "Accept", StringComparison.OrdinalIgnoreCase)) { @@ -340,8 +328,8 @@ namespace Emby.Server.Implementations.HttpClientManager _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(responseCachePath)); using (var responseStream = response.Content) + using (var memoryStream = new MemoryStream()) { - var memoryStream = new MemoryStream(); await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false); memoryStream.Position = 0; @@ -379,10 +367,7 @@ namespace Emby.Server.Implementations.HttpClientManager { try { - // TODO: We can always put this in the options object if needed - var requestEncoding = Encoding.UTF8; - - var bytes = options.RequestContentBytes ?? requestEncoding.GetBytes(options.RequestContent ?? string.Empty); + var bytes = options.RequestContentBytes ?? Encoding.UTF8.GetBytes(options.RequestContent ?? string.Empty); var contentType = options.RequestContentType ?? "application/x-www-form-urlencoded"; @@ -392,7 +377,6 @@ namespace Emby.Server.Implementations.HttpClientManager } httpWebRequest.ContentType = contentType; - httpWebRequest.ContentLength = bytes.Length; (await httpWebRequest.GetRequestStreamAsync().ConfigureAwait(false)).Write(bytes, 0, bytes.Length); } @@ -409,10 +393,7 @@ namespace Emby.Server.Implementations.HttpClientManager if ((DateTime.UtcNow - client.LastTimeout).TotalSeconds < TimeoutSeconds) { - if (options.ResourcePool != null) - { - options.ResourcePool.Release(); - } + options.ResourcePool?.Release(); throw new HttpException(string.Format("Connection to {0} timed out", options.Url)) { IsTimedOut = true }; } @@ -455,9 +436,8 @@ namespace Emby.Server.Implementations.HttpClientManager options.CancellationToken.ThrowIfCancellationRequested(); using (var stream = httpResponse.GetResponseStream()) + using (var memoryStream = new MemoryStream()) { - var memoryStream = new MemoryStream(); - await stream.CopyToAsync(memoryStream).ConfigureAwait(false); memoryStream.Position = 0; @@ -476,10 +456,7 @@ namespace Emby.Server.Implementations.HttpClientManager } finally { - if (options.ResourcePool != null) - { - options.ResourcePool.Release(); - } + options.ResourcePool?.Release(); } } @@ -488,13 +465,9 @@ namespace Emby.Server.Implementations.HttpClientManager var responseInfo = new HttpResponseInfo(disposable) { Content = content, - StatusCode = httpResponse.StatusCode, - ContentType = httpResponse.ContentType, - ContentLength = contentLength, - ResponseUrl = httpResponse.ResponseUri.ToString() }; @@ -511,11 +484,8 @@ namespace Emby.Server.Implementations.HttpClientManager var responseInfo = new HttpResponseInfo { TempFilePath = tempFile, - StatusCode = httpResponse.StatusCode, - ContentType = httpResponse.ContentType, - ContentLength = contentLength }; @@ -619,22 +589,20 @@ namespace Emby.Server.Implementations.HttpClientManager var contentLength = GetContentLength(httpResponse); - if (!contentLength.HasValue) + if (contentLength.HasValue) { - // We're not able to track progress - using (var stream = httpResponse.GetResponseStream()) + using (var fs = _fileSystem.GetFileStream(tempFile, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) { - using (var fs = _fileSystem.GetFileStream(tempFile, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) - { - await stream.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false); - } + await httpResponse.GetResponseStream().CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false); } } else { + // We're not able to track progress + using (var stream = httpResponse.GetResponseStream()) using (var fs = _fileSystem.GetFileStream(tempFile, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true)) { - await httpResponse.GetResponseStream().CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false); + await stream.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false); } } @@ -650,10 +618,7 @@ namespace Emby.Server.Implementations.HttpClientManager } finally { - if (options.ResourcePool != null) - { - options.ResourcePool.Release(); - } + options.ResourcePool?.Release(); } } @@ -810,35 +775,38 @@ namespace Emby.Server.Implementations.HttpClientManager var isSuccessful = statusCode >= HttpStatusCode.OK && statusCode <= (HttpStatusCode)299; - if (!isSuccessful) + if (isSuccessful) + { + return; + } + + if (options.LogErrorResponseBody) { - if (options.LogErrorResponseBody) + try { - try + using (var stream = response.GetResponseStream()) { - using (var stream = response.GetResponseStream()) + if (stream != null) { - if (stream != null) + using (var reader = new StreamReader(stream)) { - using (var reader = new StreamReader(stream)) - { - var msg = reader.ReadToEnd(); + var msg = reader.ReadToEnd(); - _logger.LogError(msg); - } + _logger.LogError(msg); } } } - catch - { - - } } - throw new HttpException(response.StatusDescription) + catch { - StatusCode = response.StatusCode - }; + + } } + + throw new HttpException(response.StatusDescription) + { + StatusCode = response.StatusCode + }; } private Task GetResponseAsync(WebRequest request, TimeSpan timeout) @@ -859,13 +827,10 @@ namespace Emby.Server.Implementations.HttpClientManager private static void TimeoutCallback(object state, bool timedOut) { - if (timedOut) + if (timedOut && state != null) { WebRequest request = (WebRequest)state; - if (state != null) - { - request.Abort(); - } + request.Abort(); } } @@ -880,13 +845,13 @@ namespace Emby.Server.Implementations.HttpClientManager public void OnError(Task task) { - if (task.Exception != null) + if (task.Exception == null) { - taskCompletion.TrySetException(task.Exception); + taskCompletion.TrySetException(Enumerable.Empty()); } else { - taskCompletion.TrySetException(new List()); + taskCompletion.TrySetException(task.Exception); } } } -- cgit v1.2.3 From 0bbc4f8219f3df020e505fc861f42f4f52e20766 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Sun, 30 Dec 2018 13:01:52 +0100 Subject: Figure out why it's failing --- .../HttpClientManager/HttpClientManager.cs | 28 +++++++++------------- MediaBrowser.Providers/Movies/MovieDbProvider.cs | 4 ++-- 2 files changed, 13 insertions(+), 19 deletions(-) (limited to 'Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs') diff --git a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs index a2f508b80..60482780f 100644 --- a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs +++ b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.IO; using System.Linq; using System.Net; +using System.Net.Cache; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -122,17 +123,17 @@ namespace Emby.Server.Implementations.HttpClientManager private WebRequest GetRequest(HttpRequestOptions options, string method) { - var url = options.Url; + string url = options.Url; - var uriAddress = new Uri(url); - var userInfo = uriAddress.UserInfo; + Uri uriAddress = new Uri(url); + string userInfo = uriAddress.UserInfo; if (!string.IsNullOrWhiteSpace(userInfo)) { _logger.LogInformation("Found userInfo in url: {0} ... url: {1}", userInfo, url); url = url.Replace(userInfo + "@", string.Empty); } - var request = CreateWebRequest(url); + WebRequest request = CreateWebRequest(url); if (request is HttpWebRequest httpWebRequest) { @@ -140,15 +141,11 @@ namespace Emby.Server.Implementations.HttpClientManager if (options.EnableHttpCompression) { - if (options.DecompressionMethod.HasValue) - { - httpWebRequest.AutomaticDecompression = options.DecompressionMethod.Value == CompressionMethod.Gzip - ? DecompressionMethods.GZip - : DecompressionMethods.Deflate; - } - else + httpWebRequest.AutomaticDecompression = DecompressionMethods.Deflate; + if (options.DecompressionMethod.HasValue + && options.DecompressionMethod.Value == CompressionMethod.Gzip) { - httpWebRequest.AutomaticDecompression = DecompressionMethods.Deflate; + httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip; } } else @@ -156,10 +153,7 @@ namespace Emby.Server.Implementations.HttpClientManager httpWebRequest.AutomaticDecompression = DecompressionMethods.None; } - if (options.EnableKeepAlive) - { - httpWebRequest.KeepAlive = true; - } + httpWebRequest.KeepAlive = options.EnableKeepAlive; if (!string.IsNullOrEmpty(options.Host)) { @@ -172,7 +166,7 @@ namespace Emby.Server.Implementations.HttpClientManager } } - request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.BypassCache); + request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache); request.Method = method; request.Timeout = options.TimeoutMs; diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs index d967d7b62..1ebf56e23 100644 --- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs @@ -146,7 +146,7 @@ namespace MediaBrowser.Providers.Movies return _tmdbSettings; } - using (var response = await GetMovieDbResponse(new HttpRequestOptions + using (HttpResponseInfo response = await GetMovieDbResponse(new HttpRequestOptions { Url = string.Format(TmdbConfigUrl, ApiKey), CancellationToken = cancellationToken, @@ -154,7 +154,7 @@ namespace MediaBrowser.Providers.Movies }).ConfigureAwait(false)) { - using (var json = response.Content) + using (Stream json = response.Content) { _tmdbSettings = await _jsonSerializer.DeserializeFromStreamAsync(json).ConfigureAwait(false); -- cgit v1.2.3 From 3d6dac26f4172ab1dae016e01ea7ca94dad665a6 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Thu, 3 Jan 2019 18:28:01 +0100 Subject: Don't dispose the object we are returning --- Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs') diff --git a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs index 60482780f..d3ba1b683 100644 --- a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs +++ b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs @@ -322,8 +322,8 @@ namespace Emby.Server.Implementations.HttpClientManager _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(responseCachePath)); using (var responseStream = response.Content) - using (var memoryStream = new MemoryStream()) { + var memoryStream = new MemoryStream(); await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false); memoryStream.Position = 0; @@ -430,8 +430,8 @@ namespace Emby.Server.Implementations.HttpClientManager options.CancellationToken.ThrowIfCancellationRequested(); using (var stream = httpResponse.GetResponseStream()) - using (var memoryStream = new MemoryStream()) { + var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream).ConfigureAwait(false); memoryStream.Position = 0; -- cgit v1.2.3