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é :

EncodageCaractères par SMSTaille en octetsRemarques
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