SMPP codecs¶
- Table of contents
- SMPP codecs
Smartswitch supports following codecs:
SMPP Codec ID | codec |
0x00 | SMSC Default Alphabet (see below) |
0x01 | IA5 (CCITT T.50)/ASCII (ANSI X3.4) |
0x02 | Octet unspecified (8-bit binary) |
0x03 | Latin 1 (ISO-8859-1) |
0x04 | Octet unspecified (8-bit binary) |
0x05 | JIS (X 0208-1990) |
0x06 | Cyrllic (ISO-8859-5) |
0x07 | Latin/Hebrew (ISO-8859-8) |
0x08 | UCS2 (ISO/IEC-10646) |
0x09 | Pictogram Encoding |
0x0A | ISO-2022-JP (Music Codes) |
0x0D | Extended Kanji JIS |
0x0E | KS C 5601 |
SMPP Codec ID is encoded into SMPP message and receiver can learn from it the codec which should be used to decode message.
Besides codec 0x00 - by ID 0x00 it's impossible to know which codec was used to encode message, and one should appeal to partner to tell which codec is used for SMPP Codec ID 0x00.
Codec 0x00.¶
This is special SMPP Codec ID.
In case if in SMS body codec 0x00 is specified, it means that peers have arranged (verbally or in written form) to use some special codec, which doesn't have dedicated by standard SMPP Codec ID - so called default codec.
Both peers should configure the same default codec in settings of their systems.
In Smartswitch default codec is configured using an option with a same name in SMPP settings of a dial-peer.
As far SMS message doesn't contain used codec identifier (unlike other SMPP Codec IDs), SMS delivery will work correctly only in case if both peers configure the same default codec.
Usually GSM is used as default codec.
Cyrillic and non-cyrillic codecs.¶
It's desirable to use codec 0x08 - UCS2.
This is Unicode, which supports codecs of all languages.
Other codecs should be used only if partner doesn't support UCS2 for some reason.
Codec translation.¶
Smartswitch supports message translation on fly.
Translation occurs, if, according to terminator's settings, it's requested to send a message to him in codec, which differs from codec, which is used in incoming message from originator.
Smartswitch accepts messages from originator in any codec, and sends to terminator using the codec with greatest priority.
In case if terminator has several codecs configured, and one of them matches with accepted message codec, then translation doesn't occur.
In case if there is no way to avoid translation, Smartswitch tries to translate message to codec with highest priority.
In case if during message translation some symbols have been lost, for example when translating from cyrillic message to 0x03 - Latin 1, then Smartswitch tries to encode using the next priority codec from list.
In case if it's impossible to encode with none of the configured codecs without symbol loss - the message is not sent to terminator.
If the message is a segment of a multi-segment message, then no codec conversion occurs.
This is due to the fact that there may be such a situation that segment 1 can be transmitted through Smartswitch, and segment 2 of the same message can be transmitted through the gateway of another operator.
If Smartswitch transcodes into codec A, and the parallel operating gateway into codec B, then the receiving terminal will have difficulties in recovering a message from several parts encoded with different codecs.
Also, the receiving terminal will have difficulty combining the message if the size of the message segment is changed during the transcoding process.
Therefore, to prevent these problems, no re-encoding occurs for multi-segment messages.
If, according to Smartswitch settings, none of the terminators supports the message codec, then the message will be discarded and the originator will be able to re-route it to its backup route.
Billing depending on codec¶
Billing unit is:
- 140 bytes for 1-segment SMS
- 134 bytes for multi-segment SMS (for GSM codec - 133 bytes).
Depending on codec, billing unit (140/134/133 bytes) may contain different count of text symbols:
SMPP Codec ID | codec | symbols count in 1-segment SMS | symbols count in 1 segment of multi-segment SMS |
0x00 | SMSC Default Alphabet, GSM | 160 | 152 |
0x00 | SMSC Default Alphabet, non-GSM | 140 | 134 |
0x01 | IA5 (CCITT T.50)/ASCII (ANSI X3.4) | 140 | 134 |
0x03 | Latin 1 (ISO-8859-1) | 140 | 134 |
0x06 | Cyrllic (ISO-8859-5) | 140 | 134 |
0x07 | Latin/Hebrew (ISO-8859-8) | 140 | 134 |
0x08 | CS2 (ISO/IEC-10646) | 70 | 67 |