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);