SIPSorcery.Servers.SIPRegistrarBindingsManager.ExpireBindings C# (CSharp) Method

ExpireBindings() private method

private ExpireBindings ( ) : void
return void
        private void ExpireBindings()
        {
            try
            {
                Thread.CurrentThread.Name = EXPIRE_BINDINGS_THREAD_NAME;

                while (!m_stop)
                {
                    try
                    {
                        DateTimeOffset expiryTime = DateTimeOffset.UtcNow.AddSeconds(BINDING_EXPIRY_GRACE_PERIOD * -1);
                        SIPRegistrarBinding expiredBinding = GetNextExpiredBinding(expiryTime);

                        while (expiredBinding != null)
                        {
                            FireSIPMonitorLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.Registrar, SIPMonitorEventTypesEnum.BindingExpired, "Expired binding deleted for " + expiredBinding.SIPAccountName + " and " + expiredBinding.MangledContactURI + ", last register " +
                                expiredBinding.LastUpdate.ToString("HH:mm:ss") + ", expiry " + expiredBinding.Expiry + ", expiry time " + expiredBinding.ExpiryTime.ToString("HH:mm:ss") + ", now " + expiryTime.ToString("HH:mm:ss") + ".", expiredBinding.Owner));

                            FireSIPMonitorLogEvent(new SIPMonitorMachineEvent(SIPMonitorMachineEventTypesEnum.SIPRegistrarBindingRemoval, expiredBinding.Owner, expiredBinding.SIPAccountId.ToString(), SIPURI.ParseSIPURIRelaxed(expiredBinding.SIPAccountName + "@sipsorcery.com")));

                            lock (m_natKeepAliveJobs)
                            {
                                if (m_natKeepAliveJobs.ContainsKey(expiredBinding.RemoteSIPSocket))
                                {
                                    m_natKeepAliveJobs[expiredBinding.RemoteSIPSocket].CancelJob();
                                }
                            }

                            expiryTime = DateTimeOffset.UtcNow.AddSeconds(BINDING_EXPIRY_GRACE_PERIOD * -1);
                            expiredBinding = GetNextExpiredBinding(expiryTime);
                        }
                    }
                    catch (Exception expireExcp)
                    {
                        logger.Error("Exception ExpireBindings Delete. " + expireExcp.Message);
                    }

                    Thread.Sleep(REMOVE_EXPIRED_BINDINGS_INTERVAL);
                }
            }
            catch (Exception excp)
            {
                logger.Error("Exception ExpireBindings. " + excp.Message);
            }
            finally
            {
                logger.Warn("Thread " + EXPIRE_BINDINGS_THREAD_NAME + " stopped!");
            }
        }