瀏覽代碼

Merge pull request #5826 from BaronGreenback/ssdpFix

PlayTo Fix: Use external ip not internal interface

(cherry picked from commit f4a59c92e6087d09b20249aac9b7181cc7bb23ba)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
Bond-009 4 年之前
父節點
當前提交
cf0da1de86

+ 1 - 1
Emby.Dlna/PlayTo/PlayToManager.cs

@@ -188,7 +188,7 @@ namespace Emby.Dlna.PlayTo
 
                 _sessionManager.UpdateDeviceName(sessionInfo.Id, deviceName);
 
-                string serverAddress = _appHost.GetSmartApiUrl(info.LocalIpAddress);
+                string serverAddress = _appHost.GetSmartApiUrl(info.RemoteIpAddress);
 
                 controller = new PlayToController(
                     sessionInfo,

+ 1 - 1
Emby.Dlna/Ssdp/DeviceDiscovery.cs

@@ -104,7 +104,7 @@ namespace Emby.Dlna.Ssdp
                 {
                     Location = e.DiscoveredDevice.DescriptionLocation,
                     Headers = headers,
-                    LocalIpAddress = e.LocalIpAddress
+                    RemoteIpAddress = e.RemoteIpAddress
                 });
 
             DeviceDiscoveredInternal?.Invoke(this, args);

+ 2 - 0
MediaBrowser.Model/Dlna/UpnpDeviceInfo.cs

@@ -16,5 +16,7 @@ namespace MediaBrowser.Model.Dlna
         public IPAddress LocalIpAddress { get; set; }
 
         public int LocalPort { get; set; }
+
+        public IPAddress RemoteIpAddress { get; set; }
     }
 }

+ 1 - 1
RSSDP/DeviceAvailableEventArgs.cs

@@ -8,7 +8,7 @@ namespace Rssdp
     /// </summary>
     public sealed class DeviceAvailableEventArgs : EventArgs
     {
-        public IPAddress LocalIpAddress { get; set; }
+        public IPAddress RemoteIpAddress { get; set; }
 
         private readonly DiscoveredSsdpDevice _DiscoveredDevice;
 

+ 13 - 13
RSSDP/SsdpDeviceLocator.cs

@@ -208,7 +208,7 @@ namespace Rssdp.Infrastructure
         /// Raises the <see cref="DeviceAvailable"/> event.
         /// </summary>
         /// <seealso cref="DeviceAvailable"/>
-        protected virtual void OnDeviceAvailable(DiscoveredSsdpDevice device, bool isNewDevice, IPAddress localIpAddress)
+        protected virtual void OnDeviceAvailable(DiscoveredSsdpDevice device, bool isNewDevice, IPAddress IpAddress)
         {
             if (this.IsDisposed)
             {
@@ -220,7 +220,7 @@ namespace Rssdp.Infrastructure
             {
                 handlers(this, new DeviceAvailableEventArgs(device, isNewDevice)
                 {
-                    LocalIpAddress = localIpAddress
+                    RemoteIpAddress = IpAddress
                 });
             }
         }
@@ -286,7 +286,7 @@ namespace Rssdp.Infrastructure
             }
         }
 
-        private void AddOrUpdateDiscoveredDevice(DiscoveredSsdpDevice device, IPAddress localIpAddress)
+        private void AddOrUpdateDiscoveredDevice(DiscoveredSsdpDevice device, IPAddress IpAddress)
         {
             bool isNewDevice = false;
             lock (_Devices)
@@ -304,17 +304,17 @@ namespace Rssdp.Infrastructure
                 }
             }
 
-            DeviceFound(device, isNewDevice, localIpAddress);
+            DeviceFound(device, isNewDevice, IpAddress);
         }
 
-        private void DeviceFound(DiscoveredSsdpDevice device, bool isNewDevice, IPAddress localIpAddress)
+        private void DeviceFound(DiscoveredSsdpDevice device, bool isNewDevice, IPAddress IpAddress)
         {
             if (!NotificationTypeMatchesFilter(device))
             {
                 return;
             }
 
-            OnDeviceAvailable(device, isNewDevice, localIpAddress);
+            OnDeviceAvailable(device, isNewDevice, IpAddress);
         }
 
         private bool NotificationTypeMatchesFilter(DiscoveredSsdpDevice device)
@@ -347,7 +347,7 @@ namespace Rssdp.Infrastructure
             return _CommunicationsServer.SendMulticastMessage(message, null, cancellationToken);
         }
 
-        private void ProcessSearchResponseMessage(HttpResponseMessage message, IPAddress localIpAddress)
+        private void ProcessSearchResponseMessage(HttpResponseMessage message, IPAddress IpAddress)
         {
             if (!message.IsSuccessStatusCode)
             {
@@ -367,11 +367,11 @@ namespace Rssdp.Infrastructure
                     ResponseHeaders = message.Headers
                 };
 
-                AddOrUpdateDiscoveredDevice(device, localIpAddress);
+                AddOrUpdateDiscoveredDevice(device, IpAddress);
             }
         }
 
-        private void ProcessNotificationMessage(HttpRequestMessage message, IPAddress localIpAddress)
+        private void ProcessNotificationMessage(HttpRequestMessage message, IPAddress IpAddress)
         {
             if (String.Compare(message.Method.Method, "Notify", StringComparison.OrdinalIgnoreCase) != 0)
             {
@@ -381,7 +381,7 @@ namespace Rssdp.Infrastructure
             var notificationType = GetFirstHeaderStringValue("NTS", message);
             if (String.Compare(notificationType, SsdpConstants.SsdpKeepAliveNotification, StringComparison.OrdinalIgnoreCase) == 0)
             {
-                ProcessAliveNotification(message, localIpAddress);
+                ProcessAliveNotification(message, IpAddress);
             }
             else if (String.Compare(notificationType, SsdpConstants.SsdpByeByeNotification, StringComparison.OrdinalIgnoreCase) == 0)
             {
@@ -389,7 +389,7 @@ namespace Rssdp.Infrastructure
             }
         }
 
-        private void ProcessAliveNotification(HttpRequestMessage message, IPAddress localIpAddress)
+        private void ProcessAliveNotification(HttpRequestMessage message, IPAddress IpAddress)
         {
             var location = GetFirstHeaderUriValue("Location", message);
             if (location != null)
@@ -404,7 +404,7 @@ namespace Rssdp.Infrastructure
                     ResponseHeaders = message.Headers
                 };
 
-                AddOrUpdateDiscoveredDevice(device, localIpAddress);
+                AddOrUpdateDiscoveredDevice(device, IpAddress);
             }
         }
 
@@ -630,7 +630,7 @@ namespace Rssdp.Infrastructure
 
         private void CommsServer_RequestReceived(object sender, RequestReceivedEventArgs e)
         {
-            ProcessNotificationMessage(e.Message, e.LocalIpAddress);
+            ProcessNotificationMessage(e.Message, e.ReceivedFrom.Address);
         }
     }
 }