• This release is built on and requires JDK 11. It requires Rhino 3.0 or later releases. (SMPP-153)

  • Continue reconnection attempt after SmppSessionNotFoundException is thrown when sending bind request. This can happen when the server closes the connection before the bind request is sent. (SMPP-151)


  • Allow relative dates to have 0 days. (SMPP-152)


  • Implement getPeerAddress method on SmppSession. The peer address is now also included in the toString method of the SMPP stack session. (SMPP-122)


  • Fixed an error that occurred when a bound session received an ESME_RALYBND response when trying to bind. This error prevented the normal delayed reconnection from happening and instead the resource adaptor would attempt to reconnect immediately. (SMPP-142)


  • Fixed a bug which could cause a NullPointerException to be thrown when the SLEE contains both active and inactive SMPP resource adaptor entities. (SMPP-136)


  • Fixed incorrect value being returned from getValidityPeriod() in Java types for the following SMPP messages: BROADCAST_SM, DELIVER_SM, REPLACE_SM, SUBMIT_MULTI and SUBMIT_SM. (SMPP-115)

  • Fixed PDUs missing some fields after being serialised and deserialised. (SMPP-101)

  • Fixed a bug which sometimes caused NullPointerExceptions to be thrown from methods Address.equals() and Address.hashCode(). (SMPP-106)

  • Added support for separate statistic parameter sets for each SMPP session. These parameter sets are created when an SMPP session is established, and removed after the session is closed. They are named according to the node ID, session ID and peer address of the session. The parent level existing statistic parameter sets aggregating values for all bound sessions remain unchanged. (SMPP-98)

  • Implemented equals() and hashCode() methods in the Java types for SMPP messages. (SMPP-105)

  • Added support for multiple occurrences of BROADCAST_AREA_IDENTIFIER and BROADCAST_ERROR_STATUS TLVs in a PDU, as per SMPP v5.0 Specification. (SMPP-109)

  • Added a null check for SHORT_MESSAGE value passed to the setShortMessage() method in Java types for SMPP messages: DELIVER_SM, REPLACE_SM, SUBMIT_MULTI and SUBMIT_SM. A NullPointerException will be thrown if a null value is provided. (SMPP-110)


API and deployment changes

  • From release 2.3.0, the SMPP Bound Resource Adaptor no longer exists. Its functions have been moved into the SMPP "Generic" Resource Adaptor, henceforth referred to simply as the SMPP Resource Adaptor. Refer to the documentation for details on how to configure the resource adaptor in "bound mode". (SMPP-68)

  • All SLEE component versions have been updated to 2.3.

  • The SMPP types are now in a SLEE library component. (SMPP-73)

  • The RA requires a license to activate in production Rhino instances. (SMPP-15)

  • The synchronous send method SmppSession.sendSyncRequest() now returns a Future from which a response can be retrieved, with a timeout, when convenient. The old behaviour has been moved to the deprecated method sendSyncRequestAndWait(). (SMPP-78)

New features

  • The resource adaptor now supports active reconfiguration. See documentation for details. (SMPP-77)

  • MBeans are now registered for the entity and each bound session. The domain is com.opencloud.smpp. (SMPP-79)


  • The exceptions thrown by the resource adaptor type API have been updated. Instead of IOException being used for everything, a mix of SmppSendException and SmppException is now used. (SMPP-59)

  • Services can use the isBound() provider method even when the entity is inactive (it will always return false). All other methods throw IllegalStateException. (SMPP-66)

  • Alarms raised by the resource adaptor have been updated, and are now displayed in the alarm catalog. (SMPP-76)

  • The enquire link behaviour for bound sessions has been improved. ENQUIRE_LINK messages are now only sent when the connection is idle. Failed requests will not trigger a reconnect, the inactivity timeout is used to determine that. The interaction between EnquireLinkInterval and InactivityTimeout is discussed in more detail in the documentation. (SMPP-95)

Version 2.2.0

API and deployment changes

  • From release 2.2.0, the SMPP resource adaptors require Java 7.

  • All SLEE component versions have been updated to 2.2.

New features

  • There are two new activity types: IncomingSmppRequestActivity and OutgoingSmppRequestActivity. Events for SMPP messages not related to session management are now fired on these activities. Events related to session management are still fired on the SmppSession activity. The new request activities end as soon as the event is processed. Having the event fired on a separate activity eliminates a scalability issue in previous releases. (SMPP-26)

  • The resource adaptor type API has been reorganised to avoid services needing to keep track of a session ID. All session operations are now performed via methods on the session activity. (SMPP-39)

Bug fixes

  • Fixed an issue where the SmppSession could not be retrieved from an ACI. (SMPP-33)

  • Fixed a bug where the Address class was returning the wrong value from the getAddrNpi() method. (SMPP-53)


  • Add a new config property "SmppBindAddresses" that allows a different bind address (network address and port combination) to be specified for each node in a cluster. It is a string property with the format "{node}address:port,{node}address:port,…​". This allows entities running on two nodes on the same host to use different ports, for example: "{101},{102}". It also allows entities running on different hosts to specify an interface to listen on that is specific to each host, for example: "{101},{102}". (SMPP-46)

  • Statistics have been added to both resource adaptors. The root parameter set is "SMPP". (SMPP-40)

  • The default value for the SmppResponseReceivedTimeout configuration property of the SMPP Bound resource adaptor has been changed from 10 to 11 seconds. This is to avoid the timeout occurring at the same time as the SMPP Generic resource adaptor SmppResponseSentTimeout, when these two resource adaptors are connected to each other. (SMPP-64)

  • Relax the security permissions of the SMPP Bound RA to allow it to connect to any remote port, instead of only 2775. (SMPP-14)

  • SMPP Generic RA now closes all sessions during deactivation. (SMPP-16)

  • When the SMPP Bound RA receives an UNBIND request it will now send the appropriate response and close the session. (SMPP-34)


  • The SMPP Generic resource adaptor will now end sessions that are stuck in the open state if a service did not do so when the SMPP_TIMEOUT_SESSION_INIT event was fired. The resource adaptor will do this if the internal session init timer fires a second time, which will be at twice the value of the SmppSessionInitTimeout configuration property. (SMPP-51)

