Comment calculer le champ SM Length dans SMPP
Dans le protocole SMPP, le champ sm_length
spécifie la longueur en octets du contenu du message court contenu dans le champ short_message
des PDUs tels que submit_sm
, deliver_sm
et data_sm
.
Détails du champ
- Nom du champ : sm_length
- Taille : 1 octet (entier non signé)
- Plage : 0–254 (maximum autorisé par SMPP 3.4)
- Emplacement : Directement avant le champ
short_message
- Objectif : Indique le nombre d'octets dans la charge utile
short_message
Comportement clé
La valeur de sm_length
dépend de l'encodage utilisé :
Encodage | Caractères par SMS | Taille en octets | Remarques |
---|---|---|---|
GSM 7-bit | Jusqu'à 160 | Jusqu'à 140 | Bits compressés ; la taille réelle en octets dépend du contenu |
UCS2 | Jusqu'à 70 | 2 × nombre de caractères | Chaque caractère fait 2 octets |
8-bit binaire | N/A | Jusqu'à 140 | Longueur brute en octets |
Exemple : Message ASCII
Un message simple utilisant l'encodage 7-bit par défaut :
Texte : "Hello" Encodage : GSM 7-bit Octets compressés (Hex) : C8 32 9B FD 06 Longueur en octets : 5 sm_length : 5
Exemple : Message encodé en UCS2
Un message Unicode utilisant l'encodage UCS2 (data_coding = 0x08) :
Texte : "Hi" UCS2 Hex : 0048 0069 Tableau d'octets : 00 48 00 69 Longueur en octets : 4 sm_length : 4
Exemple de PDU SMPP (submit_sm)
0000003B // Longueur de la commande (59 octets) 00000004 // ID de la commande : submit_sm 00000000 // Statut de la commande 00000001 // Numéro de séquence 00 // service_type 01 // source_addr_ton 01 // source_addr_npi 31323334 // source_addr ("1234") 00 01 // dest_addr_ton 01 // dest_addr_npi 35363738 // destination_addr ("5678") 00 00 // esm_class 00 // protocol_id 00 // priority_flag 00 // schedule_delivery_time 00 // validity_period 00 // registered_delivery 00 // replace_if_present_flag 08 // data_coding: UCS2 00 // sm_default_msg_id 04 // sm_length: 4 00480069 // short_message: "Hi" en UCS2
Remarques importantes
sm_length
fait référence à la longueur en octets, pas au nombre de caractères.- Si le contenu du message est divisé en plusieurs messages (concaténation), chaque partie a son propre
sm_length
. - Ne confondez pas
sm_length
avec la longueur totale du message (longueur PDU).
Division et concaténation des messages
Lorsqu'un message dépasse la taille maximale de la charge utile, il est divisé en parties à l'aide d'un UDH (User Data Header). Le sm_length
dans de tels cas inclut également l'UDH :
Exemple : UDH (6 octets) + 67 octets UCS2 = 73 sm_length = 73
Conclusion
Le champ sm_length
est crucial dans la messagerie SMPP car il définit combien d'octets le SMSC doit lire pour le corps du message réel. Comprendre comment l'encodage affecte ce champ garantit une livraison précise et réussie des messages.
Références
- Spécification SMPP 3.4
- Jeu de caractères GSM 03.38
- Encodage Unicode UCS2
More information
- How to configure the SMPP Service Type field
- How to configure the SMPP Phone Number fields
- How to configure the SMPP ESM Class field
- How to configure the SMPP PID field
- How to configure the SMPP Prioirity field
- How to configure the SMPP Scheduled Time field
- How to configure the SMPP Validity Period field
- How to configure the SMPP Registered Delivery field
- How to configure the SMPP Replace if Present field
- How to configure the sm_default_msg_id field
- How to configure the SMPP DCS field
- How to calculate the SMPP SM Length field
- How to put data into the SMPP SM field