Ako vypočítať pole SM Length v SMPP
V protokole SMPP pole sm_length určuje dĺžku obsahu krátkej správy v bytoch, ktorý sa nachádza v poli short_message PDU, ako sú submit_sm, deliver_sm a data_sm.
Detaily poľa
- Názov poľa: sm_length
- Veľkosť: 1 bajt (nezáporné celé číslo)
- Rozsah: 0–254 (maximálne povolené v SMPP 3.4)
- Umiestnenie: Priamo pred pole
short_message - Účel: Určuje počet bajtov v náplni
short_message
Kľúčové správanie
Hodnota sm_length závisí od použitého kódovania:
| Kódovanie | Znaky na SMS | Veľkosť v bytoch | Poznámky |
|---|---|---|---|
| GSM 7-bit | Až 160 | Až 140 | Zbalené bity; skutočná veľkosť v bytoch závisí od obsahu |
| UCS2 | Až 70 | 2 × počet znakov | Každý znak má 2 bajty |
| 8-bit binárne | N/A | Až 140 | Surová dĺžka v bytoch |
Príklad: Správa v ASCII
Jednoduchá správa s predvoleným 7-bitovým kódovaním:
Text: "Hello" Kódovanie: GSM 7-bit Zbalené bajty (Hex): C8 32 9B FD 06 Dĺžka v bytoch: 5 sm_length: 5
Príklad: Správa kódovaná v UCS2
Unicode správa s kódovaním UCS2 (data_coding = 0x08):
Text: "Hi" UCS2 Hex: 0048 0069 Bajtové pole: 00 48 00 69 Dĺžka v bytoch: 4 sm_length: 4
Príklad PDU v SMPP (submit_sm)
0000003B // Dĺžka príkazu (59 bajtov)
00000004 // ID príkazu: submit_sm
00000000 // Stav príkazu
00000001 // Poradové číslo
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" v UCS2
Dôležité poznámky
sm_lengthsa vzťahuje na dĺžku v bytoch, nie na počet znakov.- Ak je obsah správy rozdelený do viacerých častí (zreťazenie), každá časť má svoje vlastné
sm_length. - Nezamieňajte
sm_lengths celkovou dĺžkou správy (dĺžka PDU).
Rozdelenie a zreťazenie správ
Keď správa prekročí maximálnu veľkosť náplne, je rozdelená na časti pomocou UDH (User Data Header). V takýchto prípadoch sm_length zahŕňa aj UDH:
Príklad: UDH (6 bajtov) + 67 bajtov UCS2 = 73 sm_length = 73
Záver
Pole sm_length je kritické v SMPP komunikácii, pretože definuje, koľko bajtov má SMSC prečítať pre skutočný obsah správy. Pochopenie toho, ako kódovanie ovplyvňuje toto pole, zaisťuje presné a úspešné doručenie správ.
Referencie
- Špecifikácia SMPP 3.4
- Znaková sada GSM 03.38
- Kódovanie Unicode UCS2