Revision: 15904
Author: [email protected]
Date: Mon Dec 20 13:43:10 2010
Log: Update Issue 2173
Adding non regression test
http://code.google.com/p/mobicents/source/detail?r=15904
Modified:
/trunk/servers/sip-servlets/sip-servlets-test-suite/applications/shootist-sip-servlet-auth/src/main/java/org/mobicents/servlet/sip/testsuite/ShootistSipServletAuth.java
/trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/TestSipListener.java
/trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/security/ShootistSipServletAuthTest.java
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-test-suite/applications/shootist-sip-servlet-auth/src/main/java/org/mobicents/servlet/sip/testsuite/ShootistSipServletAuth.java
Fri Nov 26 06:48:23 2010
+++
/trunk/servers/sip-servlets/sip-servlets-test-suite/applications/shootist-sip-servlet-auth/src/main/java/org/mobicents/servlet/sip/testsuite/ShootistSipServletAuth.java
Mon Dec 20 13:43:10 2010
@@ -36,6 +36,7 @@
import javax.sip.ListeningPoint;
import org.apache.log4j.Logger;
+import org.mobicents.javax.servlet.sip.SipServletRequestExt;
public class ShootistSipServletAuth
extends SipServlet
@@ -65,14 +66,21 @@
// Avoid re-sending if the auth repeatedly fails.
if(!"true".equals(getServletContext().getAttribute("FirstResponseRecieved")))
{
+ String fromString =
response.getFrom().getURI().toString();
+
getServletContext().setAttribute("FirstResponseRecieved",
"true");
AuthInfo authInfo = sipFactory.createAuthInfo();
authInfo.addAuthInfo(response.getStatus(), "sip-servlets-realm", "user", "pass");
SipServletRequest challengeRequest =
response.getSession().createRequest(
response.getRequest().getMethod());
- challengeRequest.addAuthHeader(response,
authInfo);
+ boolean cacheCredentials = false;
+ if(fromString.contains("cache-credentials")) {
+ cacheCredentials = true;
+ }
+ logger.info("cache Credentials : " +
cacheCredentials);
+ ((SipServletRequestExt)challengeRequest).addAuthHeader(response,
authInfo, cacheCredentials);
challengeRequest.send();
- String fromString =
response.getFrom().getURI().toString();
+
if(fromString.contains("cancelChallenge")) {
if(fromString.contains("Before1xx")) {
try {
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/TestSipListener.java
Fri Dec 17 07:07:41 2010
+++
/trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/TestSipListener.java
Mon Dec 20 13:43:10 2010
@@ -19,6 +19,7 @@
import gov.nist.javax.sip.DialogExt;
import gov.nist.javax.sip.address.SipUri;
import gov.nist.javax.sip.header.HeaderFactoryExt;
+import gov.nist.javax.sip.header.ParameterNames;
import gov.nist.javax.sip.header.SIPETag;
import gov.nist.javax.sip.header.SIPHeaderNames;
import gov.nist.javax.sip.header.WWWAuthenticate;
@@ -52,6 +53,7 @@
import javax.sip.address.SipURI;
import javax.sip.address.TelURL;
import javax.sip.address.URI;
+import javax.sip.header.AuthenticationInfoHeader;
import javax.sip.header.AuthorizationHeader;
import javax.sip.header.CSeqHeader;
import javax.sip.header.CallIdHeader;
@@ -75,7 +77,6 @@
import javax.sip.header.SubscriptionStateHeader;
import javax.sip.header.ToHeader;
import javax.sip.header.ViaHeader;
-import javax.sip.message.Message;
import javax.sip.message.Request;
import javax.sip.message.Response;
@@ -298,6 +299,8 @@
private boolean disableSequenceNumberValidation = false;
private boolean sendCancelOn1xx = false;
+
+ private boolean testNextNonce =false;
class MyEventSource implements Runnable {
private TestSipListener notifier;
@@ -955,6 +958,12 @@
Response okResponse =
protocolObjects.messageFactory.createResponse(
Response.OK, request);
+ if(testNextNonce) {
+ AuthenticationInfoHeader authenticationInfoHeader =
protocolObjects.headerFactory.createAuthenticationInfoHeader("");
+
authenticationInfoHeader.setNextNonce(dsam.generateNonce());
+
authenticationInfoHeader.removeParameter(ParameterNames.RESPONSE_AUTH);
+ okResponse.addHeader(authenticationInfoHeader);
+ }
ToHeader toHeader = (ToHeader)
okResponse.getHeader(ToHeader.NAME);
if (toHeader.getTag() == null) {
toHeader.setTag(Integer.toString(new
Random().nextInt(10000000)));
@@ -1137,6 +1146,12 @@
ViaHeader viaHeader =
(ViaHeader)getFinalResponse().getHeader(ViaHeader.NAME);
viaHeader.setParameter("testAckViaParam",
"true");
}
+ if(testNextNonce) {
+ AuthenticationInfoHeader authenticationInfoHeader =
protocolObjects.headerFactory.createAuthenticationInfoHeader("");
+
authenticationInfoHeader.setNextNonce(dsam.generateNonce());
+
authenticationInfoHeader.removeParameter(ParameterNames.RESPONSE_AUTH);
+
getFinalResponse().addHeader(authenticationInfoHeader);
+ }
ToHeader toHeader = (ToHeader)
getFinalResponse().getHeader(ToHeader.NAME);
if(toHeader.getTag() == null) {
toHeader.setTag(TO_TAG); // Application
is supposed to set.
@@ -1602,7 +1617,9 @@
((WWWAuthenticate) (response
.getHeader(SIPHeaderNames.WWW_AUTHENTICATE))),
"user",
- "pass");
+ "pass",
+ ((WWWAuthenticate) (response
+
.getHeader(SIPHeaderNames.WWW_AUTHENTICATE))).getNonce());
requestauth.addHeader(authorization);
} catch (ParseException pa) {
@@ -2859,5 +2876,9 @@
public boolean isUseToURIasRequestUri() {
return useToURIasRequestUri;
}
+
+ public void setTestNextNonce(boolean b) {
+ this.testNextNonce = b;
+ }
}
=======================================
---
/trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/security/ShootistSipServletAuthTest.java
Fri Nov 26 06:48:23 2010
+++
/trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/security/ShootistSipServletAuthTest.java
Mon Dec 20 13:43:10 2010
@@ -145,6 +145,34 @@
}
assertEquals("The stale auth header should not be taken into account",
1, proxyAuthHeaderNumber);
}
+
+ /*
+ * Non regression test for Issue 2173
+ * http://code.google.com/p/mobicents/issues/detail?id=2173
+ * Handle Header [Authentication-Info: nextnonce="xyz"] in sip
authorization responses
+ */
+ public void testShootistReinviteNextNonce() throws Exception {
+// receiver.sendInvite();
+ receiverProtocolObjects =new ProtocolObjects(
+ "sender-app-send-reinvite-cache-credentials", "gov.nist", TRANSPORT,
AUTODIALOG, null, null, null);
+
+ receiver = new TestSipListener(5080, 5070, receiverProtocolObjects,
false);
+ receiver.setChallengeRequests(true);
+ receiver.setTestNextNonce(true);
+ SipProvider senderProvider = receiver.createProvider();
+
+ senderProvider.addSipListener(receiver);
+
+ receiverProtocolObjects.start();
+
+ tomcat.startTomcat();
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("from",
"sender-app-send-reinvite-cache-credentials");
+ params.put("nbSubsequentReq","4");
+ params.put("METHOD", "REGISTER");
+ deployApplication(params);
+ Thread.sleep(TIMEOUT);
+ }
/*
* Non regression test for Issue 1836