• 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 error where was sometimes not treated as a local interface. (SIP-508)

  • Improved performance of matching addresses to local interfaces. (SIP-509, SIP-511)

  • 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)

  • 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.


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

  • 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)

  • 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.


  • 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)

  • 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)

  • 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)

  • 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)

  • 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)

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


  • Handle null addresses in connection tracing when connection not yet established. (SIP-464)

  • Check server blacklist when sending stateless requests. (SIP-469)

  • Fix for handling of SRV/NAPTR domain names in VirtualAddresses configuration. Make sure URIs containing these domain names are treated as local. (SIP-488)

  • Detect connection failures when sending ACK so that failed servers are blacklisted and subsequent requests can failover to a backup server. (SIP-503)

  • Ensure Max-Forwards is set in automatically generated ACK and BYE requests. (SIP-494)

  • Fix parsing of multi-valued headers so that commas in valid positions within a header value are not treated as header delimiters. (SIP-496)

  • Fix address parsing so that an asterisk occurring in the display name does not cause the address to be mistakenly treated as a wildcard address. (SIP-497)

  • 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)

New Features

  • Added rate limiter endpoint for initial INVITE requests. (SIP-426)

  • Automatically switch to TCP if trying to send large (> 1300 bytes) requests over UDP. Threshold may be adjusted with UDPMaxRequestSize config property. (SIP-26, SIP-446)

  • Added a configuration option to increase UDP input buffer size, for receiving large (> 2KB) UDP datagrams. Adjust with the UDPInputBufferSize config property. (SIP-427)


  • Automatically terminate dialog with ACK and BYE if an initial INVITE/2xx response is not processed by an SBB. (SIP-366, SIP-439)

  • Fixed possible deadlock when forwarding a forked response at the same time as receiving a CANCEL for the same initial INVITE request. (SIP-421)

  • Fixed issue where binary bodies in messages would incorrectly be decoded as UTF-8 when converting to strings, resulting in unexpected errors. (SIP-418)

  • Fixed handling of truncated UDP datagrams. These were not detected and rejected properly, causing decoding of subsequent UDP messages to fail. (SIP-428/SIP-434)

Note As of release 2.5.0, the SIP Resource Adaptor requires Java 7 or later.

