/** * @param session * @throws SipException */ private void checkSubscriptionStateHeaders(final MobicentsSipSession session) throws SipException { if(Request.NOTIFY.equals(getMethod()) && session.getProxy() == null) { final SubscriptionStateHeader subscriptionStateHeader = (SubscriptionStateHeader) getMessage().getHeader(SubscriptionStateHeader.NAME); // RFC 3265 : If a matching NOTIFY request contains a "Subscription-State" of "active" or "pending", it creates // a new subscription and a new dialog (unless they have already been // created by a matching response, as described above). if (subscriptionStateHeader != null && (SubscriptionStateHeader.ACTIVE.equalsIgnoreCase(subscriptionStateHeader.getState()) || SubscriptionStateHeader.PENDING.equalsIgnoreCase(subscriptionStateHeader.getState()))) { session.addSubscription(this); } // A subscription is destroyed when a notifier sends a NOTIFY request // with a "Subscription-State" of "terminated". if (subscriptionStateHeader != null && SubscriptionStateHeader.TERMINATED.equalsIgnoreCase(subscriptionStateHeader.getState())) { session.removeSubscription(this); } } }
SubscriptionStatus state = SubscriptionStatus.fromString(subscriptionStateHeader.getState()); notify.setStatus(state); case pending: if (subscriptionStateHeader.getExpires() != Notify.NO_TIMEOUT) { notify.setExpires(subscriptionStateHeader.getExpires()); startExpiresTimer(aci,subscriptionStateHeader.getExpires()); setSubscribeRequestTypeCMP(null); notify.setStatusExtension(subscriptionStateHeader.getState()); case terminated: String reasonString = subscriptionStateHeader.getReasonCode(); TerminationReason reason = TerminationReason.fromString(reasonString); notify.setTerminationReason(reason); case probation: case giveup: if (subscriptionStateHeader.getRetryAfter() != Notify.NO_TIMEOUT) { notify.setRetryAfter(subscriptionStateHeader.getRetryAfter());
if (sstate.getState().equalsIgnoreCase("terminated")) { sstate.setReasonCode("deactivated");
if (subscriptionState.getState().equalsIgnoreCase(SubscriptionStateHeader.TERMINATED)) { LOG.info("Subscription state is terminated. Deleting the current dialog"); dialog.delete();
(SubscriptionStateHeader.ACTIVE.equalsIgnoreCase(subscriptionStateHeader.getState()) || SubscriptionStateHeader.PENDING.equalsIgnoreCase(subscriptionStateHeader.getState()))) { sipSession.addSubscription(sipServletRequest); SubscriptionStateHeader.TERMINATED.equalsIgnoreCase(subscriptionStateHeader.getState())) { sipSession.removeSubscription(sipServletRequest);