Version 2.1.0

  • All SLEE component versions have been updated to 2.1.

  • Repackaged and improved example scripts.

  • Allow 'R' at the end of date format (to indicate a relative date). (SMPP-20)

  • Attempt to decode message body and TLVs in responses even if result code is not 0. (SMPP-21)

  • Exceptions thrown by timer tasks are now caught and logged. If not caught, they could cause older Rhino versions (prior to 2.3.0) to shut down. (SMPP-22)

Version 2.0.4

  • Fixed deadlock that could occur when sending unbind under load.

  • Don’t restrict the TLVs that may be added to PDUs.

  • Support storage of PDUs in CMP fields.

Version 2.0.3

  • Fixed an issue where TCP connection write queues could grow indefinitely if a faulty peer failed to read from its socket.

  • Fixed an issue in the SMPP-SIP Gateway services example which allows compatibility with Rhino 2.0 and Rhino 2.1.

Version 2.0.2

  • Fix bug that could cause a file descriptor leak when connecting to unresolvable host names.

Version 2.0.1

  • Fixed bug that prevented RA configuration updates from working.

  • Raise alarm if RA activation fails for any reason.

Version 2.0.0

  • Updated all SMPP RAs to be compliant with SLEE 1.1-final specification, so they can be deployed in Rhino 2.0.

Version 1.2.7

  • Make RA respond to incoming enquire_link PDUs immediately.

  • Fix bug that could cause reconnect thread to continue after deactivation.

Version 1.2.6

  • Fixed synchronization bug that caused sending threads to block while an enquire_link request was in progress.

Version 1.2.5

  • Fixed bug that was causing RA to not reconnect to the SMSC upon reactivation.

  • Fixed RA’s SmppSessionID implementation so that events from different RA entities can be correctly distinguished using SmppProvider.getSession(SmppSessionID).

Version 1.2.4

  • Fixed enquire_link and rebind timers, was possible for more than one timer to run.

  • RA sends unbind whenever an already-bound SMPP connection is closed.

  • Fixed enquire_link behaviour so that connection is closed when EnquireLinkThreshold consecutive failures are reached, not after.

  • Make SmppBoundSessionID class serializable again.

Version 1.2.3

  • Allow permanent bind failure codes to be specified as a config property, "PermanentBindFailureCodes". This is a comma-separated list of integer codes, in decimal, hex (0xnn) or symbolic (ESME_xxx) form: PermanentBindFailureCodes="0x0a,ESME_RBINDFAIL,15,16,0x48,ESME_RINVSRCNPI". When specifying this property in Ant scripts or management commands, enclose the list in double-quotes, so that the commas separating the failure codes are distinct from the commas separating the RA config properties:,SMSCPort=2775,PermanentBindFailureCodes="…​",…​ The default list of permanent failure codes is: ESME_RINVSRCADR, ESME_RBINDFAIL, ESME_RINVPASWD, ESME_RINVSYSID, ESME_RINVSRCTON, ESME_RINVSRCNPI, ESME_RINVSYSTYP

  • Fix race condition that could result in the connection failure alarm not being cleared upon RA deactivation.

Version 1.2.2

  • Make connection attempts to SMSC asynchronous, so that Rhino threads are not blocked during RA activation.

Version 1.2.1

  • Added a configurable timeout for outgoing connection attempts, so they do not block indefinitely if a host is offline. Default timeout is 10000ms, may be changed using the "SmppConnectTimeout" RA config property.

  • Incremented SMPP RA and SMPP Bound RA versions to 1.1.1 and 1.2.1 respectively, since the transport layer implementation was changed to support the above feature. Event and RA Type versions remain the same.

Version 1.1.1

  • Modified com.opencloud.slee.resources.smpp.pdu.ShortMessage class so that it can support strings or byte arrays for short message data. Incremented API version to 1.1 as this is an incompatible change.

  • Incremented SMPP event versions to 1.1

  • Incremented SMPP RA type version to 1.1

  • Incremented SMPP Bound RA type to 1.2.

  • Added version suffixes to SMPP jar files.

Version 1.1

  • Ignore response body if header contains non-null status code.

  • Allow SystemType and Address fields in bind requests to be specified as RA configuration properties(1).

  • If the bind response indicates a permanent failure(2), don’t try to reconnect.

  • Raise alarm if there is a temporary or permanent connection failure.

  • Send an unbind request when RA is deactivated.

  • If the bind response is ESME_RALYBND/0x05, the RA will send an unbind and then attempt to re-bind.

  • Added MaxOutgoingRequests property to optionally limit the number of active outgoing requests the RA may have at a given time. If app tries to exceed this limit, an ESME_RTHROTTLED error response event will be fired. The default value for this property is zero (unlimited).


  1. SystemType property is a regular string. Address is a string containing the addr_ton, addr_npi and addr_range fields separated by colons, eg. Address=1:1:18005559999

  2. Bind error codes which are treated as permanent failures are: ESME_RINVSRCADR 0x0a ESME_RBINDFAIL 0x0d ESME_RINVPASWD 0x0e ESME_RINVSYSID 0x0f ESME_RINVSRCTON 0x48 ESME_RINVSRCNPI 0x49 ESME_RINVSYSTYP 0x53 Vendor-specific codes 0x400-0x4ff