Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        } // 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()
Example #5
0
        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);
        }
Example #6
0
 protected void OnDiscovered(UpnpDevice device)
 {
     CdsDiscovered?.Invoke(this, new CdServiceEventArgs {
         CdService = device
     });
 }
Example #7
0
 public bool TryGetCdsDevice(string id, out UpnpDevice device)
 {
     return(cdsDevices.TryGetValue(id, out device));
 }
Example #8
0
 public DlnaContentsLoader(UpnpDevice upnp)
 {
     UpnpDevice = upnp;
 }
Example #9
0
 public DlnaContentsOperator(UpnpDevice upnp)
 {
     UpnpDevice         = upnp;
     TitleText          = UpnpDevice.FriendlyName;
     ContentsCollection = new AlbumGroupCollection();
 }
Example #10
0
    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);
    }
Example #11
0
    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);
    }
Example #12
0
        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);
        }
Example #13
0
        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);
        }