mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	Merge pull request #3033 from neilsb/autodiscover-url-override
Allow override of address published by auto discovery
This commit is contained in:
		
						commit
						9c00226f11
					
				@ -3,6 +3,7 @@ using System.Threading.Tasks;
 | 
				
			|||||||
using Emby.Server.Implementations.Udp;
 | 
					using Emby.Server.Implementations.Udp;
 | 
				
			||||||
using MediaBrowser.Controller;
 | 
					using MediaBrowser.Controller;
 | 
				
			||||||
using MediaBrowser.Controller.Plugins;
 | 
					using MediaBrowser.Controller.Plugins;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.Configuration;
 | 
				
			||||||
using Microsoft.Extensions.Logging;
 | 
					using Microsoft.Extensions.Logging;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Emby.Server.Implementations.EntryPoints
 | 
					namespace Emby.Server.Implementations.EntryPoints
 | 
				
			||||||
@ -22,6 +23,7 @@ namespace Emby.Server.Implementations.EntryPoints
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        private readonly ILogger _logger;
 | 
					        private readonly ILogger _logger;
 | 
				
			||||||
        private readonly IServerApplicationHost _appHost;
 | 
					        private readonly IServerApplicationHost _appHost;
 | 
				
			||||||
 | 
					        private readonly IConfiguration _config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// The UDP server.
 | 
					        /// The UDP server.
 | 
				
			||||||
@ -35,18 +37,19 @@ namespace Emby.Server.Implementations.EntryPoints
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public UdpServerEntryPoint(
 | 
					        public UdpServerEntryPoint(
 | 
				
			||||||
            ILogger<UdpServerEntryPoint> logger,
 | 
					            ILogger<UdpServerEntryPoint> logger,
 | 
				
			||||||
            IServerApplicationHost appHost)
 | 
					            IServerApplicationHost appHost,
 | 
				
			||||||
 | 
					            IConfiguration configuration)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _logger = logger;
 | 
					            _logger = logger;
 | 
				
			||||||
            _appHost = appHost;
 | 
					            _appHost = appHost;
 | 
				
			||||||
 | 
					            _config = configuration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <inheritdoc />
 | 
					        /// <inheritdoc />
 | 
				
			||||||
        public async Task RunAsync()
 | 
					        public async Task RunAsync()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _udpServer = new UdpServer(_logger, _appHost);
 | 
					            _udpServer = new UdpServer(_logger, _appHost, _config);
 | 
				
			||||||
            _udpServer.Start(PortNumber, _cancellationTokenSource.Token);
 | 
					            _udpServer.Start(PortNumber, _cancellationTokenSource.Token);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,5 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Emby.Server.Implementations
 | 
					namespace Emby.Server.Implementations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public interface IStartupOptions
 | 
					    public interface IStartupOptions
 | 
				
			||||||
