Exemple #1
0
        private List <UpnpEngineDevice> SearchDevices(UpnpNt nt)
        {
            List <UpnpEngineDevice> foundDevices = new List <UpnpEngineDevice>();

            lock (this.deviceLock)
            {
                foreach (UpnpEngineDevice device in this.devices)
                {
                    if (nt == null || device.Device.DeviceNt.IsMatch(nt))
                    {
                        foundDevices.Add(device);
                    }
                }
            }
            return(foundDevices);
        }
Exemple #2
0
        private void OnRunnerDiscovery(HttpRequest request, IPEndPoint remoteEndpoint, IPEndPoint localEndpoint, IPAddress localInterfaceIpOfRemoteAddress)
        {
            HttpHeader searchFor = request.Headers.Get("ST", true);

            if (searchFor == null)
            {
                throw new Exception("Invaild m-search quary (missing ST header)");
            }



            UpnpNt searchItem = UpnpNt.Parse(searchFor.Value);

            Console.WriteLine($"Ssdp discovery search for {searchItem.ToString()} detected from {remoteEndpoint.ToString()} to {localEndpoint.ToString()} can response using {localInterfaceIpOfRemoteAddress?.ToString()}");


            List <UpnpEngineDevice> foundDevices = this.SearchDevices(searchItem);

            foreach (UpnpEngineDevice singleFoundDevice in foundDevices)
            {
                OnRunnerDisocveryForDevice(request, singleFoundDevice, searchItem, remoteEndpoint, localEndpoint, localInterfaceIpOfRemoteAddress);
            }
        }
Exemple #3
0
 public virtual bool IsMatch(UpnpNt searchObject) => this.UpnpType.Equal(searchObject);
Exemple #4
0
 internal UpnpFragmentWithType(UpnpNt upnpType)
 {
     UpnpType = upnpType;
 }
Exemple #5
0
 public override bool IsMatch(UpnpNt searchObject) => (this.UpnpId.Equal(searchObject)) ? true : base.IsMatch(searchObject);
Exemple #6
0
 internal UpnpFragmentWithId(UpnpNt upnpType, UpnpNt upnpId) : base(upnpType)
 {
     UpnpId = upnpId;
 }
Exemple #7
0
        private void OnRunnerDisocveryForDevice(HttpRequest request, UpnpEngineDevice device, UpnpNt searchId, IPEndPoint remoteEndpoint, IPEndPoint localEndpoint, IPAddress localInterfaceIpOfRemoteEndpoint)
        {
            Console.WriteLine("Sending response for disconvery");

            HttpHeader sendDelay = request.Headers.Get("MX", true);

            if (sendDelay != null && int.TryParse(sendDelay.Value, out int maxDelay))
            {
                int currentSleep = random.Next(1, maxDelay * 1000);
                System.Threading.Thread.Sleep(currentSleep);
            }
            UpnpSsdpQueryResponse response = new UpnpSsdpQueryResponse(
                (int)device.Device.NotificationInterval.TotalSeconds,
                searchId, device.Device.IdUsn, this.GetDeviceHttpAddress(device, localInterfaceIpOfRemoteEndpoint));

            this.Send(response, remoteEndpoint);
        }
 internal UpnpFragmentWithRoot(UpnpNt upnpType, UpnpNt upnpId, UpnpNt upnpRoot) : base(upnpType, upnpId)
 {
     UpnpRoot = upnpRoot;
 }