2 Compliance Statements For SMPP Sessions (2)

Overview

Introduction

This chapter states the compliance of Messaging Manager with clauses of Section 2 of The Specification.

References to The Specification

Convention

As a cross reference, the clause number of The Specification is included in brackets at the end of each compliance statement title.

Specification Clauses 2.1 and 2.2

Application Layer Communication (2.1)

For TCP/IP connections, Messaging Manager complies.

For X.25 connections, Messaging Manager does not comply.

Messaging Manager does not support X.25.

Establishing a SMPP Session (2.2)

For TCP/IP connections, Messaging Manager complies.

For X.25 connections, Messaging Manager does not comply.

For SMPP, Messaging Manager can be configured to use any port including IANA standard port 2775.

X.25 is not supported by Messaging Manager.

Session States (2.3)

Open (2.3.1)

For TCP/IP connections, Messaging Manager complies.

For X.25 connections, Messaging Manager does not comply.

Bound_TX (2.3.2)

Messaging Manager complies.

Bound_RX (2.3.3)

Messaging Manager complies.

Bound_TRX (2.3.4)

Messaging Manager complies.

Unbound (2.3.5)

Messaging Manager complies.

Closed (2.3.6)

Messaging Manager complies.

Outbound (2.3.7)

Messaging Manager complies.

Messaging Manager can ignore outbind requests to a port if the port is configured not to receive.

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.

bind_receiver

Messaging Manager complies.

bind_receiver_ resp

Messaging Manager complies.

bind_transceiver

Messaging Manager complies.

bind_transceiver_resp

Messaging Manager complies.

bind_transmitter

Messaging Manager complies.

bind_transmitter_resp

Messaging Manager complies.

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.

data_sm

Messaging Manager complies.

data_sm_resp

Messaging Manager complies.

deliver_sm

Messaging Manager complies.

deliver_sm_resp

Messaging Manager complies.

enquire_link

Messaging Manager complies.

enquire_link_resp

Messaging Manager complies.

generic_nack

Messaging Manager complies.

outbind

Messaging Manager complies.

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.

submit_multi

Messaging Manager complies.

submit_multi _ resp

Messaging Manager complies.

submit_sm

Messaging Manager complies.

submit_sm_resp

Messaging Manager complies.

unbind

Messaging Manager complies.

unbind_resp

Messaging Manager complies.

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.

Why use Monotonically Increasing Sequence numbers? (2.6.2)

Messaging Manager complies.

Sequence Numbers Across Sessions (2.6.3)

Messaging Manager complies.

Each Messaging Manager SMPP connection maintains its own sequence number.

Synchronous Vs. Asynchronous (2.6.4)

Messaging Manager complies.

Why Asynchronous? (2.6.5)

Messaging Manager complies.

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.

Inactivity Timer

Messaging Manager complies.

  • The timer value is obtained from the heartbeatTimeout value.
  • The timer value expires in all states but the expiry handling code checks the current state before taking action.

Response Timer

Messaging Manager complies.

The timer value is the configured outgoingTimeout 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.

Operation Failure (2.8.2)

The following six statements refer to the bulleted list in The Standard.

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.

The PDU is not allowed in the current session state

Messaging Manager complies.

Where the received message does not have an appropriate response message type, genericNack is used.

The ESME or MC is restricting the use of certain PDUs or features

Messaging Manager complies.

Messaging Manager does not restrict the use of certain PDUs.

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.

Secure VPN (2.10.3)

Messaging Manager complies.

For this type of encryption, there are no demands placed on either the ESME or MC.

Secure Tunnel (2.10.4)

Messaging Manager complies.

For this type of encryption, there are no demands placed on either the ESME or MC.

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.