2 Compliance Statements For SMPP Sessions (2)
Specification Clauses 2.1 and 2.2
Session States (2.3)
Operation Matrix (2.4)
Relevance
The following compliance statements refer to Table 2-1 Operation Matrix of The Specification.
alert_notification
Messaging Manager complies.
Messaging Manager does not construct these messages but does relay them.
broadcast_sm
Messaging Manager does not comply.
Code exists to decode the incoming broadcast message but ProtocolHandler::stateBound() does not consider this possibility and returns genericNack.
Messaging Manager does not construct this message.
broadcast_sm_ resp
Messaging Manager does not comply.
Code exists to decode the incoming broadcast message but ProtocolHandler::stateBound() does not consider this possibility and returns genericNack.
Messaging Manager does not construct this message.
cancel_ broadcast_sm
Messaging Manager does not comply.
Code exists to decode the incoming broadcast message but ProtocolHandler::stateBound() does not consider this possibility and returns genericNack.
Messaging Manager does not construct this message.
cancel_ broadcast_sm_ resp
Messaging Manager does not comply.
Code exists to decode the incoming broadcast message but ProtocolHandler::stateBound() does not consider this possibility and returns genericNack.
Messaging Manager does not construct this message.
cancel_sm
Messaging Manager complies.
Messaging Manager does not construct these messages but, if in a bound state, sends on received cancel messages. These messages are sent straight to the outgoing ProtocolHandler, bypassing ACS and xmsTrigger.
cancel_sm_resp
Messaging Manager complies.
- Messaging Manager sends received cancel response messages if in a bound state.
- These messages are sent straight to the outgoing ProtocolHandler, bypassing ACS and xmsTrigger.
- Messaging Manager only constructs these messages to reply to the cancel_sm if it is unable to forward the cancel_sm.
query_broadcast_sm
Messaging Manager does not comply.
- Code exists to decode the incoming broadcast message, but ProtocolHandler::stateBound() does not consider this possibility and returns a genericNack.
- Messaging Manager does not construct this type of message.
query_broadcast_sm_resp
Messaging Manager does not comply.
- Code exists to decode the incoming broadcast message, but ProtocolHandler::stateBound() does not consider this possibility and returns a genericNack.
- Messaging Manager does not construct this type of message.
query_sm
Messaging Manager complies.
- Messaging Manager does not construct these messages.
- Messaging Manager relays received query messages if in a bound state. These messages are sent straight to the outgoing ProtocolHandler, bypassing ACS and smsTrigger.
query_sm_resp
Messaging Manager complies.
- Messaging Manager relays received query messages if in a bound state. These messages are sent straight to the outgoing ProtocolHandler, bypassing ACS and smsTrigger.
- Messaging Manager only constructs these messages to reply to a query_sm if it is unable to forward the query_sm.
replace_sm
Messaging Manager complies.
- Messaging Manager does not construct these messages.
- Messaging Manager relays received replace messages if in a bound state. These messages are sent straight to the outgoing ProtocolHandler, bypassing ACS and smsTrigger.
replace_sm_resp
Messaging Manager complies.
- Messaging Manager relays received replace response messages if in a bound state. These messages are sent straight to the outgoing ProtocolHandler, bypassing ACS and smsTrigger.
- Messaging Manager only constructs these messages to reply to a replace_sm if it is unable to forward the replace_sm.
PDU Sequencing (2.6)
The PDU Sequence Number (2.6.1)
Messaging Manager complies.
Messaging Manager follows the recommended practice of monotonically increasing a sequence number that starts at 1. The number will clock-over at 231-1.
Session Timers (2.7)
Relevance
The following compliance statements refer to Table 2-2 SMPP Session Timers of The Specification.
Session Init Timer
Messaging Manager does not comply.
The timer value is the configured outgoingTimeout value. However, when a TCP/IP outbind connection has been established and the ESME is waiting for the outbound message, Messaging Manager obtains a timer value from the idleTimeout configuration option.
Enquire Link Timer
Messaging Manager complies.
The timer value is obtained from the heartbeatTimeout value.
Error Handling (2.8)
Handling Connection Failure (2.8.1)
Messaging Manager complies.
- After a failed SMSC connection attempt, the IP plugin tries every 10 seconds to reconnect.
- If an established connection is lost, reconnection attempts are only made if the connection is to an SMSC.
- Section 2.8.1 recommends retry for outbinds, but this is not performed by Messaging Manager itself.
The PDU is unrecognised
Messaging Manager complies.
If a command ID cannot be determined, a genericNack is returned with ESME_RINVCMDID set.
The PDU is malformed
Messaging Manager complies.
- If a command ID cannot be determined, a genericNack is returned with ESME_RINVCMDID set.
- If the section length of a PDU is the reason for the command ID not being determined, ESME_RINVCMDLEN is returned in a genericNack.
- See also command_status, error_status_code (4.7.6 ) .
Invalid Field Length
Messaging Manager does not comply.
The type of message returned is a genericNack with ESME_RINVCMDID. This is not a response of the appropriate type.
The PDU data is unexpected and deemed invalid
Messaging Manager complies.
Messaging Manager does not need to consider any message data as invalid.
Flow Control and Congestion Avoidance (2.9)
Compliance statement
Messaging Manager does not comply.
- Messages that are unaltered by Messaging Manager and leave via the originating plugin will pass on any encoded congestion_state TLV correctly. However, all Messaging Manager constructed messages, and messages arriving from other plugins will not add a congestion_state TLV to a response.
- To become fully compliant, the GenericSM class:
- needs to be extended to include a representation of the congestion_state TLV, and
- needs to populate the TLV from the GenericSM in the outgoing plugin.
Some method of determining Messaging Manager's own congestion state (and populating GenericSM with it) would also be desirable.
Session Security and Encryption (2.10)
Leased Lines (2.10.1)
Messaging Manager complies.
The privacy of the network where Messaging Manager is deployed is obviously not determined by Messaging Manager itself.
Secure Transport Layer (2.10.2)
Messaging Manager does not comply.
- The SMPP plugin uses cmn::Socket for its connections. cmn::Socket does not support SSL.
- To become compliant:
- SSL support needs to be added to the socket class, and
- configuration for the SSL connection needs to be added to the plugin.
Forward and Backward Compatibility (2.11)
General
Messaging Manager complies with clause 2.11.
With bind requests, Messaging Manager sets interface_version to either the ASP's version or the version in Messaging Manager's eserv.config, whichever is the smaller. Only 0x34 and 0x50 are considered valid values.
Forward Compatibility (2.11.1)
Messaging Manager complies.
If a message leaves by the plugin that received it, unrecognised TLVs are inserted into the outgoing message.
Backward Compatibility (2.11.2)
Messaging Manager does not comply.
- Messaging Manager does not correctly support connections to an ESME or MC that only supports SMPP version 3.3 or earlier.
- In several places Messaging Manager adds TLVs to messages which may be SMPP version 3.3.
- No check on the messageId size is made, so it is possible to send a messageId greater than 8 octets in size.