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

CodificareCaractere per SMSDimensiune în octețiNote
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