Beispiel #1
0
 private void HandleDeviceCreation(UPnPDeviceFactory Factory, UPnPDevice device, Uri URL)
 {
     Factory.Shutdown();
     if (OnCreateDevice != null)
     {
         OnCreateDevice(device, URL);
     }
 }
Beispiel #2
0
        /// <summary>
        /// Creates a device from a URL. [Depracated] use UPnPDeviceFactory
        /// </summary>
        /// <param name="DescriptionURL"></param>
        /// <param name="LifeTime"></param>
        public void CreateDeviceAsync(Uri DescriptionURL, int LifeTime)
        {
            //2ToDo: Replace the failed callback
            UPnPDeviceFactory fac = new UPnPDeviceFactory(DescriptionURL, LifeTime, HandleDeviceCreation, null, null, null);

            CreateTable[fac] = fac;
            Lifetime.Add(fac, 30);
        }
 private void HandleFactory(UPnPDeviceFactory Factory, UPnPDevice device, Uri URL)
 {
     lock (CreateTable) { CreateTable.Remove(Factory); }
     Factory.Shutdown();
     if (OnDevice != null)
     {
         OnDevice(this, device, URL);
     }
 }
 private void DeviceFactoryFailedSink(UPnPDeviceFactory sender, Uri URL, Exception e, string urn)
 {
     lock (deviceTableLock)
     {
         if (deviceTable.ContainsKey(urn))
         {
             deviceTable.Remove(urn);
         }
     }
 }
        /// <summary>
        /// Create a UPnPDevice from a Uri
        /// </summary>
        /// <param name="DescLocation">XML Description Uri</param>
        /// <param name="MaxSeconds">Device refresh Cycle</param>
        public void CreateDevice(Uri DescLocation, int MaxSeconds, IPAddress localaddr, string usn)
        {
            EventLogger.Log(this, EventLogEntryType.Information, "Creating Device: " + usn);

            lock (CreateTable)
            {
                // 2TODO: Fix the failed callback
                UPnPDeviceFactory x = new UPnPDeviceFactory(DescLocation, MaxSeconds, HandleFactory,
                                                            FactoryFailedSink, localaddr, usn);
                CreateTable[x] = x;
            }
        }
 private void FactoryFailedSink(UPnPDeviceFactory sender, Uri URL, Exception e, string urn)
 {
     lock (CreateTable)
     {
         CreateTable.Remove(sender);
         sender.Shutdown();
     }
     if (OnFailed != null)
     {
         OnFailed(this, URL, e, urn);
     }
 }
        /// <summary>
        /// Triggered when a new UPnP device is created.
        /// </summary>
        private void DeviceFactoryCreationSink(UPnPDeviceFactory sender, UPnPDevice device, Uri locationURL)
        {
            // Hardening
            if (deviceTable.Contains(device.UniqueDeviceName) == false && deviceTable.Contains("FORCEDDEVICE") == false)
            {
                EventLogger.Log(this, EventLogEntryType.Error, "UPnPDevice[" + device.FriendlyName + "]@" + device.LocationURL + " advertised UDN[" + device.UniqueDeviceName + "] in xml but not in SSDP");
                return;
            }

            lock (deviceTableLock)
            {
                DeviceInfo deviceInfo;
                if (deviceTable.Contains(device.UniqueDeviceName) == false)
                {
                    // This must be the forced device
                    deviceInfo = (DeviceInfo)deviceTable["FORCEDDEVICE"];
                    deviceTable.Remove("FORCEDDEVICE");
                    deviceTable[device.UniqueDeviceName] = deviceInfo;
                }

                // Hardening - Creating a device we have should never happen.
                if (((DeviceInfo)deviceTable[device.UniqueDeviceName]).Device != null)
                {
                    EventLogger.Log(this, EventLogEntryType.Error, "Unexpected UPnP Device Creation: " + device.FriendlyName + "@" + device.LocationURL);
                    return;
                }

                // Lets update out state and notify the user.
                deviceInfo        = (DeviceInfo)deviceTable[device.UniqueDeviceName];
                deviceInfo.Device = device;
                deviceTable[device.UniqueDeviceName] = deviceInfo;
                deviceLifeTimeClock.Add(device.UniqueDeviceName, device.ExpirationTimeout);
                activeDeviceList.Add(device);
            }
            OnAddedDeviceEvent.Fire(this, device);
        }