Hi,
so now with MAX_LISTENER_RESPONSE_TIME set, runTask() of
ListenerExecutionMaxTimer is executed.
the problem is that he never go in the " if
(serverTransaction.getState() == null) " , getSate() is not null, for
the cancel request state is: "Terminated Transaction" and for the
invite transaction state is: "Proceeding Transaction".
/**
* This timer task will terminate the transaction if the listener
does not respond in a
* pre-determined time period. This helps prevent buggy listeners
(who fail to respond) from
* causing memory leaks. This allows a container to protect itself
from buggy code ( that
* fails to respond to a server transaction).
*
*/
class ListenerExecutionMaxTimer extends SIPStackTimerTask {
SIPServerTransaction serverTransaction =
SIPServerTransaction.this;
ListenerExecutionMaxTimer() {
sipStack.logWriter.logDebug(" create
ListenerExecutionMaxTimer() " + getTransactionId());
}
protected void runTask() {
sipStack.logWriter.logDebug(" TransactionTimer()
runTask ListenerExecutionMaxTimer() : " + getTransactionId() + "
state:" + serverTransaction.getState() );
try {
if (serverTransaction.getState() == null) {
sipStack.logWriter.logDebug(" in if " +
getTransactionId());
serverTransaction.terminate();
SIPTransactionStack sipStack =
serverTransaction.getSIPStack();
sipStack.removePendingTransaction
(serverTransaction);
sipStack.removeTransaction(serverTransaction);
}
} catch (Exception ex) {
sipStack.getLogWriter().logError("unexpected
exception", ex);