sipservlet-spec
  1. sipservlet-spec
  2. SIPSERVLET_SPEC-32

It is not 100% clear in the documentation whether an empty list for a particular header in B2BuaHelper.createRequest(..., headerMap) will clear that header out.

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.0-pr
    • Labels:
      None

      Description

      By using the B2BuaHelper.createRequest(..., headerMap) the user can create a new "b2bua:ed" request where system headers such as Route-headers can be overridden. However, the documentation is not really clear what the behavior is when you supply an empty value-list for a particular header. Consider the following example:

      Incoming INVITE which has two route headers like so:

      INVITE sip:alice@example.com SIP/2.0
      ...
      Route: <route 1>
      Route: <route 2>

      If I wanted to use the b2buahelper to create the second leg but do not want to the Route headers to be present in the new request one could assume that the following would work:

      Map<String, List<String>> headerMap = ...
      headerMap.put("Route", new ArrayList<String>());
      SipServletRequest req = helper.createRequest(origRequest, linked, headerMap);

      I would now assume that the previous two routes have been wiped out. It is not clear in the specification that this is what is supposed to happen and at least one container implementation had not implemented it this way.

        Activity

        Hide
        jonbo372 added a comment -

        Per our discussion on the weekly meeting, we do agree that a clarification is needed since there are at least two different opinions of what the current wording in the javadoc actually means.

        === Option 1 ===
        If you supply an empty list for a particular header, then that header will be removed. This is what the original entry suggests.

        === Option 2 ===
        If you supply an empty list for a particular header then the original headers and their values are preserved.

        Also, if you prefer Option 2, please specify what should happen in the following example:

        Incoming request with three X-Hello headers like so:

        INVITE sip:alice@example.com SIP/2.0
        ...
        X-Hello: hello one
        X-Hello: hello two
        X-Hello: hello three
        ...

        Map<String, List<String>> headerMap = ...
        List<String> helloHeaders = new ArrayList<String>();
        helloHeaders.add("hello world");
        headerMap.put("X-Hello", helloHeaders);
        SipServletRequest req = helper.createRequest(origRequest, linked, headerMap);

        How many X-Hello headers exists in the new request and what are their values?

        Please vote which option you prefer so that we can clarify the behavior in the javadoc and align the behavior of the containers.

        Show
        jonbo372 added a comment - Per our discussion on the weekly meeting, we do agree that a clarification is needed since there are at least two different opinions of what the current wording in the javadoc actually means. === Option 1 === If you supply an empty list for a particular header, then that header will be removed. This is what the original entry suggests. === Option 2 === If you supply an empty list for a particular header then the original headers and their values are preserved. Also, if you prefer Option 2, please specify what should happen in the following example: Incoming request with three X-Hello headers like so: INVITE sip:alice@example.com SIP/2.0 ... X-Hello: hello one X-Hello: hello two X-Hello: hello three ... Map<String, List<String>> headerMap = ... List<String> helloHeaders = new ArrayList<String>(); helloHeaders.add("hello world"); headerMap.put("X-Hello", helloHeaders); SipServletRequest req = helper.createRequest(origRequest, linked, headerMap); How many X-Hello headers exists in the new request and what are their values? Please vote which option you prefer so that we can clarify the behavior in the javadoc and align the behavior of the containers.
        Hide
        jonbo372 added a comment -

        Personally, I vote for Option 1...

        /Jonas

        Show
        jonbo372 added a comment - Personally, I vote for Option 1... /Jonas
        Hide
        echeung added a comment -

        I vote for option 1.
        Eric

        Show
        echeung added a comment - I vote for option 1. Eric
        Hide
        jverbil added a comment -

        Option 1

        Show
        jverbil added a comment - Option 1
        Hide
        wchen added a comment -

        I misread the issue at the meeting. After reading it again, yes, option 1.

        Show
        wchen added a comment - I misread the issue at the meeting. After reading it again, yes, option 1.
        Hide
        nitzann added a comment -

        Option 1

        Show
        nitzann added a comment - Option 1
        Hide
        bpulito added a comment -

        Option 1

        Show
        bpulito added a comment - Option 1
        Hide
        jonbo372 added a comment -

        Seems like there is a consensus for Option 1 so let's update the javadoc to make this clear.

        Show
        jonbo372 added a comment - Seems like there is a consensus for Option 1 so let's update the javadoc to make this clear.
        Hide
        binod added a comment -
        Show
        binod added a comment - Included the fix in the latest javadoc. https://sipservlet-spec.java.net/javadoc/2.0/draft/javax/servlet/sip/B2buaHelper.html

          People

          • Assignee:
            binod
            Reporter:
            jonbo372
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: