diff --git a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs index 6e85918f4a..278c342754 100644 --- a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs +++ b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs @@ -144,7 +144,7 @@ namespace MediaBrowser.Dlna.Ssdp //var protocol = isMulticast ? "Multicast" : "Unicast"; //var localEndPointString = args.LocalEndPoint == null ? "null" : args.LocalEndPoint.ToString(); //_logger.Debug("IGNORING {0} message received from {1} on {3}. Protocol: {4} Headers: {2}", args.Method, args.EndPoint, headerText, localEndPointString, protocol); - + return true; } } @@ -164,7 +164,7 @@ namespace MediaBrowser.Dlna.Ssdp return true; } } - + return false; } @@ -303,9 +303,17 @@ namespace MediaBrowser.Dlna.Ssdp var msg = new SsdpMessageBuilder().BuildMessage(header, values); - SendDatagram(msg, endpoint, null, false, 2); - SendDatagram(msg, endpoint, new IPEndPoint(d.Address, 0), false, 2); - //SendDatagram(header, values, endpoint, null, true); + var ipEndPoint = endpoint as IPEndPoint; + if (ipEndPoint != null) + { + SendUnicastRequest(msg, ipEndPoint); + } + else + { + SendDatagram(msg, endpoint, null, false, 2); + SendDatagram(msg, endpoint, new IPEndPoint(d.Address, 0), false, 2); + //SendDatagram(header, values, endpoint, null, true); + } if (enableDebugLogging) { @@ -583,12 +591,12 @@ namespace MediaBrowser.Dlna.Ssdp } catch (ObjectDisposedException) { - + } } } - private async void SendUnicastRequest(string request, int sendCount = 3) + private void SendUnicastRequest(string request, int sendCount = 3) { if (_unicastClient == null) { @@ -597,10 +605,23 @@ namespace MediaBrowser.Dlna.Ssdp _logger.Debug("Sending unicast search request"); - byte[] req = Encoding.ASCII.GetBytes(request); var ipSsdp = IPAddress.Parse(SSDPAddr); var ipTxEnd = new IPEndPoint(ipSsdp, SSDPPort); + SendUnicastRequest(request, ipTxEnd, sendCount); + } + + private async void SendUnicastRequest(string request, IPEndPoint toEndPoint, int sendCount = 3) + { + if (_unicastClient == null) + { + return; + } + + _logger.Debug("Sending unicast search request"); + + byte[] req = Encoding.ASCII.GetBytes(request); + try { for (var i = 0; i < sendCount; i++) @@ -609,7 +630,7 @@ namespace MediaBrowser.Dlna.Ssdp { await Task.Delay(50).ConfigureAwait(false); } - _unicastClient.Send(req, req.Length, ipTxEnd); + _unicastClient.Send(req, req.Length, toEndPoint); } } catch (Exception ex)