aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2022-07-21 09:42:45 +0200
committerShadowghost <Ghost_of_Stone@web.de>2022-07-21 09:42:45 +0200
commitb01d169d28cb7cfffa33796dfe7bf8be5570593a (patch)
treebb859851f91e7066820c1b90234dd2a861a79376
parentf6e41269d94e4c3096b136a47d3616cb0c5fe316 (diff)
Implement discovery respecting bind addresses
-rw-r--r--Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs20
-rw-r--r--Emby.Server.Implementations/Udp/UdpServer.cs4
2 files changed, 20 insertions, 4 deletions
diff --git a/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs b/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs
index e45baedd7..9ac2310b4 100644
--- a/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs
+++ b/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs
@@ -5,6 +5,7 @@ using System.Threading.Tasks;
using Emby.Server.Implementations.Udp;
using Jellyfin.Networking.Configuration;
using MediaBrowser.Common.Configuration;
+using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Plugins;
using Microsoft.Extensions.Configuration;
@@ -29,6 +30,7 @@ namespace Emby.Server.Implementations.EntryPoints
private readonly IServerApplicationHost _appHost;
private readonly IConfiguration _config;
private readonly IConfigurationManager _configurationManager;
+ private readonly INetworkManager _networkManager;
/// <summary>
/// The UDP server.
@@ -44,16 +46,19 @@ namespace Emby.Server.Implementations.EntryPoints
/// <param name="appHost">Instance of the <see cref="IServerApplicationHost"/> interface.</param>
/// <param name="configuration">Instance of the <see cref="IConfiguration"/> interface.</param>
/// <param name="configurationManager">Instance of the <see cref="IConfigurationManager"/> interface.</param>
+ /// <param name="networkManager">Instance of the <see cref="INetworkManager"/> interface.</param>
public UdpServerEntryPoint(
ILogger<UdpServerEntryPoint> logger,
IServerApplicationHost appHost,
IConfiguration configuration,
- IConfigurationManager configurationManager)
+ IConfigurationManager configurationManager,
+ INetworkManager networkManager)
{
_logger = logger;
_appHost = appHost;
_config = configuration;
_configurationManager = configurationManager;
+ _networkManager = networkManager;
}
/// <inheritdoc />
@@ -68,8 +73,17 @@ namespace Emby.Server.Implementations.EntryPoints
try
{
- _udpServer = new UdpServer(_logger, _appHost, _config, PortNumber);
- _udpServer.Start(_cancellationTokenSource.Token);
+ foreach (var bindAddress in _networkManager.GetInternalBindAddresses())
+ {
+ if (bindAddress.AddressFamily == AddressFamily.InterNetworkV6)
+ {
+ // Not supporting IPv6 right now
+ continue;
+ }
+
+ _udpServer = new UdpServer(_logger, _appHost, _config, bindAddress.Address, PortNumber);
+ _udpServer.Start(_cancellationTokenSource.Token);
+ }
}
catch (SocketException ex)
{
diff --git a/Emby.Server.Implementations/Udp/UdpServer.cs b/Emby.Server.Implementations/Udp/UdpServer.cs
index 937e792f5..a3bbd6df0 100644
--- a/Emby.Server.Implementations/Udp/UdpServer.cs
+++ b/Emby.Server.Implementations/Udp/UdpServer.cs
@@ -37,18 +37,20 @@ namespace Emby.Server.Implementations.Udp
/// <param name="logger">The logger.</param>
/// <param name="appHost">The application host.</param>
/// <param name="configuration">The configuration manager.</param>
+ /// <param name="bindAddress"> The bind address.</param>
/// <param name="port">The port.</param>
public UdpServer(
ILogger logger,
IServerApplicationHost appHost,
IConfiguration configuration,
+ IPAddress bindAddress,
int port)
{
_logger = logger;
_appHost = appHost;
_config = configuration;
- _endpoint = new IPEndPoint(IPAddress.Any, port);
+ _endpoint = new IPEndPoint(bindAddress, port);
_udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
_udpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);