Revision: 20294
Author:   [email protected]
Date:     Mon Sep 12 11:46:24 2011
Log:      Update Issue 2821
Update Issue 2474

Fixing the response being delivered twice.

The Javadoc and Spec don't actually say that doResponse should call doBranchResponse, doBranchResponse is actually called directly so the code for that is moved over to the service method so that people overriding doResponse don't get the same response event delivered twice.
http://code.google.com/p/mobicents/source/detail?r=20294

Modified:
/trunk/servers/sip-servlets/sip-servlets-core-api/src/main/java/org/mobicents/servlet/sip/core/MobicentsSipFactory.java /trunk/servers/sip-servlets/sip-servlets-core-api/src/main/java/org/mobicents/servlet/sip/core/proxy/MobicentsProxyBranch.java /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipFactoryImpl.java /trunk/servers/sip-servlets/sip-servlets-spec/src/main/java/javax/servlet/sip/SipServlet.java /trunk/servers/sip-servlets/sip-servlets-test-suite/applications/proxy-sip-servlet/src/main/java/org/mobicents/servlet/sip/testsuite/ProxySipServlet.java

=======================================
--- /trunk/servers/sip-servlets/sip-servlets-core-api/src/main/java/org/mobicents/servlet/sip/core/MobicentsSipFactory.java Thu Sep 8 06:23:02 2011 +++ /trunk/servers/sip-servlets/sip-servlets-core-api/src/main/java/org/mobicents/servlet/sip/core/MobicentsSipFactory.java Mon Sep 12 11:46:24 2011
@@ -21,6 +21,8 @@
  */
 package org.mobicents.servlet.sip.core;

+import org.mobicents.javax.servlet.sip.SipFactoryExt;
+

 /**
* Extension of the SipFactory interface from Sip Servlets Spec giving access to the sip application dispatcher
@@ -28,7 +30,7 @@
  * @author [email protected]
  *
  */