@ -36,5 +38,10 @@ namespace Emby.Server.Implementations
 | 
				
			|||||||
        /// Gets the value of the --plugin-manifest-url command line option.
 | 
					        /// Gets the value of the --plugin-manifest-url command line option.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        string PluginManifestUrl { get; }
 | 
					        string PluginManifestUrl { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Gets the value of the --published-server-url command line option.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        Uri PublishedServerUrl { get; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ using System.Threading;
 | 
				
			|||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using MediaBrowser.Controller;
 | 
					using MediaBrowser.Controller;
 | 
				
			||||||
using MediaBrowser.Model.ApiClient;
 | 
					using MediaBrowser.Model.ApiClient;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.Configuration;
 | 
				
			||||||
using Microsoft.Extensions.Logging;
 | 
					using Microsoft.Extensions.Logging;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Emby.Server.Implementations.Udp
 | 
					namespace Emby.Server.Implementations.Udp
 | 
				
			||||||
@ -21,6 +22,12 @@ namespace Emby.Server.Implementations.Udp
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        private readonly ILogger _logger;
 | 
					        private readonly ILogger _logger;
 | 
				
			||||||
        private readonly IServerApplicationHost _appHost;
 | 
					        private readonly IServerApplicationHost _appHost;
 | 
				
			||||||
 | 
					        private readonly IConfiguration _config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Address Override Configuration Key.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public const string AddressOverrideConfigKey = "PublishedServerUrl";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private Socket _udpSocket;
 | 
					        private Socket _udpSocket;
 | 
				
			||||||
        private IPEndPoint _endpoint;
 | 
					        private IPEndPoint _endpoint;
 | 
				
			||||||
@ -31,15 +38,18 @@ namespace Emby.Server.Implementations.Udp
 | 
				
			|||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Initializes a new instance of the <see cref="UdpServer" /> class.
 | 
					        /// Initializes a new instance of the <see cref="UdpServer" /> class.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public UdpServer(ILogger logger, IServerApplicationHost appHost)
 | 
					        public UdpServer(ILogger logger, IServerApplicationHost appHost, IConfiguration configuration)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _logger = logger;
 | 
					            _logger = logger;
 | 
				
			||||||
            _appHost = appHost;
 | 
					            _appHost = appHost;
 | 
				
			||||||
 | 
					            _config = configuration;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private async Task RespondToV2Message(string messageText, EndPoint endpoint, CancellationToken cancellationToken)
 | 
					        private async Task RespondToV2Message(string messageText, EndPoint endpoint, CancellationToken cancellationToken)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var localUrl = await _appHost.GetLocalApiUrl(cancellationToken).ConfigureAwait(false);
 | 
					            string localUrl = !string.IsNullOrEmpty(_config[AddressOverrideConfigKey])
 | 
				
			||||||
 | 
					                ? _config[AddressOverrideConfigKey]
 | 
				
			||||||
 | 
					                : await _appHost.GetLocalApiUrl(cancellationToken).ConfigureAwait(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (!string.IsNullOrEmpty(localUrl))
 | 
					            if (!string.IsNullOrEmpty(localUrl))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -105,7 +115,7 @@ namespace Emby.Server.Implementations.Udp
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                catch (SocketException ex)
 | 
					                catch (SocketException ex)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    _logger.LogError(ex, "Failed to receive data drom socket");
 | 
					                    _logger.LogError(ex, "Failed to receive data from socket");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                catch (OperationCanceledException)
 | 
					                catch (OperationCanceledException)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,9 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using CommandLine;
 | 
					using CommandLine;
 | 
				
			||||||
using Emby.Server.Implementations;
 | 
					using Emby.Server.Implementations;
 | 
				
			||||||
 | 
					using Emby.Server.Implementations.EntryPoints;
 | 
				
			||||||
 | 
					using Emby.Server.Implementations.Udp;
 | 
				
			||||||
using Emby.Server.Implementations.Updates;
 | 
					using Emby.Server.Implementations.Updates;
 | 
				
			||||||
using MediaBrowser.Controller.Extensions;
 | 
					using MediaBrowser.Controller.Extensions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -80,6 +83,10 @@ namespace Jellyfin.Server
 | 
				
			|||||||
        [Option("plugin-manifest-url", Required = false, HelpText = "A custom URL for the plugin repository JSON manifest")]
 | 
					        [Option("plugin-manifest-url", Required = false, HelpText = "A custom URL for the plugin repository JSON manifest")]
 | 
				
			||||||
        public string? PluginManifestUrl { get; set; }
 | 
					        public string? PluginManifestUrl { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <inheritdoc />
 | 
				
			||||||
 | 
					        [Option("published-server-url", Required = false, HelpText = "Jellyfin Server URL to publish via auto discover process")]
 | 
				
			||||||
 | 
					        public Uri? PublishedServerUrl { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// Gets the command line options as a dictionary that can be used in the .NET configuration system.
 | 
					        /// Gets the command line options as a dictionary that can be used in the .NET configuration system.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -98,6 +105,11 @@ namespace Jellyfin.Server
 | 
				
			|||||||
                config.Add(ConfigurationExtensions.HostWebClientKey, bool.FalseString);
 | 
					                config.Add(ConfigurationExtensions.HostWebClientKey, bool.FalseString);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (PublishedServerUrl != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                config.Add(UdpServer.AddressOverrideConfigKey, PublishedServerUrl.ToString());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return config;
 | 
					            return config;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user