Como calcular o campo SM Length no SMPP

No protocolo SMPP, o campo sm_length especifica o comprimento em bytes do conteúdo da mensagem curta contido no campo short_message de PDUs como submit_sm, deliver_sm e data_sm.

Detalhes do Campo

  • Nome do Campo: sm_length
  • Tamanho: 1 byte (inteiro sem sinal)
  • Intervalo: 0–254 (máximo permitido pelo SMPP 3.4)
  • Localização: Imediatamente antes do campo short_message
  • Propósito: Indica o número de bytes no payload short_message

Comportamento Chave

O valor de sm_length depende da codificação utilizada:

CodificaçãoCaracteres por SMSTamanho em BytesNotas
GSM 7-bit Até 160 Até 140 Bits compactados; o tamanho real em bytes depende do conteúdo
UCS2 Até 70 2 × número de caracteres Cada caractere ocupa 2 bytes
8-bit binário N/A Até 140 Comprimento bruto em bytes

Exemplo: Mensagem ASCII

Uma mensagem simples usando codificação padrão 7-bit:

Texto: "Hello"
Codificação: GSM 7-bit
Bytes Compactados (Hex): C8 32 9B FD 06
Comprimento em Bytes: 5
sm_length: 5

Exemplo: Mensagem Codificada em UCS2

Uma mensagem Unicode usando codificação UCS2 (data_coding = 0x08):

Texto: "Hi"
UCS2 Hex: 0048 0069
Array de Bytes: 00 48 00 69
Comprimento em Bytes: 4
sm_length: 4

Exemplo de PDU SMPP (submit_sm)

0000003B  // Comprimento do Comando (59 bytes)
00000004  // ID do Comando: submit_sm
00000000  // Status do Comando
00000001  // Número de Sequência
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" em UCS2

Notas Importantes

  • sm_length refere-se ao comprimento em bytes, não à contagem de caracteres.
  • Se o conteúdo da mensagem for dividido em várias mensagens (concatenação), cada parte tem seu próprio sm_length.
  • Não confunda sm_length com o comprimento total da mensagem (comprimento da PDU).

Divisão e Concatenação de Mensagens

Quando uma mensagem excede o tamanho máximo do payload, ela é dividida em partes usando um UDH (User Data Header). O sm_length nesses casos inclui o UDH também:

Exemplo: UDH (6 bytes) + 67 bytes UCS2 = 73
sm_length = 73

Conclusão

O campo sm_length é crítico no SMPP, pois define quantos bytes o SMSC deve ler para o corpo da mensagem. Entender como a codificação afeta este campo garante a entrega precisa e bem-sucedida das mensagens.

Referências

  • Especificação SMPP 3.4
  • Conjunto de Caracteres GSM 03.38
  • Codificação Unicode UCS2

More information