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() {
+
        }
 }

Reply via email to