Revision: 10629
Author: jean.deruelle
Date: Mon Mar 8 05:18:31 2010
Log: Update Issue 1298
Fix for NPE occuring under stress
http://code.google.com/p/mobicents/source/detail?r=10629
Modified:
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/SipApplicationDispatcherImpl.java
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/InitialRequestDispatcher.java
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/ResponseDispatcher.java
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/session/MobicentsSipSession.java
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/session/SipSessionImpl.java
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/B2buaHelperImpl.java
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/MobicentsSipSessionFacade.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/message/SipServletRequestImpl.java
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletResponseImpl.java
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/SipApplicationDispatcherImpl.java
Fri Mar 5 01:40:42 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/SipApplicationDispatcherImpl.java
Mon Mar 8 05:18:31 2010
@@ -983,7 +983,7 @@
MessageDispatcher.callServlet(response);
} catch (Throwable t) {
- logger.error("Failed to deliver 408 respone on transaction timeout" +
transaction, t);
+ logger.error("Failed to deliver 408 response on transaction timeout"
+ transaction, t);
}
}
if(sipSession != null) {
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/InitialRequestDispatcher.java
Wed Mar 3 06:13:07 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/InitialRequestDispatcher.java
Mon Mar 8 05:18:31 2010
@@ -657,7 +657,7 @@
sipContext.enterSipAppHa(true);
try {
-
sipSessionImpl.setSessionCreatingTransaction(sipServletRequest.getTransaction());
+
sipSessionImpl.setSessionCreatingTransactionRequest(sipServletRequest);
String sipSessionHandlerName =
sipSessionImpl.getHandler();
if(logger.isDebugEnabled()) {
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/ResponseDispatcher.java
Wed Mar 3 06:13:07 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/ResponseDispatcher.java
Mon Mar 8 05:18:31 2010
@@ -201,7 +201,7 @@
sipContext.enterSipAppHa(true);
try {
try {
-
session.setSessionCreatingTransaction(clientTransaction);
+
session.setSessionCreatingTransactionRequest(sipServletResponse);
session.setSessionCreatingDialog(dialog);
if(originalRequest !=
null) {
originalRequest.setResponse(sipServletResponse);
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/session/MobicentsSipSession.java
Thu Mar 4 07:08:32 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/session/MobicentsSipSession.java
Mon Mar 8 05:18:31 2010
@@ -81,9 +81,9 @@
void setSessionCreatingDialog(Dialog dialog);
- SipServletRequestImpl getSessionCreatingTransactionRequest();
-
- void setSessionCreatingTransaction(Transaction transaction);
+ SipServletMessageImpl getSessionCreatingTransactionRequest();
+
+ void setSessionCreatingTransactionRequest(SipServletMessageImpl
message);
Set<Transaction> getOngoingTransactions();
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/session/SipSessionImpl.java
Mon Mar 8 04:40:29 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/session/SipSessionImpl.java
Mon Mar 8 05:18:31 2010
@@ -1148,9 +1148,19 @@
/**
* @param sessionCreatingTransaction the sessionCreatingTransaction to
set
*/
- public void setSessionCreatingTransaction(Transaction
sessionCreatingTransaction) {
- this.sessionCreatingTransactionRequest = (SipServletRequestImpl)
((TransactionApplicationData)sessionCreatingTransaction.getApplicationData()).getSipServletMessage();
- this.isSessionCreatingTransactionServer = sessionCreatingTransaction
instanceof ServerTransaction;
+ public void setSessionCreatingTransactionRequest(SipServletMessageImpl
message) {
+ if(message != null) {
+ if(message instanceof SipServletRequestImpl) {
+ this.sessionCreatingTransactionRequest = (SipServletRequestImpl)
message;
+ this.isSessionCreatingTransactionServer = message.getTransaction()
instanceof ServerTransaction;
+ } else {
+ SipServletMessageImpl sipServletMessageImpl =
((TransactionApplicationData)message.getTransaction().getApplicationData()).getSipServletMessage();
+ if(sipServletMessageImpl != null && sipServletMessageImpl instanceof
SipServletRequestImpl) {
+ this.sessionCreatingTransactionRequest = (SipServletRequestImpl)
message;
+ this.isSessionCreatingTransactionServer = message.getTransaction()
instanceof ServerTransaction;
+ }
+ }
+ }
if(sessionCreatingTransactionRequest != null) {
if(originalMethod == null) {
originalMethod =
sessionCreatingTransactionRequest.getMethod();
@@ -1161,7 +1171,7 @@
// we update the parent session for the REGISTER so that the CSeq is
correctly increased
// if the session is stored
if(parentSession != null &&
Request.REGISTER.equals(originalMethod)) {
-
parentSession.setSessionCreatingTransaction(sessionCreatingTransaction);
+
parentSession.setSessionCreatingTransactionRequest(message);
}
}
}
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/B2buaHelperImpl.java
Thu Mar 4 07:08:32 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/B2buaHelperImpl.java
Mon Mar 8 05:18:31 2010
@@ -434,7 +434,11 @@
if(!sipSession.isValidInternal()) {
throw new IllegalArgumentException("sip session " + sipSession.getId()
+ " is invalid !");
}
- final SipServletRequestImpl sipServletRequestImpl =
sipSession.getSessionCreatingTransactionRequest();
+ final SipServletMessageImpl sipServletMessageImpl =
sipSession.getSessionCreatingTransactionRequest();
+ if(sipServletMessageImpl instanceof SipServletRequestImpl) {
+ throw new IllegalStateException("session creating transaction message
is not a request !");
+ }
+ final SipServletRequestImpl sipServletRequestImpl =
(SipServletRequestImpl) sipServletMessageImpl;
if(RoutingState.FINAL_RESPONSE_SENT.equals(sipServletRequestImpl.getRoutingState()))
{
throw new IllegalStateException("subsequent response is inconsistent
with an already sent response. a Final response has already been sent ! ");
}
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/MobicentsSipSessionFacade.java
Thu Mar 4 07:08:32 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/MobicentsSipSessionFacade.java
Mon Mar 8 05:18:31 2010
@@ -22,7 +22,6 @@
import javax.sip.Dialog;
import javax.sip.SipException;
import javax.sip.Transaction;
-import javax.sip.message.Request;
import org.apache.log4j.Logger;
import
org.mobicents.servlet.sip.core.session.MobicentsSipApplicationSession;
@@ -247,7 +246,7 @@
return getSipSession().getSessionCreatingDialog();
}
- public SipServletRequestImpl getSessionCreatingTransactionRequest() {
+ public SipServletMessageImpl getSessionCreatingTransactionRequest() {
return getSipSession().getSessionCreatingTransactionRequest();
}
@@ -327,8 +326,8 @@
getSipSession().setSessionCreatingDialog(dialog);
}
- public void setSessionCreatingTransaction(Transaction transaction) {
- getSipSession().setSessionCreatingTransaction(transaction);
+ public void setSessionCreatingTransactionRequest(SipServletMessageImpl
message) {
+ getSipSession().setSessionCreatingTransactionRequest(message);
}
public void setSipSessionAttributeMap(
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletMessageImpl.java
Thu Jan 14 02:48:39 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletMessageImpl.java
Mon Mar 8 05:18:31 2010
@@ -978,7 +978,7 @@
SipSessionKey sessionKey =
SessionManagerUtil.getSipSessionKey(sipApplicationSessionImpl.getKey().getId(),
currentApplicationName, message, false);
session =
((SipManager)sipApplicationSessionImpl.getSipContext().getManager()).getSipSession(sessionKey,
create,
sipFactoryImpl,
sipApplicationSessionImpl);
- session.setSessionCreatingTransaction(transaction);
+ session.setSessionCreatingTransactionRequest(this);
sessionKey = session.getKey();
}
if(session != null) {
@@ -1664,4 +1664,6 @@
return listeningPoint.getPort();
}
}
-}
+
+ public abstract void cleanUp();
+}
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletRequestImpl.java
Mon Mar 8 04:40:29 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletRequestImpl.java
Mon Mar 8 05:18:31 2010
@@ -1028,10 +1028,9 @@
// Notice that the tx appplication data is
cached in the request
// copied over to the tx so it can be quickly
accessed when response
// arrives.
-
ctx.setApplicationData(this.transactionApplicationData);
- session.setSessionCreatingTransaction(ctx);
-
+
ctx.setApplicationData(this.transactionApplicationData);
super.setTransaction(ctx);
+
session.setSessionCreatingTransactionRequest(this);
} else if (Request.PRACK.equals(request.getMethod())) {
final SipProvider sipProvider =
sipNetworkInterfaceManager.findMatchingListeningPoint(
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletResponseImpl.java
Thu Mar 4 07:08:32 2010
+++
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletResponseImpl.java
Mon Mar 8 05:18:31 2010
@@ -681,5 +681,10 @@
throw new IllegalArgumentException("Encoding " + enc + " not valid",
ex);
}
+ }
+
+ @Override
+ public void cleanUp() {
+
}
}