Merge pull request #5826 from BaronGreenback/ssdpFix

PlayTo Fix: Use external ip not internal interface
This commit is contained in:
Bond-009 2021-04-25 18:51:11 +02:00 committed by GitHub
commit f4a59c92e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 18 additions and 16 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -211,7 +211,7 @@ namespace Rssdp.Infrastructure
/// Raises the <see cref="DeviceAvailable"/> event. /// Raises the <see cref="DeviceAvailable"/> event.
/// </summary> /// </summary>
/// <seealso cref="DeviceAvailable"/> /// <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) if (this.IsDisposed)
{ {
@ -223,7 +223,7 @@ namespace Rssdp.Infrastructure
{ {
handlers(this, new DeviceAvailableEventArgs(device, isNewDevice) handlers(this, new DeviceAvailableEventArgs(device, isNewDevice)
{ {
LocalIpAddress = localIpAddress RemoteIpAddress = IpAddress
}); });
} }
} }
@ -289,7 +289,7 @@ namespace Rssdp.Infrastructure
} }
} }
private void AddOrUpdateDiscoveredDevice(DiscoveredSsdpDevice device, IPAddress localIpAddress) private void AddOrUpdateDiscoveredDevice(DiscoveredSsdpDevice device, IPAddress IpAddress)
{ {
bool isNewDevice = false; bool isNewDevice = false;
lock (_Devices) lock (_Devices)
@ -307,17 +307,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)) if (!NotificationTypeMatchesFilter(device))
{ {
return; return;
} }
OnDeviceAvailable(device, isNewDevice, localIpAddress); OnDeviceAvailable(device, isNewDevice, IpAddress);
} }
private bool NotificationTypeMatchesFilter(DiscoveredSsdpDevice device) private bool NotificationTypeMatchesFilter(DiscoveredSsdpDevice device)
@ -350,7 +350,7 @@ namespace Rssdp.Infrastructure
return _CommunicationsServer.SendMulticastMessage(message, null, cancellationToken); return _CommunicationsServer.SendMulticastMessage(message, null, cancellationToken);
} }
private void ProcessSearchResponseMessage(HttpResponseMessage message, IPAddress localIpAddress) private void ProcessSearchResponseMessage(HttpResponseMessage message, IPAddress IpAddress)
{ {
if (!message.IsSuccessStatusCode) if (!message.IsSuccessStatusCode)
{ {
@ -370,11 +370,11 @@ namespace Rssdp.Infrastructure
ResponseHeaders = message.Headers 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) if (String.Compare(message.Method.Method, "Notify", StringComparison.OrdinalIgnoreCase) != 0)
{ {
@ -384,7 +384,7 @@ namespace Rssdp.Infrastructure
var notificationType = GetFirstHeaderStringValue("NTS", message); var notificationType = GetFirstHeaderStringValue("NTS", message);
if (String.Compare(notificationType, SsdpConstants.SsdpKeepAliveNotification, StringComparison.OrdinalIgnoreCase) == 0) 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) else if (String.Compare(notificationType, SsdpConstants.SsdpByeByeNotification, StringComparison.OrdinalIgnoreCase) == 0)
{ {
@ -392,7 +392,7 @@ namespace Rssdp.Infrastructure
} }
} }
private void ProcessAliveNotification(HttpRequestMessage message, IPAddress localIpAddress) private void ProcessAliveNotification(HttpRequestMessage message, IPAddress IpAddress)
{ {
var location = GetFirstHeaderUriValue("Location", message); var location = GetFirstHeaderUriValue("Location", message);
if (location != null) if (location != null)
@ -407,7 +407,7 @@ namespace Rssdp.Infrastructure
ResponseHeaders = message.Headers ResponseHeaders = message.Headers
}; };
AddOrUpdateDiscoveredDevice(device, localIpAddress); AddOrUpdateDiscoveredDevice(device, IpAddress);
} }
} }
@ -628,7 +628,7 @@ namespace Rssdp.Infrastructure
private void CommsServer_RequestReceived(object sender, RequestReceivedEventArgs e) private void CommsServer_RequestReceived(object sender, RequestReceivedEventArgs e)
{ {
ProcessNotificationMessage(e.Message, e.LocalIpAddress); ProcessNotificationMessage(e.Message, e.ReceivedFrom.Address);
} }
} }
} }