3.1.6 - 2023-08-11


  • Optionally redact DTMF digits from INFO application/dtmf-relay bodies, in traces sent to SAS. This is to prevent sensitive information leaking via SAS. Enabled by the SAS:redact_dtmf configuration property. (#824870)

3.1.4 - 2023-06-14


  • Added configurable encoding of multi-valued headers. Most multi-valued headers can be encoded as a comma-separated list, or with each value on a separate header line (RFC 3261 ยง7.3). The SIP RA understands both forms, but always uses list encoding when sending messages. This default encoding can be now overridden per header by setting the JVM system property opencloud.sip.header.<lowercase-header-name>.useListEncoding to true (default) or false. For example, opencloud.sip.header.diversion.useListEncoding=false will force the RA to encode Diversion headers with each value on a separate header line. (#668579)


  • Fixed a bug causing requests to fail if they failed over to a backup node, and had to switch to TCP because the request exceeded the maximum UDP request size. (#468292)

  • Updated the DiversionHeader implementation to implement ExtensionHeader, for backward compatibility with applications that have not been updated to use DiversionHeader. (#499122)

  • Ensure that AddressFactory.createURI(String) and AddressFactory.createAddress(String) parse the complete input string, rather than ignoring invalid characters after the URI or Address. (#474299)

  • When sending requests with a Record-Route header addressing the sending node, update the Record-Route’s transport parameter (if present) to match the transport selected for the request. (#176280)

  • Exclude duplicate addresses when resolving next-hop addresses for a request. (#176196)

3.1.3 - 2022-12-20


  • Use the correct scope for SIP_ALL_REGISTER_MARKER SAS marker. The incorrect scope was causing correlation of different REGISTER requests into a single SAS trace. (#338926)

  • Fixed a case in the SIP RA where ACK requests incoming on a dialog would be dropped if a new INVITE request had been sent on the dialog before the ACK arrived. The RA will now refuse to send new INVITE requests on a dialog that is waiting to receive an ACK for an earlier INVITE by throwing a RequestPendingException. (#268568)

  • Fixed a problem where the SIP RA does not cache DNS responses when querying an IP address. Set min TTL to 30s (#255919)

  • SIP RA’s Netty DNS resolver should use default negative TTL, same as JDK’s resolver for compatibility with older version of resolver. Use JDK dns resolver default for negative ttl. (#256372)

3.1.1 - 2022-09-01

Note Release versions now have three components, not four.
This release requires Rhino 3.1 or later.

SNMP Static OIDs

SIP now uses SNMP Static OIDs (added in Rhino 3.1). For more information see Static OID introduction.


  • Use Netty based DNS resolver from common instead of one based on Dnsjava. (SIP-582)


  • All open source libraries used by this resource adaptor have been updated to the latest available version, including:

    • Netty to 4.1.70.Final.

    • Guava to 30.1.1-jre. - 2022-08-08


  • Add full support for the SIP Diversion header as described in RFC 5806. (#219906) - 2022-07-15


  • Fixed exception that could occur when creating an upstream forked dialog. (#241819) - 2022-06-13


  • When cleaning up transactions after a dialog activity ends, don’t remove client transactions that are going to end automatically anyway. (SIP-604)

  • Fixed issue (triggered by SIP-604 above) where the SIP RA could erroneously generate ACK & BYE for non-INVITE responses arriving with no transaction. (SIP-603)

  • Fixed bug in Timer C behaviour where INVITE client transactions would not be completely removed if there was no final response. (#211113) - 2022-01-25

No changes. - 2021-10-14


  • Fixed an issue where the SIP stack would prematurely terminate an INVITE transaction if the TCP connection to the UAS was closed after receiving a 1xx response. (SIP-586)

  • Ensure that Dialog activities remove any incomplete mid-dialog transactions when the Dialog activity is ended first. (SIP-590)

  • Added configurable timer behaviour to ensure all types of SIP transaction are cleaned up. See SIP RA Features. (SIP-591)

    • New ServerTransactionTimeoutEnabled property automatically cleans up server transactions when a service is unable to send a final response.

    • New Invite:TimerC property cleans up long-lived INVITE client or server transactions that have not seen a provisional response for some time.

  • Add support for SIP URIs using "transport=tls". (SIP-592)

    • When a "transport=tls" SIP URI is used for routing a request, the stack will select the TLS transport, and, if DNS SRV procedures are used, lookup the matching "_sips._tcp" SRV records.

    • Added OCSleeSipProvider.getLocalSipURI(String transport, boolean secure) to simplify creating local SIP and SIPS URIs. - 2021-09-01


  • Improved logging, and added stats and alarms for when servers are added to or removed from the block list. Logging and alarms will include the address of the server that has been blocked, as well as the Call-ID of the session that caused it to become blocked. (SIP-579, SIP-581)

  • Fixed an issue where a message that failed to send could be reported to SAS as sent. (SIP-587)

  • Added support for RFC 4320 automatic 100 Trying responses for non-INVITE requests. The SIP RA now sends 100 Trying responses for non-INVITE requests, if no other response was sent after 3500ms. This is to prevent clients from prematurely failing over or marking the SIP RA as unavailable, when the SIP RA is waiting for a response from a downstream server. Configured with properties NonInvite:TryingTimer and NonInvite:TryingTimerTCP. (SIP-516)

    Note This is a change to the default behaviour. The previous behaviour can be restored by setting the config property NonInvite:TryingTimer to -1. - 2021-05-10


  • Updated transaction statistics so they can be grouped by method. (SIS-1500) - 2020-12-01


  • Tracing improvements when servers are blocked and fail over handling. (SIP-566)

  • Improve block list behaviour on transaction timeout (Timer F) for non-INVITE transactions. (SIP-531)

    • Only block a server on non-INVITE transaction timeout if no 1xx has been received.

  • The target address is no longer blocked when the RFC3263:failover_timer fires for a transaction. (SIP-563)

  • When doing last-resort attempts during RFC3263 failover, choose the highest priority node as the one to try, rather than the lowest priority (SIP-559)

  • Add config property RFC3263:blacklist_on_transaction_timeout. Specifies whether to block addresses on SIP transaction timeout. (SIP-549)

  • Fixed a race condition that could lead to empty or incorrect header values being encoded. (SIP-556)

  • Fixed an issue when checking if a SIP URI matched a local address. URIs containing a valid SRV or NAPTR name may not have matched in some cases. (SIP-557)

  • Updated DNS resolver to use timeout and attempts options configured in the host’s /etc/resolv.conf file, or the RES_OPTIONS environment variable, if it exists. (SIP-553)

  • Fixed encoding of comments in User-Agent, Server and Retry-After headers. (SIP-568)

  • Fixed TLS client authentication behaviour; "NEED" mode was not being applied. (SIP-567) - 2020-09-08


  • This release is built on and requires JDK 11. It requires Rhino 3.0 or later releases.

  • Fixed parsing of P-Access-Network-Info headers to handle extension parameters in either RFC 7315 or RFC 7913 form. (SIP-546) - 2020-02-25


  • Fixed a ClassCastException when using the SleeSipProvider.acceptCancel method. (SIP-541)

  • When multiple local UDP endpoints are present, ensure the best matching endpoint is selected when sending a message. (SIP-542)

  • Fixed error that could cause rel100 state for late PRACKs to be lost. (SIP-543) - 2019-10-23


  • Fixed skewed SRV balancing when using low weighted values (SIP-501).

  • Enabled EDNS0 support (SIP-526)

  • Restored SAS trail during replicated failover (VOLTE-7370)

  • Remove potential deadlock by ensuring that the stack never blocks waiting for an operation to complete on an event loop thread. (SIP-532)

  • Fixed an incorrect loop that could lead to a stuck thread when storing replicated dialog state. (SIP-538)

  • Fixed implementation of Privacy header so that the critical priv-value is always encoded last, as per RFC3323. (SIP-535) - 2019-07-31


  • Add config property RFC3263:fallback_to_blacklist_address to allow blacklisted addresses to be used as a last resort. (SIP-530) - 2019-07-29


  • Peers will no longer be blacklisted on 503 responses. Also, retries to alternate peers will be limited to a max of 2 or 10% of all SRV records. If all retries are unsuccessful, a 504 will be returned. (VOLTE-7087)

  • Do not try to use a blacklisted address as last resort when no addresses are available, just fail the request. (SIP-530) - 2019-07-08


  • Dialog activities respect the Refer-Sub header in REFER responses. If Refer-Sub=false, the implicit refer subscription is not created. If the REFER was an initial request, the dialog activity is ended. (SIP-528) - 2019-05-27


  • Fixed DNS NAPTR record service matching to be case-insensitive. (SIP-525)

  • Fixed a race condition that could occur when multiple threads attempted to parse the same header object in a message. (SIP-527) - 2019-02-04


  • Fixed a race that could occur when a persistent incoming connection was replaced by a new connection with the same flow ID, causing the new connection’s entry to be removed. (SIP-517)

  • Relaxed address parsing to permit no whitespace between an unquoted display-name and the URI, as per RFC 3261 errata https://www.rfc-editor.org/errata/eid5598. (SIP-521)