4 Compliance Statements For SMPP PDU Definitions (4)
Session Management Operations (4.1)
General
When specified, no limits are enforced for the parameters described in this section. However limits exist in the Messaging Manager database and the Routing Scheme subsystem which will limit the size of the specific parameter being passed on to the SMPP interface:
- The database and routing scheme limit the password to 50 and 51 characters respectively.
- The database and routingScheme limit the system_id to 15 and 16 characters respectively.
bind_transmitter Syntax (4.1.1.1)
Messaging Manager complies.
- No limit is placed on the length of a C-Octet string.
- If configured incorrectly, Messaging Manager creates bind operations with passwords longer than nine characters.
bind_transmitter_resp Syntax (4.1.1.2)
Messaging Manager complies.
- The maximum of 16 characters for system_id is not enforced.
- sc_interface_version is not used.
bind_receiver Syntax (4.1.1.3)
Messaging Manager complies.
The maximum of 16 characters for system_id is not enforced.
bind_receiver_ resp Syntax (4.1.1.4)
Messaging Manager complies.
- The maximum of 16 characters for system_id is not enforced.
- sc_interface_version is not used.
bind_transceiver Syntax (4.1.1.5)
Messaging Manager complies.
The maximum number of characters is not enforced for the variable length fields.
bind_transceiver_resp Syntax (4.1.1.6)
Messaging Manager complies.
- The maximum number of characters is not enforced for the variable length fields.
- sc_interface_version is not used.
outbind Syntax (4.1.1.7)
Messaging Manager complies.
The maximum number of characters is not enforced for the variable length fields.
Enquire Link Operation (4.1.2)
Messaging Manager complies.
Messaging Manager takes any message type as a valid response.
Alert Notification Operation (4.1.3)
Messaging Manager complies.
Messaging Manager does not construct these messages. It forwards them from the sender to the receiver.
Message Submission Operations (4.2)
submit_sm Syntax (4.2.1.1)
Messaging Manager complies.
- Messaging Manager does not check for exceeding the maximum length of the variable length fields.
- The SMPP submit_sm message is stored as a GenericSM object. The GenericSM class is sub-classed from the GenericMessage parent class with message type set to Submit.
- The mapping from SMPP to GenericSM is described for each parameter as follows.
- service_type is set to null for outgoing messages. For incoming messages service_type is used to set the teleservice and allowAlternateDelivery via the teleserviceRoutingMap.
- source_addr_ton, source_addr_npi, source_addr is stored as the GenericMessage::OriginatingAddress in GenericSM.
- dest_addr_ton, dest_addr_npi, dest_addr is stored as the GenericMessage::DestinationAddress in GenericSM.
- esm_class is not stored as one field in submit_sm, but individual bits are set/read from many fields. The esm_class is stored in multiple fields in the GenericMessage/GenericSM:
| SMPP esm_class bits | GenericSM fields |
|---|---|
| 0x3c (Message Type: Bits 2-5) | Determines how the message type is set. See MC Delivery Receipt (4.3.5.1) , Intermediate Notification (4.3.5.2) , SME Delivery Acknowledgement (4.3.5.3) , SME Manual/User Acknowledgement (4.3.5.4) and Conversation Abort (4.3.5.5) for information on delivery receipt handling. |
| 0x40 (GSM Specific: UDHI Bit) | Used to determine the presence of a userDataHeader (GenericSM:: userDataHeaderPresent). |
|
0x03 (Messaging Mode: Bits 1-0) |
GenericSM::singleShot (0x01 => true, all others => false). |
| 0x80 (GSM Specific: Reply Path Bit) |
ProvideReplyPath (direct copy) GenericMessage::allowAlternateDelivery (false for non zero). |
- protocol_id is stored in GenericSM::protocolIdentifier.
- priority_flag is stored in GenericMessage::priorityIndicator (0 => PriorityNormal, 1=> PriorityInteractive).
- schedule_delivery_time is not stored in GenericSM. Therefore only maintained if the message exits Messaging Manager via the incoming plugin and is not modified.
- validity_period qos_time_to_live is ignored by Messaging Manager when creating GenericSM. The validity period is converted to the GenericSM::ValidityPeriod class and stored in GenericSM::validityPeriod.
- registered_delivery is stored in GenericSM::statusReportRequest for non-deliver_sm messages. deliver_sm requests with registered_delivery are ignored and not stored in GenericSM::statusReportRequest. Messaging Manager outbound messages have registeredDelivery updated to reflect the statusReportRequest field of GenericSM.
| GenericSM::statusReportRequest | Effect on registeredDelivery |
|---|---|
| xmsRequested, bothRequested | Set bit 0 to 1 and bit 1 to 0. |
| SmeRequested | Set to 1 if registeredDelivery is 0. |
| NotRequired | Set to 0. |
- replace_if_present_flag is not stored in GenericSM.
- data_coding is generally stored in GenericSM as GenericSM::desiredAlphabet and also in several other fields for GSM data coding values. DataCodingElement structure is used as an intermediary in the mapping of data_coding to and from GenericSM parameters. The SMPP data_coding value is mapped and stored in one or more of the following parameters of the GenericSM:
- desiredAlphabet
- messageClass - only for GSM MC data_coding values.
- mwg (MessageWaitingGroup) - only for GSM MWI data_coding values.
- mwi (messageWaitingIndicator) - only for GSM MWI data_coding values.
- mwt (MessageWaitingType) - only for GSM MWI data_coding values.
See data_coding (4.7.7) for additional details.
- sm_default_msg_id is not stored in GenericSM.
- sm_length is not stored in GenericSM. Instead the field is generated on outgoing messages from the userData.
- short_message The message_payload TLV is read by Messaging Manager with priority over the short_message field. If no message_payload is present, the short_message field is stored in GenericSM::userData. Outgoing messages have short_message set to the userData (with no message_payload TLV present) if less than 255 in size, otherwise it is set in the message_payload TLV.
- message_submission TLVs are considered in section Message Submission Request TLVs (4.2.4) .
submit_sm_resp Syntax (4.2.1.2)
Messaging Manager complies.
- Messaging Manager does not check for exceeding the maximum length of the variable length fields.
- Messaging Manager stores the message as a GenericSMResult.
- message_id is stored as GenericSMResult::deliverReceiptId.
- message_submission response TLVs are considered in section Message Submission Response TLVs (4.2.5) .
data_sm Syntax (4.2.2.1)
Messaging Manager complies.
- Messaging Manager does not check for exceeding the maximum length of the variable length fields. The fields are used in the same way as submit_sm to construct an Messaging Manager GenericSM.
- The GenericMessage message type is set to MT_Submit if the message comes from an SME, or MT_Deliver if the message comes from an SMSC.
data_sm_resp Syntax (4.2.2.2)
Messaging Manager complies.
- Messaging Manager does not check for exceeding the maximum length of the variable length fields.
- The fields are used in the same way as submit_sm_resp to construct an Messaging Manager GenericSMResult.
submit_multi Syntax (4.2.3.1)
Messaging Manager complies.
- submit_multi messages are processed internally in Messaging Manager by creating a GenericSM for each terminating address. The handling of each field is thus the same as for submit_sm, with the exception of destinationAddress.
- The GenericMessage message type is set to Submit.
- Distribution Lists are recognised but not supported. ESME_RCNTSUBDL, "Cannot Submit to Distribution List", is returned.
- Although individual GenericSM components may be modified by Messaging Manager, these changes are not incorporated into the submit_multi forwarded to the SMSC, as any choice would be arbitrary. The forwarded submit_multi is derived from the originating message.
submit_multi_ resp Syntax (4.2.3.2)
Messaging Manager complies.
Messaging Manager does not check for exceeding the maximum length of the variable length fields. The fields are used in the same way as submit_sm_resp to construct a Messaging Manager GenericSMResult. The GenericSMResult has no knowledge of the unsuccess_sme structure, as it deals with only a single message. The SMPP plugin does, however, create the unsuccess_sme from the individual submit_sm_resps.
Message Submission Request TLVs (4.2.4)
Messaging Manager does not comply.
The following table sets out the way Messaging Manager manages each of the TLVs listed in Table 4-20 of The Specification. A TLV stated as being ignored by Messaging Manager can still be passed on if the message is unchanged and the message uses the same outgoing and incoming plugin.
| TLV Name | Messaging Manager treatment |
|---|---|
| alert_on_msg_delivery | Ignored |
| billing_identification | Ignored |
| callback_num | Ignored |
| callback_num_atag | Ignored |
| callback_num_pres_ind | Ignored |
| dest_addr_np_country | Ignored |
| dest_addr_np_information | Ignored |
| dest_addr_np_resolution | Ignored |
| dest_addr_subunit | Stored in GenericSM::messageClass. Present in outgoing messages if value is not GenericSM::MessageClassNone. |
| dest_bearer_type | Ignored |
| dest_network_id | Ignored |
| dest_network_type | Stored in GenericMessage::messageProtocol. |
| dest_node_id | Ignored |
| dest_subaddress | Ignored |
| dest_telematics_id | Ignored |
| dest_port | Ignored |
| display_time | Ignored |
| its_reply_type | Ignored |
| its_session_info | Ignored |
| language_indicator | Ignored |
| message_payload | Used to create the GenericSM::userData. Present on outgoing messages when userData > 255 characters. |
| more_messages_to_send | Ignored |
| ms_msg_wait_facilities | Stored in GenericSM::mwt (MessageWaitingType) and GenericSM::mwi (MessageWaitingIndicator). |
| ms_validity | Stored in GenericSM::mwg (MessageWaitingGroup). Only value 0 (Store Indefinitely) will be correctly saved. Other values will be treated as GenericSM::MessageWaitingGroupDiscard. Outgoing messages will contain values 0 (Store Indefinitely) or 3 (Display Only) only. |
| number_of_messages | Ignored |
| payload_type | Ignored |
| privacy_indicator | Ignored |
| qos_time_to_live | Ignored |
| sar_msg_ref_num | Stored in GenericSM::segmentReference. Outgoing messages will either have this reference in the userDataHeader or this TLV (depending on if the message was modified by MMX). |
| sar_segment_seqnum | Stored in GenericSM::segmentNumber. Outgoing messages will either have this reference in the userDataHeader or this TLV (depending on if the message was modified by Messaging Manager). |
| sar_total_segments | Stored in GenericSM::segmentCount. Outgoing messages will either have this reference in the userDataHeader or this TLV (depending on if the message was modified by Messaging Manager). |
| set_dpf | Ignored |
| sms_signal | Ignored |
| source_addr_subunit | Ignored |
| source_bearer_type | Ignored |
| source_network_id | Used to set the GenericSM::sourceLocationInformation, which is triggered to ACS as the location number. |
| source_network_type | Ignored |
| source_node_id | Ignored |
| source_port | Ignored |
| source_subaddress | Ignored |
| source_telematics_id | Ignored |
| user_message_reference | Stored in GenericSM::messageReference. Present in outgoing messages if value grater than zero. |
| user_response_code | Ignored |
| ussd_service_op | Ignored |
Message Submission Response TLVs (4.2.5)
Messaging Manager does not comply.
A TLV stated as being ignored by Messaging Manager can still be passed on if the message is unchanged and the message uses the same outgoing and incoming plugin.
The following table sets out the way Messaging Manager manages each of the TLVs listed in Table 4-21 of The Specification.
| TLV Name | Messaging Manager treatment |
|---|---|
| additional_status_info_text | Ignored |
| delivery_failure_reason | Ignored |
| dpf_result | Ignored |
| network_error_code | Ignored |
Source and Destination Addressing (4.2.6)
Messaging Manager does not comply.
- Messaging Manager does not consider that the source_addr may be NULL. The originating address is populated by the source fields, regardless of their values.
- Messaging Manager complies partially in that it understands the TON, NPI and address fields of a mobile number.
Alphanumeric Format (4.2.6.1.2)
Messaging Manager does not comply.
- The AMC part of Messaging Manager does not comply because ACS is triggered by BcdDigits which cannot handle alphabetical characters.
- Messaging Manager complies if a message does not trigger a call-plan.
NPI (4.2.6.2)
Messaging Manager complies.
Messaging Manager also handles an NPI of 13 to represent PC:SSN. This value should only be used for SCCP level addresses.
ESME Addresses (4.2.6.3)
Compliance statements are made under the following headings:
- Service Short Code
- International Number, and
- NULL Address.
These headings correspond to the bullet list in clause 4.2.6.3 of The Specification.
NULL Address
Messaging Manager does not comply.
Messaging Manager cannot substitute a default source address into the GenericSM. A non-NULL address is required for a delivery receipt to be sent. This could be implemented in the future with a simple change to the originating plugin.
Message Replace operation in submit_sm (4.2.7)
Messaging Manager does not comply.
The replace_if_present flag is ignored by Messaging Manager, and not placed in outgoing messages (unless the message is unaltered and goes out the incoming plugin). The service_type field is also not preserved by Messaging Manager. replace_sm messages are forwarded on, so this is the only way to send a message replace through Messaging Manager.
Message Length (4.2.8)
Messaging Manager complies.
Messaging Manager can handle up to 255 characters in short_message. Messages that are too long will be placed in the message_payload TLV. Messaging Manager does not consider the possibility of the MC only having space for 140 octets (that is, the 255 limit is hard-coded).
Scheduled (4.2.9.2)
Messaging Manager does not comply.
The scheduled_delivery_value is ignored in constructing a GenericSM. However, Messaging Manager is capable of detecting the presence of the scheduled_delivery_value and such messages will be FDA-barred internally so that these messages, where appropriate, will be sent to an alternative Message Centre for proper handling at the scheduled delivery time.
Pre-defined (4.2.9.3)
Messaging Manager does not comply.
The sm_default_msg_id is not stored in the GenericSM class. Messaging Manager does not examine this value on incoming messages either.
Message Modes (4.2.10)
Messaging Manager does not comply.
The esm_class value is not directly stored in GenericSM. See the following four compliance statements for more detail.
Default Message Mode (4.2.10.1)
Messaging Manager complies.
If the incoming message has bits 0 and 1 set to zero, so will the outgoing message.
Store and Forward Message Mode (4.2.10.2)
Messaging Manager does not comply.
This part of the esm_class is reconstructed as 00 (default message mode) if the outgoing message is changed and is not singleShot.
Datagram Message Mode (4.2.10.3)
Messaging Manager complies.
The singleShot variable in GenericSM correctly captures this behaviour. Note that the delivery receipt may still be requested via the registered_delivery field.
Transaction Message Mode (4.2.10.4)
Messaging Manager does not comply.
Messaging Manager does not set bit 1 to 1 for an altered message. Note that an SMPP Transaction mode message which came into Messaging Manager has allowAlternateDelivery set to false, so we will go out the same plugin, and the outgoing message will be Transaction mode, provided the singleShot nature was not changed by Messaging Manager.
Message Delivery Operations (4.3)
deliver_sm Syntax (4.3.1.1)
Messaging Manager complies.
- A deliver_sm is handled similarly to a submit_sm. See submit_sm Syntax (4.2.1.1) for detailed handling of each message tag.
- genericMessage's message type is set to Deliver unless the deliver_sm contains a delivery receipt. See MC Delivery Receipt (4.3.5.1) on this page, Intermediate Notification (4.3.5.2) on this page, SME Delivery Acknowledgement (4.3.5.3) , SME Manual/User Acknowledgement (4.3.5.4) and Conversation Abort (4.3.5.5) .
deliver_sm_resp Syntax (4.3.1.2)
Messaging Manager complies.
- A deliver_sm is handled similarly to a submit_sm. The main difference is that the GenericMessage::messageType is changed to MT_Notify for a Status Report.
- See submit_sm_resp Syntax (4.2.1.2) for a detailed description of the handling of each message tag.
data_sm Operation (4.3.2)
Messaging Manager complies.
See data_sm Syntax (4.2.2.1) and data_sm_resp Syntax (4.2.2.2) for more information.
Message Delivery Request TLVs (4.3.3)
TLVs not covered in Message Submission Request TLVs (4.2.4) and Message Submission Response TLVs (4.2.5) are listed in the following table.
| TLV Name | Messaging Manager treatment |
|---|---|
| message_state | Stored in GenericSM::deliverySucceeded (as equal to DELIVERED or not). This field is set to false if the TLV is not present. |
| receipted_message_id | Stored in GenericSM::deliveryReceiptId. This field is set to blank if the TLV is not present. |
Message Delivery Response TLVs (4.3.4)
For compliance statements see Message Submission Response TLVs (4.2.5) .
MC Delivery Receipt (4.3.5.1)
Messaging Manager complies.
- message_state and receipted_message_id are observed, but the network_error_id field is ignored by Messaging Manager.
- The GenericMessage's message type is set to Notify and message contents set to Delivery Receipt.
Intermediate Notification (4.3.5.2)
Messaging Manager complies.
- If the MC passes Messaging Manager one of these messages, it will pass it on (setting allowAlternateDelivery to false). Of the fields listed as important, only network_error_id is ignored by Messaging Manager.
- The GenericMessage's message type is set to Notify and message contents set to Delivery Receipt.
SME Delivery Acknowledge-ment (4.3.5.3)
Messaging Manager complies.
- If the MC passes Messaging Manager one of these messages, it will pass it on (setting allowAlternateDelivery to false).
- The GenericMessage's message type is set to Notify and message contents set to Delivery Receipt.
Message Broadcast Operations (4.4)
broadcast_sm Operation (4.4.1)
Messaging Manager does not comply.
Messaging Manager responds to broadcast_sm messages with a genericNack.
broadcast_sm Syntax (4.4.1.1)
Messaging Manager does not comply.
- Messaging Manager does not attempt to construct a GenericMessage. Messaging Manager does not attempt to handle individual fields or interpreted them.
- Messaging Manager can construct a fully compliant internal representation of a broadcast_sm, but it cannot translate this object to GenericMessage.
broadcast_sm_ resp Syntax (4.4.1.2)
Messaging Manager does not comply.
See broadcast_sm Operation (4.4.1), above.
Broadcast Request Optional TLVs (4.4.2)
Messaging Manager does not comply.
See broadcast_sm Operation (4.4.1), above.
Ancillary Submission Operations (4.5)
cancel_sm Operation (4.5.1)
Messaging Manager complies.
cancel_sm operations are sent straight to the outgoing protocolHandler, never entering xmsTrigger or ACS. Thus, the message passed on is an exact copy of the incoming message.
cancel_sm Syntax (4.5.1.1)
Messaging Manager complies.
The incoming message is copied to the outgoing message, so Messaging Manager is compliant, assuming that the message originator is compliant.
query_sm Operation (4.5.2)
Messaging Manager complies.
query_sm operations are sent straight to the outgoing protocolHandler, never entering xmsTrigger or ACS. Thus, the message passed on is an exact copy of the incoming message.
query_sm Syntax (4.5.2.1)
Messaging Manager complies.
The incoming message is copied to the outgoing message, so Messaging Manager is compliant, assuming that the message originator is compliant.
replace_sm Operation (4.5.3)
Messaging Manager complies.
replace_sm operations are sent straight to the outgoing protocolHandler, never entering xmsTrigger or ACS. Thus, the message passed on is an exact copy of the incoming message.
Ancillary Broadcast Operations (4.6)
query_broadcast_sm Operation (4.6.1)
Messaging Manager does not comply.
Messaging Manager responds to query_broadcast_sm messages with a genericNack.
query_broadcast_sm Syntax (4.6.1.1)
Messaging Manager does not comply.
- Messaging Manager does not attempt to construct a GenericMessage. Messaging Manager does not attempt to handle individual fields nor does it interpret them.
- Messaging Manager can construct a fully compliant internal representation of a query_broadcast_sm, but it cannot translate the representation to a GenericMessage.
Query Broadcast Request Optional TLVs (4.6.1.2)
Messaging Manager does not comply.
See query_broadcast_sm Operation (4.6.1) in this topic.
query_broadcast_sm_resp Syntax (4.6.1.3)
Messaging Manager does not comply.
See query_broadcast_sm Operation (4.6.1) in this topic.
Query Broadcast Response Optional TLVs (4.6.1.4)
Messaging Manager does not comply.
See query_broadcast_sm Operation (4.6.1) in this topic.
cancel_ broadcast_sm Operation (4.6.2)
Messaging Manager does not comply.
- Messaging Manager does not attempt to construct a GenericMessage. Messaging Manager does not attempt to handle individual fields nor does it interpret them.
- Messaging Manager can construct a fully compliant internal representation of a cancel_broadcast_sm, but it cannot translate the representation to a GenericMessage.
cancel_ broadcast_sm Syntax (4.6.2.1)
Messaging Manager does not comply.
See cancel_broadcast_sm Operation (4.6.2) in this topic.
PDU Field Definitions (4.7)
addr_npi, source_addr_npi, dest_addr_npi, esme_addr_npi (4.7.2)
Messaging Manager does not comply.
The values for Internet (IP) and WAP Client Id are not considered. Messaging Manager also has an extra value of 13 for point codes.
address_range (4.7.3)
Messaging Manager does not comply.
address_range is always NULL in messages constructed by Messaging Manager. The value of the field is ignored in interpreting messages received by Messaging Manager.
UNIX Regular Expressions (4.7.3.1)
Messaging Manager does not comply.
Not relevant as the address_range is never used by Messaging Manager. See address_range (4.7.3) .
command_status, error_status_ code (4.7.6 )
Messaging Manager complies.
- All values are correct.
- Errors not explicitly mentioned as transientFailures are treated as permanentFailures.
- If a message is throttled by Messaging Manager, a status code determined by the throttledCommandStatus configuration parameter will be returned. This defaults to ESME_RTHROTTLED.
- "Not used" implies that incoming messages are not checked for the associated error.
- For the Reject action, Messaging Manager can be configured to return any SMPP error_code. To do this Messaging Manager uses a configured mapping from ACS CS1ReleaseCause. If configured by the user, all cause codes are treated as "Compliant in outbound direction".
Default "Not Used" cause code values are shown in the following table.
| Command status name | Usage compliance |
|---|---|
| ESME_ROK |
Messaging Manager complies. Treated as GenericSMResult::resultSuccess. |
| ESME_RINVMSGLEN | Messaging Manager complies. |
| ESME_RINVCMDLEN | Messaging Manager complies. |
| ESME_RINVCMDID | Messaging Manager complies. |
| ESME_RINVBNDSTS |
Messaging Manager complies. Receipt is treated as a GenericSMResult::resultTransientFailure. |
| ESME_RALYBND | Messaging Manager complies. |
| ESME_RINVPRTFLG | Not used. |
| ESME_RINVREGDLVFLG | Not used. |
| ESME_RSYSERR |
Messaging Manager complies.
|
| ESME_RINVSRCADR | Not used |
| ESME_RINVDSTADR | Not used |
| ESME_RINVMSGID | Not used |
| ESME_RBINDFAIL | Messaging Manager complies. |
| ESME_RINVPASWD | Not used |
| ESME_RINVSYSID | Not used |
| ESME_RCANCELFAIL | Messaging Manager complies. |
| ESME_RREPLACEFAIL | Messaging Manager complies. |
| ESME_RMSGQFUL |
Messaging Manager complies.
|
| ESME_RINVSERTYP | Not used |
| ESME_RINVNUMDESTS | Not used |
| ESME_RINVDLNAME | Not used |
| ESME_RINVDESTFLAG | Not used |
| ESME_RINVSUBREP | Not used |
| ESME_RINVESMCLASS | Not used |
| ESME_RCNTSUBDL | Messaging Manager complies. |
| ESME_RSUBMITFAIL | Not used |
| ESME_RINVSRCTON | Not used |
| ESME_RINVSRCNPI | Not used |
| ESME_RINVDSTTON | Not used |
| ESME_RINVDSTNPI | Not used |
| ESME_RINVSYSTYP | Not used |
| ESME_RINVREPFLAG | Not used |
| ESME_RINVNUMMSGS | Not used |
| ESME_RTHROTTLED |
Messaging Manager complies. The throttling response code can be changed via the eserv.config default smpp parameter 'throttledCommandStatus'. |
| ESME_RINVSCHED | Not used |
| ESME_RINVEXPIRY | Not used |
| ESME_RINVDFTMSGID | Not used |
| ESME_RX_T_APPN | Treated as a GenericSMResult::resultTransient-Failure. TransientFailures are mapped to this value. Also used for duplicate sequence numbers and failure to send a message to transaction or to construct a transaction object. |
| ESME_RX_P_APPN | PermanentFailures are mapped to this. |
| ESME_RX_R_APPN | Treated as a GenericSMResult::resultTransientFailure. |
| ESME_RQUERYFAIL | Messaging Manager complies. |
| ESME_RINVTLVSTREAM | Not used |
| ESME_RTLVNOTALLWD | Not used |
| ESME_RINVTLVLEN | Not used |
| ESME_RMISSINGTLV | Messaging Manager complies. |
| ESME_RINVTLVVAL | Not used |
| ESME_RDELIVERYFAILURE | Not used |
| ESME_RUNKNOWNERR |
Messaging Manager complies. Receipt is treated as a GenericSMResult::resultTransient-Failure. |
| ESME_RSERTYPUNAUTH | Receipt is treated as a GenericSMResult::resultTransient-Failure. |
| ESME_RPROHIBITED | Not used. |
| ESME_RSERTYPUNAVAIL | Not used |
| ESME_RSERTYPDENIED | Not used |
| ESME_RINVDCS | Not used |
| ESME_RINVSRCADDRSUBUNIT | Not used |
| ESME_RINVDSTADDRSUBUNIT | Not used |
| ESME_RINVBCASTFREQINT | Not used |
| ESME_RINVBCASTALIAS_NAME | Not used |
| ESME_RINVBCASTAREAFMT | Not used |
| ESME_RINVNUMBCAST_AREAS | Not used |
| ESME_RINVBCASTCNTTYPE | Not used |
| ESME_RINVBCASTMSGCLASS | Not used |
| ESME_RBCASTFAIL | Not used |
| ESME_RBCASTQUERYFAIL | Not used |
| ESME_RBCASTCANCELFAIL | Not used |
| ESME_RINVBCAST_REP | Not used |
| ESME_RINVBCASTSRVGRP | Not used |
| ESME_RINVBCASTCHANIND | Not used |
data_coding (4.7.7)
Messaging Manager complies.
See submit_sm Syntax (4.2.1.1) .
- Generally, data_coding is stored in GenericSM::desiredAlphabet, but depending on its value (for GSM MWI and GSM MC values), data_coding may also be stored in:
- GenericSM::mwi (message waiting indicator)
- GenericSM::mwg (message waiting group)
- GenericSM::mwt (message waiting type)
- GenericSM::messageClass
- Except for GenericSM::desiredAlphabet, the presence of SMPP's optional parameters such as
- TLV ms_validity,
- TLV ms_msg_wait_facilities, and
- TLV dest_addr_subunit
will override the GenericSM mwi, mwg, mwt and/or messageClass parameters described above.
- In Messaging Manager, data_coding is mapped to and from a dataCodingElement structure. Messaging Manager uses inboundDataCodingMap and outboundDataCodingMap of the SMPP Plugin. The dataCodingElement:
- is used to populate the GenericSM parameters described above for the inbound case, and
- is populated from the GenericSM parameters described above for the outbound case.
dest_flag (4.7.9)
Messaging Manager complies.
Messaging Manager does not support distribution lists themselves.
esm_class (4.7.12)
Messaging Manager does not comply.
- Set Reply Path Bit (Bit 7) is stored in GenericSM::provideReplyPath.
- UDHI Bit (Bit 6) is recognised but not stored in GenericSM. It is used to stop alternate delivery of concatenated messages when no UDHI is present. Messaging Manager will not use esm_class to carry segmentation information if it is carried in TLVs.
- Bit 4 (Conversation Abort and manual/user ack) is ignored by Messaging Manager.
- See submit_sm Syntax (4.2.1.1) .
message_state (4.7.15)
Messaging Manager complies.
Query messages are not interpreted by Messaging Manager, simply passed on, so Messaging Manager does not react to or alter this field.
priority_flag (4.7.19)
Messaging Manager complies.
- Stored in GenericMessage:: priorityIndicator.
- Messaging Manager uses the IS-95/ANSI-41 compliant priority mapping. The mapping from these values to ANSI-136 is described below (converting from left to right).
| ANSI-136 | ANSI-41 | ANSI-136 |
|---|---|---|
| Bulk | Normal | Normal |
| Normal | Interactive | Urgent |
| Urgent | Urgent | Urgent |
| Very urgent | Emergency | Very urgent |
registered_ delivery (4.7.21)
Messaging Manager does not comply.
Bits 0 and 1 are altered. All other bits are left alone. Outgoing messages have the same pattern. Messaging Manager does not compliantly set bit 1. See submit_sm Syntax (4.2.1.1) .
replace_if_ present_flag (4.7.22)
Messaging Manager does not comply.
Value is not stored in GenericSM, so is essentially ignored by Messaging Manager, unless the message is copied to the outgoing plugin unaltered.
scheduled_ delivery_time (4.7.23.1)
Messaging Manager does not comply.
scheduled_delivery_time is not stored in GenericSM and is ignored by Messaging Manager, unless scheduled_delivery_time is copied to the outgoing plugin unaltered. However, for cases where FDA may be relevant for the message, Messaging Manager recognises the presence of scheduled_delivery_time, bypasses FDA and passes scheduled_delivery_time to the SMSC for proper handling at the correct scheduled delivery time.
final_date (4.7.23.3)
Messaging Manager complies.
Only used for queries not deciphered by Messaging Manager.
Absolute Time Format (4.7.23.4)
Messaging Manager does not comply.
- Tens of seconds are ignored by Messaging Manager.
- Messaging Manager stores absolute time internally as seconds since midnight UTC on 1 January 1970.
Relative Time Format (4.7.23.5)
Messaging Manager complies.
Messaging Manager stores relative time internally as a number of seconds to offset.
service_type (4.7.25)
Messaging Manager does not comply.
- For outgoing messages that are altered or generated, service_type is set to null.
- For incoming messages:
- service_type is used to set the teleservice and allowAlternateDelivery via the teleserviceRoutingMap.
- Implicit association of a function from a service type such as "replace if present" is not supported.
sm_default_msg_id (4.7.27)
Messaging Manager does not comply.
sm_default_msg_id is not stored in GenericSM. Messaging Manager ignores sm_default_msg_id unless it is copied, unmodified, to the outgoing plugin.
sm_length (4.7.28)
Messaging Manager complies.
This value is not stored internally in Messaging Manager, but calculated from the current message length. The value is correctly set to 0 if a message_payload TLV is being used.
PDU TLV Definitions (4.8)
TLV Tag (4.8.1)
Messaging Manager complies.
Messaging Manager uses some TLV tag values internally, mainly for holding values from the EmiProtocolHandler. These TLV values are listed in the following table.
| Tag Name | Tag Value |
|---|---|
| vmsc_address | 0x3680 |
| num_septets | 0x3681 |
| tdma_priority | 0x3682 |
| message_modified | 0x3683 |
TLV Definitions (4.8.4)
Messaging Manager does not comply.
Where a TLV definition is stated as "ignored" by Messaging Manager, the TLV will only be compliant if the message exits via the originating plugin. In this case unaltered TLVs will be preserved into the outgoing message.
dest_network_ type (4.8.4.26)
Messaging Manager does not comply.
Stored in GenericMessage::messageProtocol. Only the following values will be stored:
- 0x02 - ANSI-136/TDMA
- 0x03 - IS-95/CDMA
- Other values treated as GenericSM::UNKNOWN message protocol.
message_payload (4.8.4.36)
Messaging Manager complies.
Only used if message_size exceeds 255 characters.
message_state (4.8.4.37)
Messaging Manager does not comply.
Stored (as a bool) in GenericSM::deliverySucceeded. This field is set to true if the state is DELIVERED, and false for all other values or if the TLV is not present. Outgoing messages originating from other protocols will have a value of UNKNOWN.
For delivery receipts, the message_state may be set to DELIVERED or UNDELIVERED depending on the value of GenericSM::deliverySucceeded.
ms_msg_wait_ facilities (4.8.4.40)
Messaging Manager complies.
Stored in GenericSM::mwi (MessageWaitingIndicator) and GenericSM::mwt (MessageWaitingType).
ms_validity (4.8.4.41)
Messaging Manager does not comply.
- Stored in GenericSM:mwg (messageWaitingGroup).
- Messaging Manager complies for value 0 (Store Indefinitely).
- Value 3 (Display Only) used only for outbound messages.
receipted_ message_id (4.8.4.47)
Messaging Manager complies.
Stored in GenericSM::deliveryReceiptId. Set to blank if not present.
source_network_ id (4.8.4.56)
Messaging Manager complies.
- Stored in GenericSM::sourceLocationInformation, and triggered to ACS as location number.
- Only compatible with ESME Operator encoding.