Revision: 12474
Author: jean.deruelle
Date: Tue Jun 15 06:53:52 2010
Log: Fixes Issue 1493
http://code.google.com/p/mobicents/source/detail?r=12474
Modified:
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/MessageDispatcher.java
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletMessageImpl.java
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/MessageDispatcher.java
Mon Mar 8 04:40:29 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/MessageDispatcher.java
Tue Jun 15 06:53:52 2010
@@ -23,8 +23,10 @@
import javax.servlet.Servlet;
import javax.servlet.ServletException;
+import javax.sip.ObjectInUseException;
import javax.sip.ServerTransaction;
import javax.sip.SipProvider;
+import javax.sip.Transaction;
import javax.sip.message.Request;
import javax.sip.message.Response;
@@ -40,6 +42,7 @@
import org.mobicents.servlet.sip.message.SipServletMessageImpl;
import org.mobicents.servlet.sip.message.SipServletRequestImpl;
import org.mobicents.servlet.sip.message.SipServletResponseImpl;
+import org.mobicents.servlet.sip.message.TransactionApplicationData;
import org.mobicents.servlet.sip.security.SipSecurityUtils;
import org.mobicents.servlet.sip.startup.SipContext;
@@ -256,6 +259,26 @@
}
} else {
logger.error("no handler found for sip session " + session.getKey() + "
and request " + request);
+ // Issue 1493 : under some race condition the transaction might not be
added to the sip session
+ // and in this particular condition no response will be generated back
to the UA (we don't want to since this
+ // can be a retransmission here) so the stack will hold the ref to the
transaction, so terminating the transaction
+ // if it is present and cleaning up all related data
+ Transaction transaction = request.getTransaction();
+ if(transaction != null) {
+ TransactionApplicationData tad =
(TransactionApplicationData) transaction.getApplicationData();
+ if(tad != null) {
+ tad.cleanUp();
+ }
+ transaction.setApplicationData(null);
+
+ try {
+ transaction.terminate();
+ } catch (ObjectInUseException e) {
+ logger.error("transaction " +
transaction.getBranchId() + " for request " + request + " couldn't be
terminated");
+ }
+ }
+
+ request.setSipSession(null);
}
}
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletMessageImpl.java
Thu Jun 10 08:22:16 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletMessageImpl.java
Tue Jun 15 06:53:52 2010
@@ -1012,7 +1012,11 @@
// See Issue 1294
http://code.google.com/p/mobicents/issues/detail?id=1294
// but it will not be persisted to avoid unecessary replication if the
message is persisted
this.sipSession = session;
- this.sessionKey = session.getKey();
+ if (session != null){
+ this.sessionKey = session.getKey();
+ } else {
+ this.sessionKey = null;
+ }
}
/**