From 4432b88281cbd489ac4a71a8e9635c6325ccd168 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 26 Oct 2017 23:05:29 -0400 Subject: [PATCH 1/5] update network detection --- Emby.Server.Implementations/Networking/NetworkManager.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Emby.Server.Implementations/Networking/NetworkManager.cs b/Emby.Server.Implementations/Networking/NetworkManager.cs index 66b2cba39b..db2c455fba 100644 --- a/Emby.Server.Implementations/Networking/NetworkManager.cs +++ b/Emby.Server.Implementations/Networking/NetworkManager.cs @@ -103,7 +103,9 @@ namespace Emby.Server.Implementations.Networking } return endpoint.StartsWith("localhost", StringComparison.OrdinalIgnoreCase) || - endpoint.StartsWith("127.0.0.1", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("127.", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("192.168", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("169.", StringComparison.OrdinalIgnoreCase) || IsInPrivateAddressSpaceAndLocalSubnet(endpoint); } From 88caeaa783d8d6a7d2d17c98955fa4bc8264d446 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 26 Oct 2017 23:43:06 -0400 Subject: [PATCH 2/5] update address detection --- .../Networking/NetworkManager.cs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Emby.Server.Implementations/Networking/NetworkManager.cs b/Emby.Server.Implementations/Networking/NetworkManager.cs index db2c455fba..be85db80a1 100644 --- a/Emby.Server.Implementations/Networking/NetworkManager.cs +++ b/Emby.Server.Implementations/Networking/NetworkManager.cs @@ -113,7 +113,6 @@ namespace Emby.Server.Implementations.Networking { var endpointFirstPart = endpoint.Split('.')[0]; - string subnet_Match = ""; if ( endpoint.StartsWith("127.", StringComparison.OrdinalIgnoreCase) || endpoint.StartsWith("10.", StringComparison.OrdinalIgnoreCase) || @@ -122,7 +121,9 @@ namespace Emby.Server.Implementations.Networking ) { foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()) + { foreach (UnicastIPAddressInformation unicastIPAddressInformation in adapter.GetIPProperties().UnicastAddresses) + { if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork && endpointFirstPart == unicastIPAddressInformation.Address.ToString().Split('.')[0]) { int subnet_Test = 0; @@ -132,11 +133,18 @@ namespace Emby.Server.Implementations.Networking subnet_Test++; } - subnet_Match = String.Join(".", unicastIPAddressInformation.Address.ToString().Split('.').Take(subnet_Test).ToArray()); + var subnet_Match = String.Join(".", unicastIPAddressInformation.Address.ToString().Split('.').Take(subnet_Test).ToArray()); + + if (endpoint.StartsWith(subnet_Match + ".", StringComparison.OrdinalIgnoreCase)) + { + return true; + } } + } + } } - return endpoint.StartsWith(subnet_Match + ".", StringComparison.OrdinalIgnoreCase); + return false; } private Dictionary _subnetLookup = new Dictionary(StringComparer.Ordinal); From ca2e7a4195e290c5327f5edbe5688ca7c8a661a8 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 26 Oct 2017 23:49:56 -0400 Subject: [PATCH 3/5] deprecate localized guids config switch --- .../HttpClientManager/HttpClientManager.cs | 17 ----------------- .../Library/LibraryManager.cs | 2 +- MediaBrowser.Api/StartupWizardService.cs | 1 - MediaBrowser.Common/Net/HttpRequestOptions.cs | 1 - .../Configuration/ServerConfiguration.cs | 2 -- SharedVersion.cs | 2 +- 6 files changed, 2 insertions(+), 23 deletions(-) diff --git a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs index ef95b47c38..cd7c98dc85 100644 --- a/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs +++ b/Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs @@ -124,18 +124,6 @@ namespace Emby.Server.Implementations.HttpClientManager } } - private void AddIpv4Option(HttpWebRequest request, HttpRequestOptions options) - { - request.ServicePoint.BindIPEndPointDelegate = (servicePount, remoteEndPoint, retryCount) => - { - if (remoteEndPoint.AddressFamily == AddressFamily.InterNetwork) - { - return new IPEndPoint(IPAddress.Any, 0); - } - throw new InvalidOperationException("no IPv4 address"); - }; - } - private WebRequest GetRequest(HttpRequestOptions options, string method) { var url = options.Url; @@ -153,11 +141,6 @@ namespace Emby.Server.Implementations.HttpClientManager if (httpWebRequest != null) { - if (options.PreferIpv4) - { - AddIpv4Option(httpWebRequest, options); - } - AddRequestHeaders(httpWebRequest, options); if (options.EnableHttpCompression) diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index cac1cb3b4b..bd8a095503 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -506,7 +506,7 @@ namespace Emby.Server.Implementations.Library throw new ArgumentNullException("type"); } - if (ConfigurationManager.Configuration.EnableLocalizedGuids && key.StartsWith(ConfigurationManager.ApplicationPaths.ProgramDataPath)) + if (key.StartsWith(ConfigurationManager.ApplicationPaths.ProgramDataPath)) { // Try to normalize paths located underneath program-data in an attempt to make them more portable key = key.Substring(ConfigurationManager.ApplicationPaths.ProgramDataPath.Length) diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs index 52a5e444f3..1ccb683204 100644 --- a/MediaBrowser.Api/StartupWizardService.cs +++ b/MediaBrowser.Api/StartupWizardService.cs @@ -91,7 +91,6 @@ namespace MediaBrowser.Api { config.EnableCaseSensitiveItemIds = true; config.SkipDeserializationForBasicTypes = true; - config.EnableLocalizedGuids = true; config.EnableSimpleArtistDetection = true; config.EnableNormalizedItemByNameIds = true; config.DisableLiveTvChannelUserDataName = true; diff --git a/MediaBrowser.Common/Net/HttpRequestOptions.cs b/MediaBrowser.Common/Net/HttpRequestOptions.cs index 51859ecdb5..0a279fa9cc 100644 --- a/MediaBrowser.Common/Net/HttpRequestOptions.cs +++ b/MediaBrowser.Common/Net/HttpRequestOptions.cs @@ -101,7 +101,6 @@ namespace MediaBrowser.Common.Net public TimeSpan CacheLength { get; set; } public int TimeoutMs { get; set; } - public bool PreferIpv4 { get; set; } public bool EnableDefaultUserAgent { get; set; } public bool AppendCharsetToMimeType { get; set; } diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 65b054b0c7..f2c3b7cc8a 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -46,7 +46,6 @@ namespace MediaBrowser.Model.Configuration /// /// true if [use HTTPS]; otherwise, false. public bool EnableHttps { get; set; } - public bool EnableLocalizedGuids { get; set; } public bool EnableNormalizedItemByNameIds { get; set; } /// @@ -198,7 +197,6 @@ namespace MediaBrowser.Model.Configuration LocalNetworkAddresses = new string[] { }; CodecsUsed = new string[] { }; ImageExtractionTimeoutMs = 0; - EnableLocalizedGuids = true; PathSubstitutions = new PathSubstitution[] { }; EnableSimpleArtistDetection = true; diff --git a/SharedVersion.cs b/SharedVersion.cs index 7e6965cbc3..b574a61350 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,3 +1,3 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.33.20")] +[assembly: AssemblyVersion("3.2.34.1")] From 902101355acb66451b32a8044b54c3ec17afc307 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 26 Oct 2017 23:50:17 -0400 Subject: [PATCH 4/5] add dc:creator --- Emby.Dlna/Didl/DidlBuilder.cs | 50 +++++++++++------------------------ 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/Emby.Dlna/Didl/DidlBuilder.cs b/Emby.Dlna/Didl/DidlBuilder.cs index 5b18a2b7c2..a6fa187d4c 100644 --- a/Emby.Dlna/Didl/DidlBuilder.cs +++ b/Emby.Dlna/Didl/DidlBuilder.cs @@ -860,55 +860,35 @@ namespace Emby.Dlna.Didl { AddCommonFields(item, itemStubType, context, writer, filter); - var audio = item as Audio; + var hasArtists = item as IHasArtist; + var hasAlbumArtists = item as IHasAlbumArtist; - if (audio != null) + if (hasArtists != null) { - foreach (var artist in audio.Artists) + foreach (var artist in hasArtists.Artists) { AddValue(writer, "upnp", "artist", artist, NS_UPNP); - } + AddValue(writer, "dc", "creator", artist, NS_DC); - if (!string.IsNullOrEmpty(audio.Album)) - { - AddValue(writer, "upnp", "album", audio.Album, NS_UPNP); - } - - foreach (var artist in audio.AlbumArtists) - { - AddAlbumArtist(writer, artist); + // If it doesn't support album artists (musicvideo), then tag as both + if (hasAlbumArtists == null) + { + AddAlbumArtist(writer, artist); + } } } - var album = item as MusicAlbum; - - if (album != null) + if (hasAlbumArtists != null) { - foreach (var artist in album.AlbumArtists) + foreach (var albumArtist in hasAlbumArtists.AlbumArtists) { - AddAlbumArtist(writer, artist); - AddValue(writer, "upnp", "artist", artist, NS_UPNP); - } - foreach (var artist in album.Artists) - { - AddValue(writer, "upnp", "artist", artist, NS_UPNP); + AddAlbumArtist(writer, albumArtist); } } - var musicVideo = item as MusicVideo; - - if (musicVideo != null) + if (!string.IsNullOrWhiteSpace(item.Album)) { - foreach (var artist in musicVideo.Artists) - { - AddValue(writer, "upnp", "artist", artist, NS_UPNP); - AddAlbumArtist(writer, artist); - } - - if (!string.IsNullOrEmpty(musicVideo.Album)) - { - AddValue(writer, "upnp", "album", musicVideo.Album, NS_UPNP); - } + AddValue(writer, "upnp", "album", item.Album, NS_UPNP); } if (item.IndexNumber.HasValue) From 44a270fa6fed9ef806e02a200af0bb14b5cf0a0e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 27 Oct 2017 00:14:45 -0400 Subject: [PATCH 5/5] cache subnet results --- .../Networking/NetworkManager.cs | 58 +++++++++---------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/Emby.Server.Implementations/Networking/NetworkManager.cs b/Emby.Server.Implementations/Networking/NetworkManager.cs index be85db80a1..7664ed4423 100644 --- a/Emby.Server.Implementations/Networking/NetworkManager.cs +++ b/Emby.Server.Implementations/Networking/NetworkManager.cs @@ -120,26 +120,15 @@ namespace Emby.Server.Implementations.Networking endpoint.StartsWith("169.", StringComparison.OrdinalIgnoreCase) ) { - foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()) - { - foreach (UnicastIPAddressInformation unicastIPAddressInformation in adapter.GetIPProperties().UnicastAddresses) - { - if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork && endpointFirstPart == unicastIPAddressInformation.Address.ToString().Split('.')[0]) - { - int subnet_Test = 0; - foreach (string part in unicastIPAddressInformation.IPv4Mask.ToString().Split('.')) - { - if (part.Equals("0")) break; - subnet_Test++; - } + var subnets = GetSubnets(endpointFirstPart); - var subnet_Match = String.Join(".", unicastIPAddressInformation.Address.ToString().Split('.').Take(subnet_Test).ToArray()); + foreach (var subnet_Match in subnets) + { + //Logger.Debug("subnet_Match:" + subnet_Match); - if (endpoint.StartsWith(subnet_Match + ".", StringComparison.OrdinalIgnoreCase)) - { - return true; - } - } + if (endpoint.StartsWith(subnet_Match + ".", StringComparison.OrdinalIgnoreCase)) + { + return true; } } } @@ -147,20 +136,24 @@ namespace Emby.Server.Implementations.Networking return false; } - private Dictionary _subnetLookup = new Dictionary(StringComparer.Ordinal); - private string GetSubnet(string endpointFirstPart) + private Dictionary> _subnetLookup = new Dictionary>(StringComparer.Ordinal); + private List GetSubnets(string endpointFirstPart) { - string subnet_Match = ""; + List subnets; lock (_subnetLookup) { - if (_subnetLookup.TryGetValue(endpointFirstPart, out subnet_Match)) + if (_subnetLookup.TryGetValue(endpointFirstPart, out subnets)) { - return subnet_Match; + return subnets; } + subnets = new List(); + foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()) + { foreach (UnicastIPAddressInformation unicastIPAddressInformation in adapter.GetIPProperties().UnicastAddresses) + { if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork && endpointFirstPart == unicastIPAddressInformation.Address.ToString().Split('.')[0]) { int subnet_Test = 0; @@ -170,16 +163,21 @@ namespace Emby.Server.Implementations.Networking subnet_Test++; } - subnet_Match = String.Join(".", unicastIPAddressInformation.Address.ToString().Split('.').Take(subnet_Test).ToArray()); - } + var subnet_Match = String.Join(".", unicastIPAddressInformation.Address.ToString().Split('.').Take(subnet_Test).ToArray()); - if (!string.IsNullOrWhiteSpace(subnet_Match)) - { - _subnetLookup[endpointFirstPart] = subnet_Match; + // TODO: Is this check necessary? + if (adapter.OperationalStatus == OperationalStatus.Up) + { + subnets.Add(subnet_Match); + } + } + } } - } - return subnet_Match; + _subnetLookup[endpointFirstPart] = subnets; + + return subnets; + } } private bool Is172AddressPrivate(string endpoint)