aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Dlna/PlayTo/PlayToManager.cs')
-rw-r--r--MediaBrowser.Dlna/PlayTo/PlayToManager.cs22
1 files changed, 12 insertions, 10 deletions
diff --git a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
index 10e82a2276..020bd21169 100644
--- a/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
+++ b/MediaBrowser.Dlna/PlayTo/PlayToManager.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Net;
+using System.Text;
+using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
@@ -68,7 +69,7 @@ namespace MediaBrowser.Dlna.PlayTo
{
_logger.Debug("Found interface: {0}. Type: {1}. Status: {2}", network.Name, network.NetworkInterfaceType, network.OperationalStatus);
- if (!network.SupportsMulticast || !network.GetIPProperties().MulticastAddresses.Any())
+ if (!network.SupportsMulticast || OperationalStatus.Up != network.OperationalStatus || !network.GetIPProperties().MulticastAddresses.Any())
continue;
var ipV4 = network.GetIPProperties().GetIPv4Properties();
@@ -84,7 +85,7 @@ namespace MediaBrowser.Dlna.PlayTo
{
try
{
- CreateListener(localIp);
+ CreateListener(localIp, ipV4.Index);
}
catch (Exception e)
{
@@ -111,15 +112,15 @@ namespace MediaBrowser.Dlna.PlayTo
/// Creates a socket for the interface and listends for data.
/// </summary>
/// <param name="localIp">The local ip.</param>
- private void CreateListener(IPAddress localIp)
+ private void CreateListener(IPAddress localIp, int networkInterfaceIndex)
{
Task.Factory.StartNew(async (o) =>
{
try
{
- var socket = GetMulticastSocket();
+ var socket = GetMulticastSocket(networkInterfaceIndex);
- socket.Bind(new IPEndPoint(localIp, 0));
+ socket.Bind(new IPEndPoint(localIp, 1900));
_logger.Info("Creating SSDP listener");
@@ -183,7 +184,8 @@ namespace MediaBrowser.Dlna.PlayTo
{
try
{
- var request = SsdpHelper.CreateRendererSSDP(3);
+ var msg = new SsdpMessageBuilder().BuildRendererDiscoveryMessage();
+ var request = Encoding.UTF8.GetBytes(msg);
while (true)
{
@@ -210,12 +212,12 @@ namespace MediaBrowser.Dlna.PlayTo
/// Gets a socket configured for SDDP multicasting.
/// </summary>
/// <returns></returns>
- private Socket GetMulticastSocket()
+ private Socket GetMulticastSocket(int networkInterfaceIndex)
{
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
- socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.255.255.250")));
- //socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 3);
+ socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.255.255.250"), networkInterfaceIndex));
+ socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 4);
return socket;
}