Jak obliczyć pole SM Length w SMPP

W protokole SMPP pole sm_length określa długość w bajtach treści wiadomości krótkiej zawartej w polu short_message PDU, takich jak submit_sm, deliver_sm i data_sm.

Szczegóły pola

  • Nazwa pola: sm_length
  • Rozmiar: 1 bajt (liczba całkowita bez znaku)
  • Zakres: 0–254 (maksymalna wartość dopuszczalna w SMPP 3.4)
  • Lokalizacja: Bezpośrednio przed polem short_message
  • Cel: Określa liczbę bajtów w ładunku short_message

Kluczowe zachowanie

Wartość sm_length zależy od użytego kodowania:

KodowanieZnaki na SMSRozmiar w bajtachUwagi
GSM 7-bit Do 160 Do 140 Spakowane bity; rzeczywisty rozmiar w bajtach zależy od treści
UCS2 Do 70 2 × liczba znaków Każdy znak to 2 bajty
8-bit binary N/A Do 140 Surowe bajty

Przykład: Wiadomość ASCII

Prosta wiadomość z domyślnym kodowaniem 7-bitowym:

Tekst: "Hello"
Kodowanie: GSM 7-bit
Spakowane bajty (Hex): C8 32 9B FD 06
Długość w bajtach: 5
sm_length: 5

Przykład: Wiadomość zakodowana w UCS2

Wiadomość Unicode z kodowaniem UCS2 (data_coding = 0x08):

Tekst: "Hi"
UCS2 Hex: 0048 0069
Tablica bajtów: 00 48 00 69
Długość w bajtach: 4
sm_length: 4

Przykład PDU SMPP (submit_sm)

0000003B  // Długość polecenia (59 bajtów)
00000004  // ID polecenia: submit_sm
00000000  // Status polecenia
00000001  // Numer sekwencyjny
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" w UCS2

Ważne uwagi

  • sm_length odnosi się do długości w bajtach, a nie liczby znaków.
  • Jeśli treść wiadomości jest podzielona na wiele części (konkatenacja), każda część ma własne sm_length.
  • Nie należy mylić sm_length z całkowitą długością wiadomości (długość PDU).

Podział i konkatenacja wiadomości

Gdy wiadomość przekracza maksymalny rozmiar ładunku, jest dzielona na części przy użyciu UDH (User Data Header). W takich przypadkach sm_length obejmuje również UDH:

Przykład: UDH (6 bajtów) + 67 bajtów UCS2 = 73
sm_length = 73

Podsumowanie

Pole sm_length jest kluczowe w komunikacji SMPP, ponieważ definiuje, ile bajtów SMSC powinno odczytać dla właściwej treści wiadomości. Zrozumienie, jak kodowanie wpływa na to pole, zapewnia dokładne i skuteczne dostarczanie wiadomości.

Referencje

  • Specyfikacja SMPP 3.4
  • Zestaw znaków GSM 03.38
  • Kodowanie Unicode UCS2

More information