Search in sources :

Example 1 with TransactionTerminatedEvent

use of javax.sip.TransactionTerminatedEvent in project XobotOS by xamarin.

the class SIPTransactionStack method removeTransaction.

/**
     * Remove transaction. This actually gets the tx out of the search structures which the stack
     * keeps around. When the tx
     */
public void removeTransaction(SIPTransaction sipTransaction) {
    if (stackLogger.isLoggingEnabled()) {
        stackLogger.logDebug("Removing Transaction = " + sipTransaction.getTransactionId() + " transaction = " + sipTransaction);
    }
    if (sipTransaction instanceof SIPServerTransaction) {
        if (stackLogger.isLoggingEnabled())
            stackLogger.logStackTrace();
        String key = sipTransaction.getTransactionId();
        Object removed = serverTransactionTable.remove(key);
        String method = sipTransaction.getMethod();
        this.removePendingTransaction((SIPServerTransaction) sipTransaction);
        this.removeTransactionPendingAck((SIPServerTransaction) sipTransaction);
        if (method.equalsIgnoreCase(Request.INVITE)) {
            this.removeFromMergeTable((SIPServerTransaction) sipTransaction);
        }
        // Send a notification to the listener.
        SipProviderImpl sipProvider = (SipProviderImpl) sipTransaction.getSipProvider();
        if (removed != null && sipTransaction.testAndSetTransactionTerminatedEvent()) {
            TransactionTerminatedEvent event = new TransactionTerminatedEvent(sipProvider, (ServerTransaction) sipTransaction);
            sipProvider.handleEvent(event, sipTransaction);
        }
    } else {
        String key = sipTransaction.getTransactionId();
        Object removed = clientTransactionTable.remove(key);
        if (stackLogger.isLoggingEnabled()) {
            stackLogger.logDebug("REMOVED client tx " + removed + " KEY = " + key);
            if (removed != null) {
                SIPClientTransaction clientTx = (SIPClientTransaction) removed;
                if (clientTx.getMethod().equals(Request.INVITE) && this.maxForkTime != 0) {
                    RemoveForkedTransactionTimerTask ttask = new RemoveForkedTransactionTimerTask(clientTx);
                    this.timer.schedule(ttask, this.maxForkTime * 1000);
                }
            }
        }
        // Send a notification to the listener.
        if (removed != null && sipTransaction.testAndSetTransactionTerminatedEvent()) {
            SipProviderImpl sipProvider = (SipProviderImpl) sipTransaction.getSipProvider();
            TransactionTerminatedEvent event = new TransactionTerminatedEvent(sipProvider, (ClientTransaction) sipTransaction);
            sipProvider.handleEvent(event, sipTransaction);
        }
    }
}
Also used : SipProviderImpl(gov.nist.javax.sip.SipProviderImpl) TransactionTerminatedEvent(javax.sip.TransactionTerminatedEvent)

Aggregations

SipProviderImpl (gov.nist.javax.sip.SipProviderImpl)1 TransactionTerminatedEvent (javax.sip.TransactionTerminatedEvent)1