Browse Source

Fix interface address assignment and resolution in SSDP

Shadowghost 2 years ago
parent
commit
bedee7922f

+ 3 - 2
Emby.Server.Implementations/Net/SocketFactory.cs

@@ -82,13 +82,14 @@ namespace Emby.Server.Implementations.Net
 
             try
             {
-                var interfaceIndex = (int)IPAddress.HostToNetworkOrder(bindInterface.Index);
+                var interfaceIndex = bindInterface.Index;
+                var interfaceIndexSwapped = (int)IPAddress.HostToNetworkOrder(interfaceIndex);
 
                 socket.MulticastLoopback = false;
                 socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                 socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.PacketInformation, true);
                 socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, multicastTimeToLive);
-                socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, interfaceIndex);
+                socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, interfaceIndexSwapped);
                 socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(multicastAddress, interfaceIndex));
                 socket.Bind(new IPEndPoint(multicastAddress, localPort));
 

+ 2 - 2
RSSDP/SsdpCommunicationsServer.cs

@@ -428,12 +428,12 @@ namespace Rssdp.Infrastructure
                     if (result.ReceivedBytes > 0)
                     {
                         var remoteEndpoint = (IPEndPoint)result.RemoteEndPoint;
-                        var localEndpointAddress = result.PacketInformation.Address;
+                        var localEndpointAdapter = _networkManager.GetAllBindInterfaces().Where(a => a.Index == result.PacketInformation.Interface).First();
 
                         ProcessMessage(
                             UTF8Encoding.UTF8.GetString(receiveBuffer, 0, result.ReceivedBytes),
                             remoteEndpoint,
-                            localEndpointAddress);
+                            localEndpointAdapter.Address);
                     }
                 }
                 catch (ObjectDisposedException)