public SipApplicationSessionTimerTask createSipApplicationSessionTimerTask(MobicentsSipApplicationSession sipApplicationSession) { return new StandardSasTimerTask(sipApplicationSession); }
public boolean cancel(SipApplicationSessionTimerTask expirationTimerTask) { boolean cancelled = ((StandardSasTimerTask)expirationTimerTask).cancel(); // Purge is expensive when called frequently, only call it every now and then. // We do not sync the numCancelled variable. We dont care about correctness of // the number, and we will still call purge rought once on every 25 cancels. numCancelled++; if(numCancelled % 100 == 0) { super.purge(); } return cancelled; }
private void tryToExpire() { final SipContext sipContext = getSipApplicationSession().getSipContext(); sipContext.enterSipApp(getSipApplicationSession(), null, false, true); boolean batchStarted = sipContext.enterSipAppHa(true); try { getSipApplicationSession().setExpirationTimerTask(null); getSipApplicationSession().notifySipApplicationSessionListeners(SipApplicationSessionEventType.EXPIRATION); if(getDelay() <= 0) { getSipApplicationSession().setExpired(true); if(getSipApplicationSession().isValidInternal()) { getSipApplicationSession().invalidate(true); if(getSipApplicationSession().getExpirationTimerTask() != null) { logger.debug("expiration timer task is non null so the application has extended the session lifetime directly through setExpires"); sipContext.exitSipApp(getSipApplicationSession(), null); setSipApplicationSession(null);
@SuppressWarnings("unchecked") public void run() { try { if(logger.isDebugEnabled()) { logger.debug("initial kick off of SipApplicationSessionTimerTask running for sip application session " + sipApplicationSession.getId()); } long sleep = getDelay(); if(sleep > 0) { // if the session has been accessed since we started it, put it to sleep if(logger.isDebugEnabled()) { logger.debug("expirationTime is " + sipApplicationSession.getExpirationTimeInternal() + ", now is " + System.currentTimeMillis() + " sleeping for " + sleep / 1000L + " seconds"); } final SipContext sipContext = sipApplicationSession.getSipContext(); final SipApplicationSessionTimerTask expirationTimerTask = sipContext.getSipApplicationSessionTimerService().createSipApplicationSessionTimerTask(sipApplicationSession); sipApplicationSession.setExpirationTimerTask(expirationTimerTask); sipContext.getSipApplicationSessionTimerService().schedule(expirationTimerTask, sleep, TimeUnit.MILLISECONDS); } else { tryToExpire(); } } catch (Throwable t) { logger.error("Timer problem", t); } }