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

Reply via email to