-public interface MobicentsSipFactory {
+public interface MobicentsSipFactory extends SipFactoryExt {
        /**
         * Retrieves the Sip Application Dispatcher
         * @return the Sip Application Dispatcher
=======================================
--- /trunk/servers/sip-servlets/sip-servlets-core-api/src/main/java/org/mobicents/servlet/sip/core/proxy/MobicentsProxyBranch.java Thu Sep 8 06:23:02 2011 +++ /trunk/servers/sip-servlets/sip-servlets-core-api/src/main/java/org/mobicents/servlet/sip/core/proxy/MobicentsProxyBranch.java Mon Sep 12 11:46:24 2011
@@ -54,7 +54,12 @@
        MobicentsSipServletRequest getPrackOriginalRequest();

        void setResponse(MobicentsSipServletResponse sipServletResponse);
-
+       /**
+ * A callback. Here we receive all responses from the proxied requests we have sent.
+        *
+        * @param response
+        * @throws DispatcherException
+        */
void onResponse(MobicentsSipServletResponse sipServletResponse, int status) throws DispatcherException;

        void proxySubsequentRequest(MobicentsSipServletRequest 
sipServletRequest);
=======================================
--- /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipFactoryImpl.java Thu Sep 8 02:18:19 2011 +++ /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipFactoryImpl.java Mon Sep 12 11:46:24 2011
@@ -65,6 +65,7 @@

 import org.apache.log4j.Logger;
 import org.mobicents.ha.javax.sip.SipLoadBalancer;
+import org.mobicents.javax.servlet.sip.SipFactoryExt;
 import org.mobicents.servlet.sip.JainSipUtils;
 import org.mobicents.servlet.sip.SipFactories;
 import org.mobicents.servlet.sip.address.AddressImpl;
@@ -89,7 +90,7 @@
 import org.mobicents.servlet.sip.security.AuthInfoImpl;
 import org.mobicents.servlet.sip.startup.StaticServiceHolder;

-public class SipFactoryImpl implements MobicentsSipFactory, Externalizable { +public class SipFactoryImpl implements MobicentsSipFactory, Externalizable {

        private static final long serialVersionUID = 1L;
        private static final Logger logger = 
Logger.getLogger(SipFactoryImpl.class
@@ -888,4 +889,19 @@
        public void setRouteOrphanRequests(boolean routeOrphanRequets) {
                this.routeOrphanRequests = routeOrphanRequets;
        }
-}
+       @Override
+       public SipServletRequest createRequest(SipApplicationSession appSession,
+                       String method, Address from, Address to) {
+ throw new UnsupportedOperationException("Use the one createRequest(SipApplicationSession appSession, String method, Address from, Address to, String handler) method instead");
+       }
+       @Override
+       public SipServletRequest createRequest(SipApplicationSession appSession,
+                       String method, String from, String to) throws 
ServletParseException {
+ throw new UnsupportedOperationException("Use the one createRequest(SipApplicationSession appSession, String method, String from, String to, String handler) method instead");
+       }
+       @Override
+       public SipServletRequest createRequest(SipApplicationSession appSession,
+                       String method, URI from, URI to) {
+ throw new UnsupportedOperationException("Use the one createRequest(SipApplicationSession appSession, String method, URI from, URI to, String handler) method instead");
+       }
+}
=======================================
--- /trunk/servers/sip-servlets/sip-servlets-spec/src/main/java/javax/servlet/sip/SipServlet.java Thu Apr 28 11:18:14 2011 +++ /trunk/servers/sip-servlets/sip-servlets-spec/src/main/java/javax/servlet/sip/SipServlet.java Mon Sep 12 11:46:24 2011
@@ -269,18 +269,14 @@
        int status = resp.getStatus();
                if (status < 200) {
                        doProvisionalResponse(resp);
-               } else {
-                       if(resp.isBranchResponse()) {
-                               doBranchResponse(resp);
-                       } else {
-                               if (status < 300) {
-                                       doSuccessResponse(resp);
-                               } else if (status < 400) {
-                                       doRedirectResponse(resp);
-                               } else {
-                                       doErrorResponse(resp);
-                               }
-                       }
+               } else {
+                       if (status < 300) {
+                               doSuccessResponse(resp);
+                       } else if (status < 400) {
+                               doRedirectResponse(resp);
+                       } else {
+                               doErrorResponse(resp);
+                       }
                }
     }

@@ -331,7 +327,12 @@
        if (req != null) {
                        doRequest((SipServletRequest) req);
                } else {
-                       doResponse((SipServletResponse) resp);
+                       SipServletResponse response = (SipServletResponse)resp;
+                       if(response.isBranchResponse()) {
+                               doBranchResponse(response);
+                       } else {
+                               doResponse(response);
+                       }
                }
     }

=======================================
--- /trunk/servers/sip-servlets/sip-servlets-test-suite/applications/proxy-sip-servlet/src/main/java/org/mobicents/servlet/sip/testsuite/ProxySipServlet.java Thu Aug 25 07:44:47 2011 +++ /trunk/servers/sip-servlets/sip-servlets-test-suite/applications/proxy-sip-servlet/src/main/java/org/mobicents/servlet/sip/testsuite/ProxySipServlet.java Mon Sep 12 11:46:24 2011
@@ -400,10 +400,10 @@
SipFactory sipFactory = (SipFactory) getServletContext().getAttribute(SIP_FACTORY);
                SipFactoryExt ext = (SipFactoryExt)sipFactory;
                if(!ext.isRouteOrphanRequests()) { // not to break the orphan 
test
-                       long delta = Math.abs(System.currentTimeMillis() - 
lastOKstamp);
-                       if(response.getStatus() == 200) {
-                               new Exception().printStackTrace();
+                       long delta = Math.abs(System.currentTimeMillis() - 
lastOKstamp);
+                       if(response.getStatus() == 200) {
                                if(delta<20) {
+                                       new Exception().printStackTrace();
                                        fail = true;
throw new ServletException("Problem with double response delta=" + delta + "\n1:" + oldResp + "\n2:"
                                                        + response);

Reply via email to