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!");
}
}