From 3cb49d6df005df12c2d626bcdfc708c353855f8e Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Mon, 14 Feb 2022 14:39:33 +0100 Subject: [PATCH] Fix option to disable server discovery --- Emby.Server.Implementations/ApplicationHost.cs | 12 ++++++------ .../EntryPoints/UdpServerEntryPoint.cs | 13 ++++++++++++- Emby.Server.Implementations/Udp/UdpServer.cs | 10 +++------- Jellyfin.Networking/Manager/NetworkManager.cs | 3 +-- .../Middleware/BaseUrlRedirectionMiddleware.cs | 6 +++--- Jellyfin.Server/Program.cs | 7 +++---- Jellyfin.Server/StartupOptions.cs | 9 ++++----- .../Extensions/ConfigurationExtensions.cs | 5 +++++ .../JellyfinApplicationFactory.cs | 4 ++-- 9 files changed, 39 insertions(+), 30 deletions(-) diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs index e7efc81d72..2c6f2c7f68 100644 --- a/Emby.Server.Implementations/ApplicationHost.cs +++ b/Emby.Server.Implementations/ApplicationHost.cs @@ -44,7 +44,6 @@ using Emby.Server.Implementations.Serialization; using Emby.Server.Implementations.Session; using Emby.Server.Implementations.SyncPlay; using Emby.Server.Implementations.TV; -using Emby.Server.Implementations.Udp; using Emby.Server.Implementations.Updates; using Jellyfin.Api.Helpers; using Jellyfin.MediaEncoding.Hls.Playlist; @@ -104,6 +103,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Prometheus.DotNetRuntime; +using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; using WebSocketManager = Emby.Server.Implementations.HttpServer.WebSocketManager; namespace Emby.Server.Implementations @@ -184,6 +184,11 @@ namespace Emby.Server.Implementations /// public event EventHandler HasPendingRestartChanged; + /// + /// Gets the value of the PublishedServerUrl setting. + /// + private string PublishedServerUrl => _startupConfig[AddressOverrideKey]; + /// /// Gets a value indicating whether this instance can self restart. /// @@ -260,11 +265,6 @@ namespace Emby.Server.Implementations /// public int HttpsPort { get; private set; } - /// - /// Gets the value of the PublishedServerUrl setting. - /// - public string PublishedServerUrl => _startupOptions.PublishedServerUrl ?? _startupConfig[UdpServer.AddressOverrideConfigKey]; - /// public Version ApplicationVersion { get; } diff --git a/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs b/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs index feaccf9fa1..34fdfbe8da 100644 --- a/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs +++ b/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs @@ -3,6 +3,8 @@ using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; using Emby.Server.Implementations.Udp; +using Jellyfin.Networking.Configuration; +using MediaBrowser.Common.Configuration; using MediaBrowser.Controller; using MediaBrowser.Controller.Plugins; using Microsoft.Extensions.Configuration; @@ -26,6 +28,7 @@ namespace Emby.Server.Implementations.EntryPoints private readonly ILogger _logger; private readonly IServerApplicationHost _appHost; private readonly IConfiguration _config; + private readonly IConfigurationManager _configurationManager; /// /// The UDP server. @@ -40,14 +43,17 @@ namespace Emby.Server.Implementations.EntryPoints /// Instance of the interface. /// Instance of the interface. /// Instance of the interface. + /// Instance of the interface. public UdpServerEntryPoint( ILogger logger, IServerApplicationHost appHost, - IConfiguration configuration) + IConfiguration configuration, + IConfigurationManager configurationManager) { _logger = logger; _appHost = appHost; _config = configuration; + _configurationManager = configurationManager; } /// @@ -55,6 +61,11 @@ namespace Emby.Server.Implementations.EntryPoints { CheckDisposed(); + if (_configurationManager.GetNetworkConfiguration().AutoDiscovery) + { + return Task.CompletedTask; + } + try { _udpServer = new UdpServer(_logger, _appHost, _config, PortNumber); diff --git a/Emby.Server.Implementations/Udp/UdpServer.cs b/Emby.Server.Implementations/Udp/UdpServer.cs index c8ab99de41..937e792f57 100644 --- a/Emby.Server.Implementations/Udp/UdpServer.cs +++ b/Emby.Server.Implementations/Udp/UdpServer.cs @@ -9,6 +9,7 @@ using MediaBrowser.Controller; using MediaBrowser.Model.ApiClient; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; +using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; namespace Emby.Server.Implementations.Udp { @@ -17,11 +18,6 @@ namespace Emby.Server.Implementations.Udp /// public sealed class UdpServer : IDisposable { - /// - /// Address Override Configuration Key. - /// - public const string AddressOverrideConfigKey = "PublishedServerUrl"; - /// /// The _logger. /// @@ -60,7 +56,7 @@ namespace Emby.Server.Implementations.Udp private async Task RespondToV2Message(EndPoint endpoint, CancellationToken cancellationToken) { - string? localUrl = _config[AddressOverrideConfigKey]; + string? localUrl = _config[AddressOverrideKey]; if (string.IsNullOrEmpty(localUrl)) { localUrl = _appHost.GetSmartApiUrl(((IPEndPoint)endpoint).Address); @@ -68,7 +64,7 @@ namespace Emby.Server.Implementations.Udp if (string.IsNullOrEmpty(localUrl)) { - _logger.LogWarning("Unable to respond to udp request because the local ip address could not be determined."); + _logger.LogWarning("Unable to respond to server discovery request because the local ip address could not be determined."); return; } diff --git a/Jellyfin.Networking/Manager/NetworkManager.cs b/Jellyfin.Networking/Manager/NetworkManager.cs index 58b30ad2d2..b16dc53903 100644 --- a/Jellyfin.Networking/Manager/NetworkManager.cs +++ b/Jellyfin.Networking/Manager/NetworkManager.cs @@ -628,7 +628,6 @@ namespace Jellyfin.Networking.Manager } TrustAllIP6Interfaces = config.TrustAllIP6Interfaces; - // UdpHelper.EnableMultiSocketBinding = config.EnableMultiSocketBinding; if (string.IsNullOrEmpty(MockNetworkSettings)) { @@ -750,7 +749,7 @@ namespace Jellyfin.Networking.Manager bool partial = token[^1] == '*'; if (partial) { - token = token[0..^1]; + token = token[..^1]; } foreach ((string interfc, int interfcIndex) in _interfaceNames) diff --git a/Jellyfin.Server/Middleware/BaseUrlRedirectionMiddleware.cs b/Jellyfin.Server/Middleware/BaseUrlRedirectionMiddleware.cs index 3e5982eedf..e0c112d60d 100644 --- a/Jellyfin.Server/Middleware/BaseUrlRedirectionMiddleware.cs +++ b/Jellyfin.Server/Middleware/BaseUrlRedirectionMiddleware.cs @@ -5,7 +5,7 @@ using MediaBrowser.Controller.Configuration; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; -using ConfigurationExtensions = MediaBrowser.Controller.Extensions.ConfigurationExtensions; +using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; namespace Jellyfin.Server.Middleware { @@ -65,7 +65,7 @@ namespace Jellyfin.Server.Middleware { // Always redirect back to the default path if the base prefix is invalid, missing, or is the full path. _logger.LogDebug("Normalizing an URL at {LocalPath}", localPath); - httpContext.Response.Redirect(baseUrlPrefix + "/" + _configuration[ConfigurationExtensions.DefaultRedirectKey]); + httpContext.Response.Redirect(baseUrlPrefix + "/" + _configuration[DefaultRedirectKey]); return; } } @@ -74,7 +74,7 @@ namespace Jellyfin.Server.Middleware { // Always redirect back to the default path if root is requested. _logger.LogDebug("Normalizing an URL at {LocalPath}", localPath); - httpContext.Response.Redirect("/" + _configuration[ConfigurationExtensions.DefaultRedirectKey]); + httpContext.Response.Redirect("/" + _configuration[DefaultRedirectKey]); return; } diff --git a/Jellyfin.Server/Program.cs b/Jellyfin.Server/Program.cs index ce11c63f9a..fc871f064f 100644 --- a/Jellyfin.Server/Program.cs +++ b/Jellyfin.Server/Program.cs @@ -13,7 +13,6 @@ using Emby.Server.Implementations; using Jellyfin.Server.Implementations; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Extensions; using MediaBrowser.Model.IO; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; @@ -26,7 +25,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Serilog; using Serilog.Extensions.Logging; using SQLitePCL; -using ConfigurationExtensions = MediaBrowser.Controller.Extensions.ConfigurationExtensions; +using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; using ILogger = Microsoft.Extensions.Logging.ILogger; namespace Jellyfin.Server @@ -168,7 +167,7 @@ namespace Jellyfin.Server "server, you may set the '--nowebclient' command line flag, or set" + "'{ConfigKey}=false' in your config settings.", webContentPath, - ConfigurationExtensions.HostWebClientKey); + HostWebClientKey); Environment.ExitCode = 1; return; } @@ -583,7 +582,7 @@ namespace Jellyfin.Server var inMemoryDefaultConfig = ConfigurationOptions.DefaultConfiguration; if (startupConfig != null && !startupConfig.HostWebClient()) { - inMemoryDefaultConfig[ConfigurationExtensions.DefaultRedirectKey] = "api-docs/swagger"; + inMemoryDefaultConfig[DefaultRedirectKey] = "api-docs/swagger"; } return config diff --git a/Jellyfin.Server/StartupOptions.cs b/Jellyfin.Server/StartupOptions.cs index a1cecc8c63..84ebde68c0 100644 --- a/Jellyfin.Server/StartupOptions.cs +++ b/Jellyfin.Server/StartupOptions.cs @@ -1,8 +1,7 @@ using System.Collections.Generic; using CommandLine; using Emby.Server.Implementations; -using Emby.Server.Implementations.Udp; -using MediaBrowser.Controller.Extensions; +using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; namespace Jellyfin.Server { @@ -86,17 +85,17 @@ namespace Jellyfin.Server if (NoWebClient) { - config.Add(ConfigurationExtensions.HostWebClientKey, bool.FalseString); + config.Add(HostWebClientKey, bool.FalseString); } if (PublishedServerUrl != null) { - config.Add(UdpServer.AddressOverrideConfigKey, PublishedServerUrl); + config.Add(AddressOverrideKey, PublishedServerUrl); } if (FFmpegPath != null) { - config.Add(ConfigurationExtensions.FfmpegPathKey, FFmpegPath); + config.Add(FfmpegPathKey, FFmpegPath); } return config; diff --git a/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs b/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs index f9285c7682..957ce67443 100644 --- a/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs +++ b/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs @@ -14,6 +14,11 @@ namespace MediaBrowser.Controller.Extensions /// public const string DefaultRedirectKey = "DefaultRedirectPath"; + /// + /// The key for the address override option. + /// + public const string AddressOverrideKey = "PublishedServerUrl"; + /// /// The key for a setting that indicates whether the application should host web client content. /// diff --git a/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs b/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs index 3d34a18e7f..adaf624a91 100644 --- a/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs +++ b/tests/Jellyfin.Server.Integration.Tests/JellyfinApplicationFactory.cs @@ -7,11 +7,11 @@ using MediaBrowser.Common; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.AspNetCore.TestHost; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Serilog; using Serilog.Extensions.Logging; +using static MediaBrowser.Controller.Extensions.ConfigurationExtensions; namespace Jellyfin.Server.Integration.Tests { @@ -74,7 +74,7 @@ namespace Jellyfin.Server.Integration.Tests appPaths, loggerFactory, commandLineOpts, - new ConfigurationBuilder().Build()); + startupConfig); _disposableComponents.Add(appHost); var serviceCollection = new ServiceCollection(); appHost.Init(serviceCollection);