|
|
@ -11,17 +11,17 @@ namespace MediaBrowser.Dlna.Ssdp
|
|
|
|
public EndPoint ToEndPoint { get; private set; }
|
|
|
|
public EndPoint ToEndPoint { get; private set; }
|
|
|
|
public EndPoint FromEndPoint { get; private set; }
|
|
|
|
public EndPoint FromEndPoint { get; private set; }
|
|
|
|
public string Message { get; private set; }
|
|
|
|
public string Message { get; private set; }
|
|
|
|
public bool IgnoreBindFailure { get; private set; }
|
|
|
|
public bool IsBroadcast { get; private set; }
|
|
|
|
public bool EnableDebugLogging { get; private set; }
|
|
|
|
public bool EnableDebugLogging { get; private set; }
|
|
|
|
|
|
|
|
|
|
|
|
private readonly ILogger _logger;
|
|
|
|
private readonly ILogger _logger;
|
|
|
|
|
|
|
|
|
|
|
|
public Datagram(EndPoint toEndPoint, EndPoint fromEndPoint, ILogger logger, string message, bool ignoreBindFailure, bool enableDebugLogging)
|
|
|
|
public Datagram(EndPoint toEndPoint, EndPoint fromEndPoint, ILogger logger, string message, bool isBroadcast, bool enableDebugLogging)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Message = message;
|
|
|
|
Message = message;
|
|
|
|
_logger = logger;
|
|
|
|
_logger = logger;
|
|
|
|
EnableDebugLogging = enableDebugLogging;
|
|
|
|
EnableDebugLogging = enableDebugLogging;
|
|
|
|
IgnoreBindFailure = ignoreBindFailure;
|
|
|
|
IsBroadcast = isBroadcast;
|
|
|
|
FromEndPoint = fromEndPoint;
|
|
|
|
FromEndPoint = fromEndPoint;
|
|
|
|
ToEndPoint = toEndPoint;
|
|
|
|
ToEndPoint = toEndPoint;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -50,10 +50,9 @@ namespace MediaBrowser.Dlna.Ssdp
|
|
|
|
_logger.ErrorException("Error binding datagram socket", ex);
|
|
|
|
_logger.ErrorException("Error binding datagram socket", ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!IgnoreBindFailure)
|
|
|
|
if (IsBroadcast)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
CloseSocket(socket, false);
|
|
|
|
CloseSocket(socket, false);
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -107,12 +106,14 @@ namespace MediaBrowser.Dlna.Ssdp
|
|
|
|
try
|
|
|
|
try
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
|
|
|
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
|
|
|
|
|
|
|
|
|
|
|
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
|
|
|
|
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
|
|
|
|
|
|
|
|
|
|
|
|
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
|
|
|
|
|
|
|
|
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 4);
|
|
|
|
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 4);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (IsBroadcast)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return socket;
|
|
|
|
return socket;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
catch (Exception ex)
|
|
|
|