private void NotifyDevice(UpnpDevice dev, string type, bool logMessage) { const string header = "NOTIFY * HTTP/1.1"; var values = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); // If needed later for non-server devices, these headers will need to be dynamic values["HOST"] = "239.255.255.250:1900"; values["CACHE-CONTROL"] = "max-age = 600"; values["LOCATION"] = dev.Descriptor.ToString(); values["SERVER"] = _serverSignature; values["NTS"] = "ssdp:" + type; values["NT"] = dev.Type; values["USN"] = dev.USN; if (logMessage) { _logger.Debug("{0} said {1}", dev.USN, type); } var msg = new SsdpMessageBuilder().BuildMessage(header, values); SendDatagram(msg, _ssdpEndp, new IPEndPoint(dev.Address, 0), true, 2); //SendUnicastRequest(msg, 1); }
private void CreateNotifier(Socket socket) { Task.Factory.StartNew(async(o) => { try { var msg = new SsdpMessageBuilder().BuildRendererDiscoveryMessage(); var request = Encoding.UTF8.GetBytes(msg); while (true) { socket.SendTo(request, new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900)); var delay = _config.GetDlnaConfiguration().ClientDiscoveryIntervalSeconds * 1000; await Task.Delay(delay).ConfigureAwait(false); } } catch (OperationCanceledException) { } catch (Exception ex) { _logger.ErrorException("Error in notifier", ex); } }, _tokenSource.Token, TaskCreationOptions.LongRunning); }
public void SendDatagram(string header, Dictionary <string, string> values, EndPoint endpoint, EndPoint localAddress, bool ignoreBindFailure, int sendCount) { var msg = new SsdpMessageBuilder().BuildMessage(header, values); var queued = false; var enableDebugLogging = _config.GetDlnaConfiguration().EnableDebugLogging; for (var i = 0; i < sendCount; i++) { var dgram = new Datagram(endpoint, localAddress, _logger, msg, ignoreBindFailure, enableDebugLogging); if (_messageQueue.Count == 0) { dgram.Send(); } else { _messageQueue.Enqueue(dgram); queued = true; } } if (queued) { StartQueueTimer(); } }
public void SendSearchMessage(EndPoint localIp) { var values = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); values["HOST"] = "239.255.255.250:1900"; values["USER-AGENT"] = "UPnP/1.0 DLNADOC/1.50 Platinum/1.0.4.2"; values["X-EMBY-SERVERID"] = _appHost.SystemId; values["MAN"] = "\"ssdp:discover\""; // Search target values["ST"] = "ssdp:all"; // Seconds to delay response values["MX"] = "3"; var header = "M-SEARCH * HTTP/1.1"; var msg = new SsdpMessageBuilder().BuildMessage(header, values); // UDP is unreliable, so send 3 requests at a time (per Upnp spec, sec 1.1.2) SendDatagram(msg, _ssdpEndp, localIp, true); SendUnicastRequest(msg); }
private void RespondToSearch(EndPoint endpoint, string deviceType) { var enableDebugLogging = _config.GetDlnaConfiguration().EnableDebugLog; var isLogged = false; const string header = "HTTP/1.1 200 OK"; foreach (var d in RegisteredDevices) { if (string.Equals(deviceType, "ssdp:all", StringComparison.OrdinalIgnoreCase) || string.Equals(deviceType, d.Type, StringComparison.OrdinalIgnoreCase)) { if (!isLogged) { if (enableDebugLogging) { _logger.Debug("Responding to search from {0} for {1}", endpoint, deviceType); } isLogged = true; } var values = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); values["CACHE-CONTROL"] = "max-age = 600"; values["DATE"] = DateTime.Now.ToString("R"); values["EXT"] = ""; values["LOCATION"] = d.Descriptor.ToString(); values["SERVER"] = _serverSignature; values["ST"] = d.Type; values["USN"] = d.USN; 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); if (enableDebugLogging) { _logger.Debug("{1} - Responded to a {0} request to {2}", d.Type, endpoint, d.Address.ToString()); } } } }
public void SendDatagram(string header, Dictionary <string, string> values, IPEndPoint endpoint, IPEndPoint localAddress, int sendCount = 1) { var msg = new SsdpMessageBuilder().BuildMessage(header, values); var dgram = new Datagram(endpoint, localAddress, _logger, msg, sendCount); if (_messageQueue.Count == 0) { dgram.Send(); return; } _messageQueue.Enqueue(dgram); StartQueueTimer(); }
public async void SendDatagram(string header, Dictionary <string, string> values, EndPoint endpoint, EndPoint localAddress, bool isBroadcast, int sendCount) { var msg = new SsdpMessageBuilder().BuildMessage(header, values); var enableDebugLogging = _config.GetDlnaConfiguration().EnableDebugLogging; for (var i = 0; i < sendCount; i++) { if (i > 0) { await Task.Delay(500).ConfigureAwait(false); } var dgram = new Datagram(endpoint, localAddress, _logger, msg, isBroadcast, enableDebugLogging); dgram.Send(); } }
public async void SendDatagram(string header, Dictionary<string, string> values, EndPoint endpoint, EndPoint localAddress, bool isBroadcast, int sendCount) { var msg = new SsdpMessageBuilder().BuildMessage(header, values); var enableDebugLogging = _config.GetDlnaConfiguration().EnableDebugLogging; for (var i = 0; i < sendCount; i++) { if (i > 0) { await Task.Delay(500).ConfigureAwait(false); } var dgram = new Datagram(endpoint, localAddress, _logger, msg, isBroadcast, enableDebugLogging); dgram.Send(); } }
public void SendDatagram(string header, Dictionary<string, string> values, EndPoint endpoint, EndPoint localAddress, bool ignoreBindFailure, int sendCount) { var msg = new SsdpMessageBuilder().BuildMessage(header, values); var queued = false; var enableDebugLogging = _config.GetDlnaConfiguration().EnableDebugLogging; for (var i = 0; i < sendCount; i++) { var dgram = new Datagram(endpoint, localAddress, _logger, msg, ignoreBindFailure, enableDebugLogging); if (_messageQueue.Count == 0) { dgram.Send(); } else { _messageQueue.Enqueue(dgram); queued = true; } } if (queued) { StartQueueTimer(); } }
public void SendDatagram(string header, Dictionary<string, string> values, IPEndPoint endpoint, IPEndPoint localAddress, int sendCount = 1) { var msg = new SsdpMessageBuilder().BuildMessage(header, values); var dgram = new Datagram(endpoint, localAddress, _logger, msg, sendCount); if (_messageQueue.Count == 0) { dgram.Send(); return; } _messageQueue.Enqueue(dgram); StartQueueTimer(); }
private void NotifyDevice(UpnpDevice dev, string type, bool logMessage) { const string header = "NOTIFY * HTTP/1.1"; var values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); // If needed later for non-server devices, these headers will need to be dynamic values["HOST"] = "239.255.255.250:1900"; values["CACHE-CONTROL"] = "max-age = 600"; values["LOCATION"] = dev.Descriptor.ToString(); values["SERVER"] = _serverSignature; values["NTS"] = "ssdp:" + type; values["NT"] = dev.Type; values["USN"] = dev.USN; if (logMessage) { _logger.Debug("{0} said {1}", dev.USN, type); } var msg = new SsdpMessageBuilder().BuildMessage(header, values); SendDatagram(msg, _ssdpEndp, new IPEndPoint(dev.Address, 0), true, 2); //SendUnicastRequest(msg, 1); }
private void RespondToSearch(EndPoint endpoint, string deviceType) { var enableDebugLogging = _config.GetDlnaConfiguration().EnableDebugLog; var isLogged = false; const string header = "HTTP/1.1 200 OK"; foreach (var d in RegisteredDevices) { if (string.Equals(deviceType, "ssdp:all", StringComparison.OrdinalIgnoreCase) || string.Equals(deviceType, d.Type, StringComparison.OrdinalIgnoreCase)) { if (!isLogged) { if (enableDebugLogging) { _logger.Debug("Responding to search from {0} for {1}", endpoint, deviceType); } isLogged = true; } var values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); values["CACHE-CONTROL"] = "max-age = 600"; values["DATE"] = DateTime.Now.ToString("R"); values["EXT"] = ""; values["LOCATION"] = d.Descriptor.ToString(); values["SERVER"] = _serverSignature; values["ST"] = d.Type; values["USN"] = d.USN; 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); if (enableDebugLogging) { _logger.Debug("{1} - Responded to a {0} request to {2}", d.Type, endpoint, d.Address.ToString()); } } } }
public void SendSearchMessage(EndPoint localIp) { var values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); values["HOST"] = "239.255.255.250:1900"; values["USER-AGENT"] = "UPnP/1.0 DLNADOC/1.50 Platinum/1.0.4.2"; values["X-EMBY-SERVERID"] = _appHost.SystemId; values["MAN"] = "\"ssdp:discover\""; // Search target values["ST"] = "ssdp:all"; // Seconds to delay response values["MX"] = "3"; var header = "M-SEARCH * HTTP/1.1"; var msg = new SsdpMessageBuilder().BuildMessage(header, values); // UDP is unreliable, so send 3 requests at a time (per Upnp spec, sec 1.1.2) SendDatagram(msg, _ssdpEndp, localIp, true); SendUnicastRequest(msg); }
private void CreateNotifier(Socket socket) { Task.Factory.StartNew(async (o) => { try { var msg = new SsdpMessageBuilder().BuildRendererDiscoveryMessage(); var request = Encoding.UTF8.GetBytes(msg); while (true) { socket.SendTo(request, new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900)); var delay = _config.GetDlnaConfiguration().ClientDiscoveryIntervalSeconds * 1000; await Task.Delay(delay).ConfigureAwait(false); } } catch (OperationCanceledException) { } catch (Exception ex) { _logger.ErrorException("Error in notifier", ex); } }, _tokenSource.Token, TaskCreationOptions.LongRunning); }