Revision: dec7422f3808
Author: Jean Deruelle <[email protected]>
Date: Fri Dec 14 09:38:28 2012
Log: Update Issue 184
Committing patch + non regression test
http://code.google.com/p/sipservlets/source/detail?r=dec7422f3808
Modified:
/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/B2buaHelperImpl.java
/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/TestSipListener.java
/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/b2bua/B2BUATcpUdpTest.java
/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/reinvite/CallForwardingB2BUAReInviteJunitTest.java
=======================================
---
/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/B2buaHelperImpl.java
Wed Nov 14 09:00:41 2012
+++
/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/B2buaHelperImpl.java
Fri Dec 14 09:38:28 2012
@@ -401,40 +401,46 @@
String headerName = headerNames.next();
if(!JainSipUtils.SYSTEM_HEADERS.contains(headerName)
&& !headerName.equalsIgnoreCase(ContactHeader.NAME)
&& !headerName.equalsIgnoreCase(FromHeader.NAME)
&& !headerName.equalsIgnoreCase(ToHeader.NAME)) {
- HeaderExt origHeader = (HeaderExt)
origMessage.getHeader(headerName);
+ // Issue 184 :
http://code.google.com/p/sipservlets/issues/detail?id=184
+ // Not all headers are copied for subsequent requests using
B2buaHelper.createRequest(session, request, map)
+ // Fix by Alexander Saveliev, iterate through
all headers and copy them
+ ListIterator<Header> origHeaderIt =
origMessage.getHeaders(headerName);
ListIterator<Header> subsHeaderIt =
subsequentMessage.getHeaders(headerName);
- // Issue
http://code.google.com/p/mobicents/issues/detail?id=2094
- // B2b re-invite for authentication will duplicate Remote-Party-ID
header
- // checking if the subsequent request and original request share the
same header name and value
- // before copying to avoid duplicating the
headers
- boolean headerNameValueAlreadyPresent = false;
- while (subsHeaderIt.hasNext() &&
!headerNameValueAlreadyPresent) {
- HeaderExt subsHeader = (HeaderExt)
subsHeaderIt.next();
-
if(origHeader.getValue().equals(subsHeader.getValue())) {
- headerNameValueAlreadyPresent =
true;
- }
- }
- if(!headerNameValueAlreadyPresent) {
- if(origHeader != null) {
-
subsequentMessage.addHeader(((Header)origHeader.clone()));
- if(logger.isDebugEnabled()) {
- logger.debug("original header " + origHeader + " copied in the new
subsequent request");
- }
- } else {
- // Issue 2500
http://code.google.com/p/mobicents/issues/detail?id=2500
- // B2buaHelper.createRequest() throws a NullPointerException if the
request contains an empty header
- if(logger.isDebugEnabled()) {
- logger.debug("trying to copy original header name " + headerName
+ " into the new subsequent request with an empty value");
- }
- try {
-
subsequentMessage.addHeader(sipFactoryImpl.getHeaderFactory().createHeader(headerName, ""));
- } catch (ParseException e) {
-
if(logger.isDebugEnabled()) {
- logger.debug("couldn't copy original header name " + headerName
+ " into the new subsequent request with an empty value");
- }
- }
- }
- }
+ while (origHeaderIt.hasNext()) {
+ HeaderExt origHeader = (HeaderExt) origHeaderIt.next();
+ // Issue
http://code.google.com/p/mobicents/issues/detail?id=2094
+ // B2b re-invite for authentication will duplicate
Remote-Party-ID header
+ // checking if the subsequent request and original
request share the same header name and value
+ // before copying to avoid duplicating the headers
+ boolean headerNameValueAlreadyPresent = false;
+ while (subsHeaderIt.hasNext()
&& !headerNameValueAlreadyPresent) {
+ HeaderExt subsHeader = (HeaderExt)
subsHeaderIt.next();
+ if
(origHeader.getValue().equals(subsHeader.getValue())) {
+ headerNameValueAlreadyPresent = true;
+ }
+ }
+ if (!headerNameValueAlreadyPresent) {
+ if (origHeader != null) {
+ subsequentMessage.addHeader(((Header)
origHeader.clone()));
+ if (logger.isDebugEnabled()) {
+ logger.debug("original header " +
origHeader + " copied in the new subsequent request");
+ }
+ } else {
+ // Issue 2500
http://code.google.com/p/mobicents/issues/detail?id=2500
+ // B2buaHelper.createRequest() throws a
NullPointerException if the request contains an empty header
+ if (logger.isDebugEnabled()) {
+ logger.debug("trying to copy original
header name " + headerName + " into the new subsequent request with an
empty value");
+ }
+ try {
+
subsequentMessage.addHeader(sipFactoryImpl.getHeaderFactory().createHeader(headerName, ""));
+ } catch (ParseException e) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("couldn't copy original
header name " + headerName + " into the new subsequent request with an
empty value");
+ }
+ }
+ }
+ }
+ }
}
}
}
=======================================
---
/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/TestSipListener.java
Thu Oct 18 09:27:27 2012
+++
/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/TestSipListener.java
Fri Dec 14 09:38:28 2012
@@ -66,6 +66,7 @@
import javax.sip.address.SipURI;
import javax.sip.address.TelURL;
import javax.sip.address.URI;
+import javax.sip.header.AllowHeader;
import javax.sip.header.AuthenticationInfoHeader;
import javax.sip.header.AuthorizationHeader;
import javax.sip.header.CSeqHeader;
@@ -2318,7 +2319,12 @@
if(headerNames != null) {
for(int q=0; q<headerNames.length; q++) {
- Header h = protocolObjects.headerFactory.createHeader(headerNames[q],
headerContents[q]);
+ Header h = null;
+
if(headerNames[q].equalsIgnoreCase(AllowHeader.NAME)) {
+ h =
protocolObjects.headerFactory.createAllowHeader(headerContents[q]);
+ } else {
+ h = protocolObjects.headerFactory.createHeader(headerNames[q],
headerContents[q]);
+ }
if(setHeader) {
request.setHeader(h);
} else {
=======================================
---
/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/b2bua/B2BUATcpUdpTest.java
Tue Sep 11 10:25:24 2012
+++
/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/b2bua/B2BUATcpUdpTest.java
Fri Dec 14 09:38:28 2012
@@ -27,6 +27,7 @@
import javax.sip.ListeningPoint;
import javax.sip.SipProvider;
import javax.sip.address.SipURI;
+import javax.sip.header.AllowHeader;
import javax.sip.header.CallIdHeader;
import javax.sip.header.ContactHeader;
import javax.sip.header.Header;
@@ -118,13 +119,14 @@
SipURI toAddress =
senderProtocolObjects.addressFactory.createSipURI(
toUser, toSipAddress);
- sender.sendSipRequest("INVITE", fromAddress, toAddress, null, null,
false, new String[] {UserAgentHeader.NAME, "extension-header"}, new
String[] {"TestSipListener UA", "extension-sip-listener"}, true);
+ sender.sendSipRequest("INVITE", fromAddress, toAddress, null, null,
false, new String[] {UserAgentHeader.NAME, "extension-header",
AllowHeader.NAME}, new String[] {"TestSipListener
UA", "extension-sip-listener", "INVITE, CANCEL, BYE, ACK, OPTIONS"}, true);
Thread.sleep(TIMEOUT);
assertTrue(sender.getOkToByeReceived());
assertTrue(receiver.getByeReceived());
CallIdHeader receiverCallIdHeader =
(CallIdHeader)receiver.getInviteRequest().getHeader(CallIdHeader.NAME);
CallIdHeader senderCallIdHeader =
(CallIdHeader)sender.getInviteRequest().getHeader(CallIdHeader.NAME);
ListIterator<UserAgentHeader> userAgentHeaderIt =
receiver.getInviteRequest().getHeaders(UserAgentHeader.NAME);
+ ListIterator<AllowHeader> allowHeaderIt =
receiver.getInviteRequest().getHeaders(AllowHeader.NAME);
int i = 0;
while (userAgentHeaderIt.hasNext()) {
UserAgentHeader userAgentHeader = (UserAgentHeader)
userAgentHeaderIt
@@ -157,7 +159,13 @@
assertTrue(userAgentHeader.toString().trim().endsWith("CallForwardingB2BUASipServlet"));
i++;
}
- assertEquals(1, i);
+ assertEquals(1, i);
+ i = 0;
+ while (allowHeaderIt.hasNext()) {
+ allowHeaderIt.next();
+ i++;
+ }
+ assertEquals(5, i);
contactHeaderIt =
receiver.getByeRequestReceived().getHeaders(ContactHeader.NAME);
i = 0;
while (contactHeaderIt.hasNext()) {
=======================================
---
/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/reinvite/CallForwardingB2BUAReInviteJunitTest.java
Mon Aug 13 12:29:49 2012
+++
/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/reinvite/CallForwardingB2BUAReInviteJunitTest.java
Fri Dec 14 09:38:28 2012
@@ -25,11 +25,14 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.ListIterator;
import javax.sip.SipProvider;
import javax.sip.address.SipURI;
+import javax.sip.header.AllowHeader;
import javax.sip.header.Header;
import javax.sip.header.MaxForwardsHeader;
+import javax.sip.header.UserAgentHeader;
import javax.sip.message.Response;
import org.apache.log4j.Logger;
@@ -157,7 +160,7 @@
SipURI toAddress =
senderProtocolObjects.addressFactory.createSipURI(
toUser, toSipAddress);
- sender.sendSipRequest("INVITE", fromAddress, toAddress, null, null,
false);
+ sender.sendSipRequest("INVITE", fromAddress, toAddress, null, null,
false, new String[] {AllowHeader.NAME}, new String[] {"INVITE, CANCEL, BYE,
ACK, OPTIONS"}, true);
Thread.sleep(TIMEOUT);
assertTrue(receiver.isInviteReceived());
assertTrue(receiver.isAckReceived());
@@ -166,10 +169,21 @@
// Non Regression test for
http://code.google.com/p/mobicents/issues/detail?id=1490
// B2buaHelper.createRequest does not decrement Max-forwards
assertEquals(69, maxForwardsHeader.getMaxForwards());
+
+ ListIterator<AllowHeader> allowHeaderIt =
receiver.getInviteRequest().getHeaders(AllowHeader.NAME);
+ int i = 0;
+ while (allowHeaderIt.hasNext()) {
+ allowHeaderIt.next();
+ i++;
+ }
+ assertEquals(5, i);
Header methodHeader =
receiverProtocolObjects.headerFactory.createHeader("Supported", "");
+ // Non Regression for Issue 184
http://code.google.com/p/sipservlets/issues/detail?id=184
+ Header allowHeader =
receiverProtocolObjects.headerFactory.createAllowHeader("INVITE, CANCEL,
BYE, ACK, OPTIONS");
List<Header> headers = new ArrayList<Header>();
headers.add(methodHeader);
+ headers.add(allowHeader);
sender.sendInDialogSipRequest("INVITE", null, null, null,
headers, null);
receiver.setInviteReceived(false);
@@ -177,6 +191,13 @@
Thread.sleep(TIMEOUT);
assertTrue(receiver.isInviteReceived());
assertTrue(receiver.isAckReceived());
+ allowHeaderIt =
receiver.getInviteRequest().getHeaders(AllowHeader.NAME);
+ i = 0;
+ while (allowHeaderIt.hasNext()) {
+ allowHeaderIt.next();
+ i++;
+ }
+ assertEquals(5, i);
sender.sendInDialogSipRequest("BYE", null, null, null, null,
null);
Thread.sleep(TIMEOUT);
assertTrue(receiver.getByeReceived());