/// <summary>
        /// Triggered when a device lifetime has expired
        /// </summary>
        /// <param name="Obj"></param>
        private void DeviceLifeTimeClockSink(LifeTimeMonitor sender, object obj)
        {
            DeviceInfo deviceInfo;

            lock (deviceTableLock)
            {
                if (deviceTable.ContainsKey(obj) == false)
                {
                    return;
                }
                deviceInfo = (DeviceInfo)deviceTable[obj];
                deviceTable.Remove(obj);
                deviceUpdateClock.Remove(obj);  // Cancel any source change
                if (activeDeviceList.Contains(deviceInfo.Device))
                {
                    activeDeviceList.Remove(deviceInfo.Device);
                }
                else
                {
                    deviceInfo.Device = null;   // Don't warn user about this, user does not know about device
                }
            }
            if (deviceInfo.Device != null)
            {
                deviceInfo.Device.Removed();
            }
            if (deviceInfo.Device != null)
            {
                deviceInfo.Device.Removed();
                OnDeviceExpiredEvent.Fire(this, deviceInfo.Device);
            }
        }
        /// <summary>
        /// Triggered when a device must be updated to a new source IP address
        /// </summary>
        /// <param name="Obj"></param>
        private void DeviceUpdateClockSink(LifeTimeMonitor sender, object obj)
        {
            // Make the source switch
            lock (deviceTableLock)
            {
                if (deviceTable.ContainsKey(obj) == false)
                {
                    return;
                }
                DeviceInfo deviceInfo = (DeviceInfo)deviceTable[obj];
                if (deviceInfo.PendingBaseURL == null)
                {
                    return;     // Cancel the switch
                }

                deviceInfo.BaseURL    = deviceInfo.PendingBaseURL;
                deviceInfo.MaxAge     = deviceInfo.PendingMaxAge;
                deviceInfo.LocalEP    = deviceInfo.PendingLocalEP;
                deviceInfo.NotifyTime = DateTime.Now;
                deviceInfo.Device.UpdateDevice(deviceInfo.BaseURL, deviceInfo.LocalEP.Address);
                deviceTable[obj] = deviceInfo;

                deviceLifeTimeClock.Add(deviceInfo.UDN, deviceInfo.MaxAge);
            }
            //if (OnUpdatedDevice != null) OnUpdatedDevice(this,deviceInfo.Device);
        }
Example #3
0
        private void KeepAliveSink(LifeTimeMonitor sender, object obj)
        {
            if (IdleTimeout == false)
            {
                return;
            }
            ArrayList RemoveList = new ArrayList();

            lock (SessionTable)
            {
                IDictionaryEnumerator en = SessionTable.GetEnumerator();
                while (en.MoveNext())
                {
                    if (((HTTPSession)en.Value).Monitor.IsTimeout())
                    {
                        RemoveList.Add(en.Value);
                    }
                }
            }
            foreach (HTTPSession HS in RemoveList)
            {
                HS.Close();
            }
            KeepAliveTimer.Add(false, 7);
        }
        protected void LifeTimeSink(LifeTimeMonitor sender, object Obj)
        {
            lock (this)
            {
                if (PendingEvents > 1)
                {
                    base.Value = PendingObject;
                }
                PendingObject = Accumulator.Reset();
                PendingEvents = 0;
            }

            /*
             *
             *      if (PendingObject != null)
             *      {
             *              base.Value = PendingObject;
             *              PendingObject = Accumulator.Reset();
             *              PendingEvents = 1;
             *              t.Add(this,Seconds);
             *      }
             *      else
             *      {
             *              StateObject = Accumulator.Reset();
             *              PendingEvents = 0;
             *      }
             * }*/
        }
Example #5
0
 private void HandleExpired(LifeTimeMonitor sender, object Obj)
 {
     if (Obj.GetType().FullName == "OSTL.UPnP.UPnPDeviceFactory")
     {
         ((UPnPDeviceFactory)Obj).Shutdown();
         CreateTable.Remove(Obj);
     }
 }
Example #6
0
        private void SearchTimerSink(LifeTimeMonitor sender, object obj)
        {
            SearchStruct SS = (SearchStruct)obj;

            if (OnSearch != null)
            {
                OnSearch(SS.ST, SS.Source, SS.Local);
            }
        }
Example #7
0
        /// <summary>
        /// Calledn every second to check for interface changes.
        /// </summary>
        private void PollInterface(LifeTimeMonitor sender, Object obj)
        {
            try
            {
                ArrayList          CurrentAddressTable = new ArrayList();
                NetworkInterface[] interfaces          = NetworkInterface.GetAllNetworkInterfaces();
                foreach (NetworkInterface i in interfaces)
                {
                    if (i.IsReceiveOnly == false && i.OperationalStatus == OperationalStatus.Up && i.SupportsMulticast)
                    {
                        IPInterfaceProperties i2 = i.GetIPProperties();
                        foreach (UnicastIPAddressInformation i3 in i2.UnicastAddresses)
                        {
                            if (!CurrentAddressTable.Contains(i3.Address) && !i3.Address.Equals(IPAddress.IPv6Loopback))
                            {
                                CurrentAddressTable.Add(i3.Address);
                            }
                        }
                    }
                }

                /*
                 * IPHostEntry HostInfo = Dns.GetHostEntry(HostName);
                 * ArrayList CurrentAddressTable = new ArrayList(HostInfo.AddressList);
                 */

                ArrayList OldAddressTable = AddressTable;
                AddressTable = CurrentAddressTable;
                if (!AddressTable.Contains(IPAddress.Loopback))
                {
                    AddressTable.Add(IPAddress.Loopback);
                }

                foreach (IPAddress addr in CurrentAddressTable)
                {
                    if (OldAddressTable.Contains(addr) == false)
                    {
                        OnNewInterfaceEvent.Fire(this, addr);
                    }
                }

                foreach (IPAddress addr in OldAddressTable)
                {
                    if (CurrentAddressTable.Contains(addr) == false)
                    {
                        OnInterfaceDisabledEvent.Fire(this, addr);
                    }
                }
            }
            catch (Exception ex)
            {
                EventLogger.Log(ex);
                //System.Windows.Forms.MessageBox.Show(ex.ToString(),"NetworkInfo");
            }
            InterfacePoller.Add(this, NetworkPollSeconds);
        }
Example #8
0
 private void KeepAliveSink(LifeTimeMonitor sender, object obj)
 {
     if (IdleTimeout == false || (int)obj != GetHashCode())
     {
         return;
     }
     ForceCloseSession();
     if (OnInactiveClosed != null)
     {
         OnInactiveClosed(this);
     }
 }
Example #9
0
        public UPnPControlPoint(NetworkInfo ni)
        {
            CreateTable         = Hashtable.Synchronized(new Hashtable());
            NetInfo             = ni;
            SyncData            = ArrayList.Synchronized(new ArrayList());
            SSDPSessions        = Hashtable.Synchronized(new Hashtable());
            Lifetime            = new LifeTimeMonitor();
            Lifetime.OnExpired += HandleExpired;

            SSDPServer           = new SSDP(65535);
            SSDPServer.OnNotify += HandleNotify;
        }
Example #10
0
        private void SessionTimerSink(LifeTimeMonitor sender, object obj)
        {
            HTTPSession s = (HTTPSession)obj;

            s.Close();
        }