Berechnung des SMPP SM Length-Felds

Im SMPP-Protokoll gibt das Feld sm_length die Länge des Kurznachrichteninhalts in Bytes an, der im Feld short_message von PDUs wie submit_sm, deliver_sm und data_sm enthalten ist.

Felddetails

  • Feldname: sm_length
  • Größe: 1 Byte (vorzeichenlose Ganzzahl)
  • Bereich: 0–254 (maximal erlaubt durch SMPP 3.4)
  • Position: Direkt vor dem Feld short_message
  • Zweck: Gibt die Anzahl der Bytes in der short_message-Nutzlast an

Wichtiges Verhalten

Der Wert von sm_length hängt von der verwendeten Kodierung ab:

KodierungZeichen pro SMSByte-GrößeHinweise
GSM 7-bit Bis zu 160 Bis zu 140 Gepackte Bits; tatsächliche Byte-Größe hängt vom Inhalt ab
UCS2 Bis zu 70 2 × Anzahl der Zeichen Jedes Zeichen ist 2 Bytes
8-bit binär N/A Bis zu 140 Roh-Byte-Länge

Beispiel: ASCII-Nachricht

Eine einfache Nachricht mit Standard-7-bit-Kodierung:

Text: "Hello"
Kodierung: GSM 7-bit
Gepackte Bytes (Hex): C8 32 9B FD 06
Byte-Länge: 5
sm_length: 5

Beispiel: UCS2-kodierte Nachricht

Eine Unicode-Nachricht mit UCS2-Kodierung (data_coding = 0x08):

Text: "Hi"
UCS2 Hex: 0048 0069
Byte-Array: 00 48 00 69
Byte-Länge: 4
sm_length: 4

SMPP PDU-Beispiel (submit_sm)

0000003B  // Befehlslänge (59 Bytes)
00000004  // Befehls-ID: submit_sm
00000000  // Befehlsstatus
00000001  // Sequenznummer
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" in UCS2

Wichtige Hinweise

  • sm_length bezieht sich auf die Byte-Länge, nicht auf die Zeichenanzahl.
  • Wenn der Nachrichteninhalt über mehrere Nachrichten aufgeteilt wird (Verkettung), hat jeder Teil seine eigene sm_length.
  • Verwechseln Sie sm_length nicht mit der Gesamtlänge der Nachricht (PDU-Länge).

Nachrichtenteilung & Verkettung

Wenn eine Nachricht die maximale Nutzlastgröße überschreitet, wird sie mithilfe eines UDH (User Data Header) in Teile aufgeteilt. Die sm_length beinhaltet in solchen Fällen auch den UDH:

Beispiel: UDH (6 Bytes) + 67 UCS2 Bytes = 73
sm_length = 73

Fazit

Das Feld sm_length ist entscheidend für die SMPP-Nachrichtenübermittlung, da es definiert, wie viele Bytes die SMSC für den eigentlichen Nachrichtenkörper lesen soll. Das Verständnis, wie die Kodierung dieses Feld beeinflusst, gewährleistet eine genaue und erfolgreiche Nachrichtenübermittlung.

Referenzen

  • SMPP 3.4 Spezifikation
  • GSM 03.38 Zeichensatz
  • Unicode UCS2-Kodierung

More information