New Features

  • Added support for the SCTP transport. (SIP-384)

  • Added support for RFC 4028 Session Timers. (http://tools.ietf.org/html/rfc4028).

  • Added support for RFC 5626 Managing Client-Initiated Connections. (http://tools.ietf.org/html/rfc5626)

  • Added a configurable F5 BIG-IP Notifier to enable/disable node pool members on RA activation/deactivation.


  • Network transport is now based on the Netty framework. (SIP-342)

  • Implement RFC 6026 (http://tools.ietf.org/html/rfc6026) updates to INVITE transactions. Transactions now remain in the Accepted state to handle INVITE or 2xx retransmits. (SIP-210)

  • Reuse same incoming connection when Dialog activities retransmit the 2xx response for an INVITE. (SIP-297)

  • Terminate transactions with 503 response if connection fails.

  • Add Reason: SIP; cause=430; text="Transport error" header to internally generated 503 error responses when a connection is closed during a client transaction.

  • Add InviteTransactionLifetime config property, to specify the maximum time an INVITE transaction activity may be active before getting removed by query liveness. (SIP-261)

  • Configurable listen backlog size, see ListenBacklog config property.

  • Include Reason header with cause code 430 (Flow Failed) when generating a REGISTER due to an incoming connection timing out or disconnecting abnormally.

API Changes

  • Added SIP Big Group RA Type 1.0. Introduces APIs for efficiently alerting and notifying large groups of subscribers.

  • Added NoAckReceivedEvent, so that SBBs can detect when a client fails to send the expected ACK for a 2xx response. (SIP-292)

  • Add RequestPendingException, thrown when a service attempts to send a re-INVITE when the dialog has already received a re-INVITE from the peer.

  • Fixed CSeq of automatically generated BYEs sent by the RA when terminating dialogs of late 2xx responses (SIP-405).

  • Removed redundant UTF-8 decode of unparsed header values when sending a message, which could fail on headers inserted by devices using invalid character sets (SIP-380).

  • Changed default UTF-8 decoding error behaviour to replace invalid characters rather than throw an exception. Default replacement character is the Unicode replacement character, "�" (U+FFFD).

  • Fixed some timer tasks that were not catching all exceptions, making it possible for an unexpected exception to stop the timer thread (SIP-381).

  • Ensure that reliable response retransmits are stopped when the final response is sent, and also allow late PRACKs to be processed rather than rejected with 481 (SIP-377).

  • Fixed forwarding of forked reliable provisional responses (SIP-382).

  • When verifying the IPAddress config property, ensure that the sip.hostname override system property is checked first before rejecting the configuration (SIP-353).

  • When verifying hostnames in VirtualAddresses config property, check for matching NAPTR and SRV records as well as address records (SIP-285).

  • Fix matching of VirtualAddresses so that addresses without port numbers will match any port (SIP-371).

  • Don’t blacklist hosts when SRV failover is disabled (SIP-372).

  • Fix deadlock that could occur when handling transaction termination (SIP-370).

  • Start forked activities in the SBB event handler transaction, so that events are suspended until transaction completes (SIP-369).

  • P-Access-Network-Info header now supports multiple values (SIP-338).

  • Fixed bug that caused 503 responses with Retry-After headers to sometimes be dropped (SIP-339).

  • Set initial RSeq from first reliable provisional response, if RSeq header is present, otherwise generate random initial RSeq as before (SIP-340).

  • Fixed incorrect RSeq generation when forwarding reliable responses using SleeSipProvider.forwardForkedResponse() (SIP-330).

  • Set dialog’s initial local sequence number from CSeq of first request sent on dialog, if available. Otherwise generate random initial sequence number as before (SIP-332).

  • Fixed potential deadlock that could occur if a forked dialog’s replicated state was accessed after a call to SleeSipProvider.forwardForkedResponse() in the same SLEE transaction (SIP-333).

  • Ignore invalid transport=tls parameter in SIPS URIs (SIP-335).

  • Reuse incoming TLS connections for outgoing requests if possible (SIP-336).

  • Ignore invalid To header when setting to-tag in error responses (SIP-299).

  • Fixed handling of late 2xx INVITE responses so that they don’t affect the current INVITE transaction (SIP-317).

  • Dialog activities now handle implicit subscriptions created by REFER (SIP-318).

  • Fixed an issue where the stack would perform the transaction terminated callback before the transaction timeout callback, resulting in timeout events not being delivered (SIP-324).

  • Added support for configuration of RA generated error responses. A default error response code and Reason Header can be set for each request type independently (SIP-327).

  • Fixed NullPointerException that occurred during RA entity removal.

  • Don’t trigger RFC3263 failover on 408 responses.

  • Send 481 response to mid-dialog requests received after the dialog has entered an ending state. Send 200 OK responses for BYEs.

  • Fixed incorrect retransmit interval for non-INVITE client txns in Proceeding state.

  • SRV records were being sorted in reverse order.

  • Fixed stack overflow that could occur when sending responses outside a transaction, such as 2xx retransmits.

  • Don’t try to set to-tag in error responses if the To header doesn’t exist.

  • Fix EnableDialogActivityTests behaviour so that the RA correctly increments the dialog local sequence number when sending OPTIONS.

  • Fixed issue that could cause the wrong message content to be read from a TCP connection.

  • Fixed possible race condition that could occur when sending BYE on a dialog that was already processing an incoming BYE.

  • Added support for automatic failover and load balancing of requests using RFC3263. See docs/features-rfc3263.html for detailed instructions.

  • Correction to earlier user=phone URI behaviour. Don’t exclude user=phone URIs when checking if a Route header is directed to an RA address.

  • Handle possible race condition when receiving BYE when dialog is already ending. Just send 200 OK in this case rather than 500.

  • Send 400 Bad Request response if Request-URI is not valid, rather than just silently dropping the request.

  • Use "503 Service Unavailable" response when rejecting requests due to rate limiting or overload. RetryAfterInterval config property may be used to set the Retry-After value in these responses.

  • Added AutomaticOptionsResponses config property. By default the RA responds to OPTIONS requests that are routed directly to the RA’s address. Now that behaviour can be disabled so applications can handle the OPTIONS request.

  • Fixed incorrect handling of extra CRLF characters received on TCP.

  • Fixed query liveness behaviour that could cause dialogs to end before they received a response to BYE.

  • Extend VirtualAddresses configuration for when the port is different to 5060. comma-separated list now includes port number: host[:port]

  • Prevent deadlocks that could occur when SBBs accessed replicated dialog state.

  • Dialog activities always insert correct CSeq and RSeq values when sending requests or reliable responses, replacing any invalid values that the application may have inserted.

  • Ensure that dialog’s local CSeq and RSeq sequence numbers are updated on send, as per JSIP API.

  • Set to-tag correctly when forwarding subsequent provisional responses in a dialog-creating transaction.

  • Fixed scalability issues with many busy TCP connections.

  • Prevent aliasing of Address objects from dialog state.

  • Ignore user=phone URIs when testing whether SIP URIs are local to the RA.

  • Fixed character decoding errors that could occur in Message.toString().

  • Fixed issue where RA fired ConnectionUpEvent when it should have fired ConnectionDownEvent.

  • Made persistent outbound connection reconnect timers configurable.

  • Fixed an issue where forked UAS dialogs could be created with an incorrect remote sequence number, causing subsequent mid-dialog requests to be rejected.

  • OCSIP Resource Adaptor

  • Fixed an issue where retransmits of reliable 1xx responses were incorrectly being fired as events, instead of getting dropped as required by RFC3262.

  • OCSIP Resource Adaptor

  • Improved logging of TCP and TLS connections.

  • Improved random ID generation.

  • OCSIP Resource Adaptor

  • Improved perfomance of header/message encoding.

  • New EnabledCipherSuites config property allows user to restrict the SSL cipher suites used by the RA.

  • Improved logging of SSL connection and handshake failures.

  • Fixed race condition that could occur when tracing entire SIP messages.

  • Fixed encoding of icid, ccf and ecf parameters in P-Charging-Vector and P-Charging-Function-Addresses.

  • Fixed source object in SIP event objects, which was incorrect in

  • OCSIP Resource Adaptor

  • SBBs may call non-I/O methods on the SleeSipProvider when the RA entity is inactive, for example accessing the SIP factories to create URIs or headers. Previously this would have resulted in an exception.

  • A rate limit can optionally be applied to new dialogs using the "inbound_initial_requests" rate limiter. Initial requests on new dialogs may be rejected, but mid-dialog requests on existing dialogs will be allowed.

  • The IPAddress config property may now be specified with address/mask notation. For example "" means that the SIP RA will bind to the matching 192.168.0.x address on the host. May be useful in clusters.

  • A more efficient implementation of SIP protocol timers means that memory can be reclaimed faster when timers are cancelled, reducing overall memory usage.


  • OCSIP Resource Adaptor 2.2_06

  • Avoid unnecessary DNS lookup when deciding if an OPTIONS request should be handled by the RA.

  • Fixed implementation of isLocalSipURI() so that it correctly uses the "maddr" parameter, if present.

  • Support dialogs where the initial remote sequence number is 0.


  • OCSIP Resource Adaptor 2.2_05

  • Fixed bug that caused forked dialog creation to fail when using replicated dialogs, when the forked dialog was created by a 2xx with a new to-tag.


  • OCSIP Resource Adaptor 2.2_04

  • Added "UseVirtualAddressInURIs" property, to allow user to specify whether or not the RA will use its virtual address (if configured) in SIP URIs generated by the RA.

  • Update Contact header transport in outgoing requests, if it differs from the resolved transport of the next-hop address.

  • Default transport used in RA-generated URIs can be changed by changing the order transports appear in the "Transports" config property, i.e. UDP will be preferred if it appears before TCP.

  • Fixed bug where SleeSipProvider.forwardForkedResponse() would always override the Contact header. Apps may set their own header in the response (using response.setHeader()) before calling forwardForkedResponse().

  • Fixed bug from 2.2_03 where Request-URI would always get replaced in initial outgoing requests on a dialog.


  • OCSIP Resource Adaptor 2.2_03

  • Fixed bug that caused dialog-creating 2xx responses to be dropped, if they had a different remote tag to existing early dialogs resulting from a fork.

  • Fixed bug where the remote target of an early client dialog was not updated when the 2xx response arrived.

  • Add "oc-node" parameter to local Via headers and SIP URIs created by the RA, may be useful with load balancers in some scenarios.

  • Allow apps to override the Contact header in reliable provisional responses.

  • When forwarding responses between dialogs, RA preserves Contact header in 3xx-6xx responses, unless replaced by the application.

  • Fixed bug that caused scenarios using reliable provisional responses and forking to fail.

  • Fixed bug in implementation of SleeSipProvider.getNewDialog(from,to) that caused client dialogs to fail.


  • OCSIP Resource Adaptor 2.2_02

  • Fix bug that could cause client transactions to leak if they timed out after their associated dialog was removed.

  • Be more forgiving if incoming messages illegally contain multiple values for a single-value header, silently ignore additional headers.

  • Send "491 Request Pending" response if a re-INVITE is received while waiting for the ACK from a previous INVITE.

  • If an initial persistent connection attempt fails with a transport error, raise an alarm, but keep the connection activity open and retry the connection, rather than shutting it down.

  • Support OCSIP RA Type 2.2.

  • OCSIP RA Type 2.2

  • Provides extension RSeqHeader and RAckHeader interfaces that accept long sequence number values (up to 2^32 - 1).

  • Added OCSleeSipProvider.getNodeID() method.


  • OCSIP Resource Adaptor 2.2_01

  • Fixed bugs in forked dialog handling.

  • B2BUA service: mask dialog forked events so they will be processed by a new root SBB entity.


  • OCSIP RA Type 2.1

  • Provide new getNewDialog() variants that allow apps to specify the Call-ID and local-tag for new outgoing dialogs, see com.opencloud.javax.sip.slee.OCSleeSipProvider.

  • Provide associateServerTransaction()/getAssociatedServerTransaction() methods on com.opencloud.javax.sip.ClientTransaction, allows a server transaction to be associated with a client transaction when no dialog is present.

  • Provide methods to specify when compact forms of SIP headers should be used, see com.opencloud.javax.sip.OCMessage.

  • OCSIP Resource Adaptor 2.2

  • Supports OCSIP RA Type 2.1.

  • Fixed an issue that could eventually cause the JVM to run out of permgen space after many deploy/undeploy cycles.

  • Fixed bug in Dialog.getLocalSeqNumber()/getRemoteSeqNumber().


  • OCSIP Resource Adaptor 2.1_01

  • Fixed issue where response events were being dropped on mid-dialog client transaction activities.

  • Fixed issue where RA would fail to activate if TLS was enabled.

  • Allow apps to override Contact header used when creating dialogs.

  • Implemented workaround for JDK 1.6.0_10 CharBuffer bug, that could cause SIP parser to fail in some cases. See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6795561.

  • B2BUA now uses the location service to lookup registered contact addresses.


  • OCSIP Resource Adaptor 2.1

  • Supports SLEE API changes from SLEE 1.1-PFD to SLEE 1.1-final.

    • Requires Rhino 2.0 GA *

  • Supports JSIP RA Type changes from SLEE 1.1-PFD to SLEE 1.1-final.

  • Improved throughput in FT mode.

  • Improved SIP message cloning performance.

  • Fixed some memory leaks that could occur in FT mode.

  • Proprietary headers now implement javax.sip.header.ExtensionHeader, for backward compatibility.

  • Several enhancements to the SIP stack’s worker thread pool:

    • Ensure that messages with the same Call-ID are always processed in the same order they arrived from the network.

    • I/O threads responsible for receiving messages will never block, all blocking work is done in the thread pool.

    • If the pool is overloaded, reads from the busy TCP socket are temporarily suspended, so that the TCP stack will apply flow control, rather than blocking the I/O thread.

  • Added a stats interface (see "rhino-stats -l SIP") for monitoring the thread pool, transport and transaction statistics.

  • Added SIP PUBLISH support to Presence examples.

    See docs/index.html for more information about this release.


  • OCSIP Resource Adaptor 2.0 now supports JAIN SIP 1.2 and SLEE 1.1.

    • Requires Rhino 2.0 *

  • Added JAIN SIP 1.2 RA Type, based on recommendation in Appendix D of SLEE 1.1 specification.

  • OCSIP 2.0 RA Type replaces OCSIP 1.4.1 RA Type, see docs/ratype.html.

    See docs/index.html for more information about this release.


  • OCSIP Resource Adaptor 1.5.3:

  • Fixed bug where RA was incorrectly trying to process CANCELs as mid-dialog requests.

  • Fixed bug that prevented 1xx responses from being passed up to an application that used the stateless SipProvider.sendRequest() method.


  • OCSIP Resource Adaptor 1.5.2:

  • Fixed NullPointerException that occurred when creating mid-dialog ACK requests.


  • OCSIP Resource Adaptor 1.5.1:

  • Fixed bug that could cause client transaction activities to be left in an undefined state.

  • Fixed bug that could cause dialog state to not be initialized correctly if some provisional responses were received without to-tags.


  • OCSIP Resource Adaptor 1.5:

  • Uses an updated replicated storage API for replicating dialog state. This is so that Rhino can better manage creation and removal of the underlying database.

  • This change means that the OCSIP RA now REQUIRES Rhino 1.4.5 or greater. It will NOT deploy on Rhino 1.4.4 or earlier anymore. Use the previous version if Rhino 1.4.4 support is required.

  • Messages that are invalid or fail parsing will be logged at WARN level using the "sip.fail" logger, instead of failing silently.

  • Documentation now located in docs directory, see docs/index.html.


  • OCSIP Resource Adaptor 1.4.3:

  • Change handling of forked dialogs so that all early dialogs are ended as soon as one of the dialogs is confirmed or terminated.

  • If a late 2xx response arrives for a forked dialog, the RA will ACK it and send a BYE to tear down the dialog at the server’s end, like a UAC would. Late 2xx responses will not be passed to the SBB.

  • Forked server dialogs are associated with the original server transaction. When the transaction ends by sending a final response, all early dialogs associated with the transaction are ended.

  • OCSIP Resource Adaptor Type 1.4.1:

  • RA type version changed since forking behaviour has changed. See javadoc for com.opencloud.javax.sip.DialogForkedEvent.


  • OCSIP Resource Adaptor 1.4.2:

  • Fixed a bug that caused 100 Trying responses with to-tags to be incorrectly treated as dialog-creating responses.


  • OCSIP Resource Adaptor 1.4.1:

  • Fixed a NullPointerException that could occur if a forked response arrived for a dialog that had already ended.

  • Fixed a synchronization bug in Dialog.getLocalTag().


  • Updated to OCSIP Resource Adaptor Type 1.4:

  • Added methods to com.opencloud.javax.sip.SipProvider to obtain local host information, see javadoc for details:

    • getLocalSipURI()

    • getLocalVia()

    • isLocalSipURI()

    • isLocalHostname() These methods are useful when running SBBs in a cluster, where the local hostname or port may not be known in advance.

  • Late 2xx responses to INVITE will be delivered on the Dialog activity, if a matching dialog is found.

  • Added DialogForkedEvent, fired when forked responses are detected. See javadoc for com.opencloud.javax.sip.DialogForkedEvent, and B2BUA example.

  • Updated to OCSIP Resource Adaptor 1.4:

  • Support for replicated Dialog activities. If enabled, confirmed dialogs are replicated and available to all nodes in the cluster. NB. Enabling this feature requires Rhino 1.4.5 or later.

  • Configuration of RA listening addresses has been simplified, RA instances will automatically choose an appropriate listen address and source address for the node they are running on.

  • See javadoc/com/opencloud/javax/sip/slee/ra.html for details of above.

  • Updated B2BUA example to use replicated dialog activities and handle forked responses.