Cum se calculează câmpul SMPP SM Length
În protocolul SMPP, câmpul sm_length
specifică lungimea în octeți a conținutului mesajului scurt din câmpul short_message
al PDU-urilor precum submit_sm
, deliver_sm
și data_sm
.
Detalii despre câmp
- Nume câmp: sm_length
- Dimensiune: 1 octet (întreg fără semn)
- Interval: 0–254 (maxim permis de SMPP 3.4)
- Locație: Direct înaintea câmpului
short_message
- Scop: Indică numărul de octeți din payload-ul
short_message
Comportament cheie
Valoarea lui sm_length
depinde de codificarea utilizată:
Codificare | Caractere per SMS | Dimensiune în octeți | Note |
---|---|---|---|
GSM 7-bit | Până la 160 | Până la 140 | Biți împachetați; dimensiunea reală în octeți depinde de conținut |
UCS2 | Până la 70 | 2 × numărul de caractere | Fiecare caracter are 2 octeți |
8-bit binary | N/A | Până la 140 | Lungime brută în octeți |
Exemplu: Mesaj ASCII
Un mesaj simplu folosind codificarea implicită 7-bit:
Text: "Hello" Codificare: GSM 7-bit Octeți împachetați (Hex): C8 32 9B FD 06 Lungime în octeți: 5 sm_length: 5
Exemplu: Mesaj codificat UCS2
Un mesaj Unicode folosind codificarea UCS2 (data_coding = 0x08):
Text: "Hi" UCS2 Hex: 0048 0069 Matrice de octeți: 00 48 00 69 Lungime în octeți: 4 sm_length: 4
Exemplu PDU SMPP (submit_sm)
0000003B // Lungime comandă (59 octeți) 00000004 // ID comandă: submit_sm 00000000 // Stare comandă 00000001 // Număr secvență 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" în UCS2
Note importante
sm_length
se referă la lungimea în octeți, nu la numărul de caractere.- Dacă conținutul mesajului este împărțit în mai multe mesaje (concatenare), fiecare parte are propriul
sm_length
. - Nu confundați
sm_length
cu lungimea totală a mesajului (lungimea PDU).
Împărțirea și concatenarea mesajelor
Când un mesaj depășește dimensiunea maximă a payload-ului, acesta este împărțit în părți folosind un UDH (User Data Header). În astfel de cazuri, sm_length
include și UDH:
Exemplu: UDH (6 octeți) + 67 octeți UCS2 = 73 sm_length = 73
Concluzie
Câmpul sm_length
este critic în mesageria SMPP, deoarece definește câți octeți ar trebui să citească SMSC pentru corpul efectiv al mesajului. Înțelegerea modului în care codificarea afectează acest câmp asigură livrarea precisă și reușită a mesajelor.
Referințe
- Specificația SMPP 3.4
- Setul de caractere GSM 03.38
- Codificarea 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