Merge pull request #3033 from neilsb/autodiscover-url-override

Allow override of address published by auto discovery
This commit is contained in:
Anthony Lavado 2020-05-26 12:20:42 -04:00 committed by GitHub
commit 9c00226f11
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 6 deletions

View file

@ -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);
} }

View file

@ -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; }
} }
} }

View file

@ -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)
{ {

View file

@ -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;
} }
} }