(Request.PRACK.equals(response.getMethod()) || Request.UPDATE.equals(response.getMethod())) && State.EARLY.equals(response.getSipSession().getState())) {
throw new IllegalStateException("cannot create a subsequent request " + method + " because the session " + key + " is invalid"); if(State.TERMINATED.equals(state)) { throw new IllegalStateException("cannot create a subsequent request " + method + " because the session " + key + " is in TERMINATED state");
(!response.getSession().getState().equals(SipSession.State.TERMINATED))) { response.getSession().setAttribute(B2BUA_LAST_RESPONSE, response);
if ( state != null && State.INITIAL.equals(state) && response.getStatus() >= 200 && response.getStatus() != 407 && response.getStatus() != 401) { if(logger.isDebugEnabled()) { if( (State.INITIAL.equals(state) || State.EARLY.equals(state)) && response.getStatus() >= 200 && response.getStatus() < 300 && !JainSipUtils.DIALOG_TERMINATING_METHODS.contains(method)) { if( State.INITIAL.equals(state) && response.getStatus() >= 100 && response.getStatus() < 200 ) { this.setState(State.EARLY); if(logger.isDebugEnabled()) { if( (State.INITIAL.equals(state) || State.EARLY.equals(state)) && response.getStatus() >= 300 && response.getStatus() < 700 && JainSipUtils.DIALOG_CREATING_METHODS.contains(method) && if(((State.CONFIRMED.equals(state) || State.TERMINATED.equals(state)) && response.getStatus() >= 200 && Request.BYE.equals(method) || (!State.CONFIRMED.equals(state) && response.getStatus() == 487)) { boolean hasOngoingSubscriptions = false; if(subscriptions != null) {
if(checkSession) { if(!((MobicentsSipSession)session).isValidInternal() || State.TERMINATED.equals(key.getState()) || sessionMap.get(sipSessionKey) == null) { throw new IllegalArgumentException("the session is not currently linked to another session or it has been terminated");
if(!State.INITIAL.equals(session.getState()) && ongoingTransactions != null && ongoingTransactions.size() > 0) { if(logger.isDebugEnabled()) { logger.debug("session state : " + session.getState());
State.TERMINATED.equals(((MobicentsSipSession)session1).getState()) || State.TERMINATED.equals(((MobicentsSipSession)session2).getState()) || !session1.getApplicationSession().equals(session2.getApplicationSession()) || (sessionMap.get(((MobicentsSipSession)session1).getKey()) != null && sessionMap.get(((MobicentsSipSession)session1).getKey()) != ((MobicentsSipSession)session2).getKey()) ||
.getExceedsMaxUnreplicatedInterval()) && State.CONFIRMED.equals(session.getState())) { final String realId = session.getId(); if(logger.isDebugEnabled()) {
private void updateReadyToInvalidate(Transaction transaction) { // Section 6.2.4.1.2 Invalidate When Ready Mechanism : // "The container determines the SipSession to be in the ready-to-invalidate state under any of the following conditions: // 3. A SipSession acting as a UAC transitions from the EARLY state back to // the INITIAL state on account of receiving a non-2xx final response (6.2.1 Relationship to SIP Dialogs, point 4) // and has not initiated any new requests (does not have any pending transactions)." if(logger.isDebugEnabled()) { if(ongoingTransactions != null) { logger.debug("ongoingTransactions " + ongoingTransactions.isEmpty() + " for sipsession " + key); } else { logger.debug("ongoingTransactions " + null + " for sipsession " + key); } } if(!readyToInvalidate && (ongoingTransactions == null || ongoingTransactions.isEmpty()) && transaction instanceof ClientTransaction && getProxy() == null && state != null && state.equals(State.INITIAL) && // Fix for Issue 1734 sessionCreatingTransactionRequest != null && sessionCreatingTransactionRequest.getLastFinalResponse() != null && sessionCreatingTransactionRequest.getLastFinalResponse().getStatus() >= 300) { setReadyToInvalidate(true); } }