Pārlūkot izejas kodu

add local endpoint

Luke Pulverenti 10 gadi atpakaļ
vecāks
revīzija
fc7ed4d3fb

+ 9 - 2
MediaBrowser.Dlna/Ssdp/Datagram.cs

@@ -30,7 +30,7 @@ namespace MediaBrowser.Dlna.Ssdp
         {
             var msg = Encoding.ASCII.GetBytes(Message);
 
-            var socket = CreateSocket();
+            var socket = CreateSocket(!IgnoreBindFailure);
 
             if (socket == null)
             {
@@ -102,13 +102,20 @@ namespace MediaBrowser.Dlna.Ssdp
             }
         }
 
-        private Socket CreateSocket()
+        private Socket CreateSocket(bool isBroadcast)
         {
             try
             {
                 var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
 
                 socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
+
+                if (isBroadcast)
+                {
+                    socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
+                    socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 4);
+                }
+
                 return socket;
             }
             catch (Exception ex)

+ 7 - 4
MediaBrowser.Dlna/Ssdp/DeviceDiscovery.cs

@@ -87,11 +87,14 @@ namespace MediaBrowser.Dlna.Ssdp
 
             try
             {
-                var ip = _appHost.LocalIpAddress;
+                if (e.LocalEndPoint == null)
+                {
+                    var ip = _appHost.LocalIpAddress;
+                    e.LocalEndPoint = new IPEndPoint(IPAddress.Parse(ip), 0);
+                }
 
-                if (!string.IsNullOrWhiteSpace(ip))
+                if (e.LocalEndPoint != null)
                 {
-                    e.LocalIp = IPAddress.Parse(ip);
                     TryCreateDevice(e);
                 }
             }
@@ -140,7 +143,7 @@ namespace MediaBrowser.Dlna.Ssdp
                         {
                             var args = SsdpHelper.ParseSsdpResponse(receiveBuffer);
                             args.EndPoint = endPoint;
-                            args.LocalIp = localIp;
+                            args.LocalEndPoint = new IPEndPoint(localIp, 0);
 
                             if (!_ssdpHandler.IsSelfNotification(args))
                             {