private void NotifyDevice(UpnpDevice dev, string type, int sendCount = 1) { 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 (_config.GetDlnaConfiguration().EnableDebugLogging) { _logger.Debug("{0} said {1}", dev.USN, type); } SendDatagram(header, values, new IPEndPoint(dev.Address, 0), sendCount); }
private void SendSearchResponse(IPEndPoint endpoint, UpnpDevice dev) { var headers = new RawHeaders { { "CACHE-CONTROL", "max-age = 600" }, { "DATE", DateTime.Now.ToString("R") }, { "EXT", string.Empty }, { "LOCATION", dev.Descriptor.ToString() }, { "SERVER", HttpServer.Signature }, { "ST", dev.Type }, { "USN", dev.USN } }; SendDatagram( endpoint, dev.Address, $"HTTP/1.1 200 OK\r\n{headers.HeaderBlock}\r\n", false ); InfoFormat( "{1} : {0}", dev.Type, endpoint.Address); }
private void SendSearchResponse(IPEndPoint endpoint, UpnpDevice dev) { var headers = new RawHeaders(); headers.Add("CACHE-CONTROL", "max-age = 600"); headers.Add("DATE", DateTime.Now.ToString("R")); headers.Add("EXT", string.Empty); headers.Add("LOCATION", dev.Descriptor.ToString()); headers.Add("SERVER", HttpServer.Signature); headers.Add("ST", dev.Type); headers.Add("USN", dev.USN); SendDatagram( endpoint, dev.Address, String.Format("HTTP/1.1 200 OK\r\n{0}\r\n", headers.HeaderBlock), false ); _logger.InfoFormat( "{2}, {1} - Responded to a {0} request", dev.Type, endpoint, dev.Address); }
} // TreeViewDevicesAfterSelect() #endregion // UI HANDLING //// --------------------------------------------------------------------- #region PRIVATE METHODS /// <summary> /// Called when a device has been found. /// </summary> /// <param name="upnpDevice">The <c>UPnP</c> device.</param> private async void OnDeviceFound(UpnpDevice upnpDevice) { try { var text = await UPNP.GetRemoteTextFile(upnpDevice.Location); upnpDevice.DeviceDescription = UPNP.ParseDeviceSchema(text); Image image = null; var icon = upnpDevice.DeviceDescription.Icons.FirstOrDefault(x => x.Height == 48); if (icon != null) { var url = UPNP.BuildUrl(upnpDevice, icon.URL); image = await UPNP.GetRemoteImageFile(url); } // if var node = this.AddDevice(upnpDevice, this.root, image); this.AddSubDevices(upnpDevice, node, image); } catch (Exception ex) { log.Error(ex.Message, ex); } // catch } // OnDeviceFound()
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); }
protected void OnDiscovered(UpnpDevice device) { CdsDiscovered?.Invoke(this, new CdServiceEventArgs { CdService = device }); }
public bool TryGetCdsDevice(string id, out UpnpDevice device) { return(cdsDevices.TryGetValue(id, out device)); }
public DlnaContentsLoader(UpnpDevice upnp) { UpnpDevice = upnp; }
public DlnaContentsOperator(UpnpDevice upnp) { UpnpDevice = upnp; TitleText = UpnpDevice.FriendlyName; ContentsCollection = new AlbumGroupCollection(); }
internal void NotifyDevice(UpnpDevice dev, string type, bool sticky) { Debug("NotifyDevice"); var headers = new RawHeaders(); headers.Add("HOST", "239.255.255.250:1900"); headers.Add("CACHE-CONTROL", "max-age = 600"); headers.Add("LOCATION", dev.Descriptor.ToString()); headers.Add("SERVER", HttpServer.Signature); headers.Add("NTS", "ssdp:" + type); headers.Add("NT", dev.Type); headers.Add("USN", dev.USN); SendDatagram( SSDP_ENDP, dev.Address, String.Format("NOTIFY * HTTP/1.1\r\n{0}\r\n", headers.HeaderBlock), sticky ); DebugFormat("{0} said {1}", dev.USN, type); }
private void SendSearchResponse(IPEndPoint endpoint, UpnpDevice dev) { var headers = new RawHeaders(); headers.Add("CACHE-CONTROL", "max-age = 600"); headers.Add("DATE", DateTime.Now.ToString("R")); headers.Add("EXT", string.Empty); headers.Add("LOCATION", dev.Descriptor.ToString()); headers.Add("SERVER", HttpServer.Signature); headers.Add("ST", dev.Type); headers.Add("USN", dev.USN); SendDatagram( endpoint, dev.Address, String.Format("HTTP/1.1 200 OK\r\n{0}\r\n", headers.HeaderBlock), false ); InfoFormat( "{2}, {1} - Responded to a {0} request", dev.Type, endpoint, dev.Address); }
internal void NotifyDevice(UpnpDevice dev, string type, bool sticky) { _logger.Debug("NotifyDevice"); var headers = new RawHeaders(); headers.Add("HOST", "239.255.255.250:1900"); headers.Add("CACHE-CONTROL", "max-age = 600"); headers.Add("LOCATION", dev.Descriptor.ToString()); headers.Add("SERVER", HttpServer.Signature); headers.Add("NTS", "ssdp:" + type); headers.Add("NT", dev.Type); headers.Add("USN", dev.USN); SendDatagram( SSDP_ENDP, dev.Address, String.Format("NOTIFY * HTTP/1.1\r\n{0}\r\n", headers.HeaderBlock), sticky ); // Some buggy network equipment will swallow multicast packets, so lets // cheat, increase the odds, by sending to broadcast. SendDatagram( BROAD_ENDP, dev.Address, String.Format("NOTIFY * HTTP/1.1\r\n{0}\r\n", headers.HeaderBlock), sticky ); _logger.DebugFormat("{0} said {1}", dev.USN, type); }
internal void NotifyDevice(UpnpDevice dev, string type, bool sticky) { Debug("NotifyDevice"); var headers = new RawHeaders { {"HOST", "239.255.255.250:1900"}, {"CACHE-CONTROL", "max-age = 600"}, {"LOCATION", dev.Descriptor.ToString()}, {"SERVER", HttpServer.Signature}, {"NTS", "ssdp:" + type}, {"NT", dev.Type}, {"USN", dev.USN} }; SendDatagram( ssdpEndp, dev.Address, $"NOTIFY * HTTP/1.1\r\n{headers.HeaderBlock}\r\n", sticky ); // Some buggy network equipment will swallow multicast packets, so lets // cheat, increase the odds, by sending to broadcast. SendDatagram( BroadEndp, dev.Address, $"NOTIFY * HTTP/1.1\r\n{headers.HeaderBlock}\r\n", sticky ); DebugFormat("{0} said {1}", dev.USN, type); }