Using outbound arbitrary SIP headers in state tables

The values specified in siphdrtags.cfg are used in association with state table API special variable 541 (SV541) tags to set header and header values in outgoing SIP messages.

Any header specified in an SV541 tag, but not specified in siphdrtags.cfg is ignored. Headers need to be entered as tags in SV541 in the same case that they are defined in siphdrtags.cfg. For example, if siphdrtag1 is defined in siphdrtags.cfg, SIPhdrtag1 specified as a tag in SV541 is ignored.

Note: These headers will not go out on an INVITE message used during transfer processing to place a call on or off hold.

There is no checking of the effects of adding a header. It is the application developer’s responsibility to ensure that adding a header will have no adverse affects on the SIP message exchange.

Any processing errors associated with adding a SIP header to an outbound message are recorded in the standard Blueworx Voice Response errorlog. In this error case, the SIP message is sent, but without the header in error.

If a header is specified that Blueworx Voice Response would add by default to a message, the SV541 tag-supplied value is appended (preceded by a comma) to the value supplied by Blueworx Voice Response. An example of where this may prove useful is with supported or allow headers.

Up to 10 other (non-standard) valid, unique SIP headers can be added to the configuration file /usr/lpp/dirTalk/db/sys_dir/voip/siphdrtags.cfg. These headers are processed in the order in which they are defined in the file, subject to sufficient space being available in the buffer for the header data. The total limit for all headers is 512 bytes. Any subsequent non-standard SIP headers found in siphdrtags.cfg are ignored. If the same header is specified multiple times within a single INVITE message, the data from each header is appended to the first instance, separated by commas.

Multiple values of same header are not supported, so an application must combine values using a semi-colon in a single header. If multiple values of same header are supplied, the final value is used.

Headers definitions cannot be more than 31 characters long, and must not include any of the following special characters:
"#$&(),./;<=>?@\^`{|}[]

Outbound call example

  1. siphdrcfg.tag has the following line added.
    Test-Tag
    Blueworx Voice Response is then restarted to make the change effective.
  2. Make an outbound SIP call using a state table with the following action specified prior to the MakeCall action:
    AssignData(SV541, "PUT_TAG", "Test-Tag", "test data");
    
  3. The resultant outgoing INVITE message contains the following header and data:
    Test-Tag: test data

Blind Transfer example

  1. siphdrcfg.tag has the following line added.
    Test-Tag
    Blueworx Voice Response is then restarted to make the change effective.
  2. Blind transfer a SIP call using a state table with the following action specified prior to the TransferCall action:
    AssignData(SV541, "PUT_TAG", "Test-Tag", "test data");
    
  3. The resultant outgoing REFER message contains the following header and data:
    Test-Tag: test data

Blind Transfer example

  1. siphdrcfg.tag has the following line added.
    Test-Tag
    Blueworx Voice Response is then restarted to make the change effective.
  2. Attended transfer a SIP call using a state table with the following action specified prior to the initial TransferCall action:
    AssignData(SV541, "PUT_TAG", "Test-Tag", "test data");
    
  3. The resultant outgoing INVITE message contains the following header and data:
    Test-Tag: test data

Near End Disconnect example

  1. siphdrcfg.tag has the following line added.
    Test-Tag
    Blueworx Voice Response is then restarted to make the change effective.
  2. Terminate a SIP call using a state table with the following action specified prior to the CloseEverything action:
    AssignData(SV541, "PUT_TAG", "Test-Tag", "test data");
    
  3. The resultant outgoing BYE message contains the following header and data:
    Test-Tag: test data