For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

SMPP Data Coding Setter

Problem this snippet solves:

Hello, We have some platform that does not have flexible parameters for SMPP Data Coding (DC). When sending SMS from client platform to the SMS-C, it is important that the DC of the SMS text inside the SMPP PDU Field is supported by the SMS-C and defined in such a way that the SMSC is able to interpret it. Otherwise, all SMS may be dropped by the SMS-C server.

This iRule set the DataCoding to 0x00.

  • SMSC default alphabet => DC=0x00 - CharSet:GSM - Length Max: 160
  • LATIN-1 => DC=0x03 - CharSet: GSM - Length Max: 160
  • UCS2 => DC=0x08 - CharSet: UCS2 - Length Max:70

Please consult the smpp v3.4 specification http://opensmpp.org/specs/smppv34_gsmumts_ig_v10.pdf

Code :

when CLIENT_ACCEPTED {
    TCP::collect
    }
    when CLIENT_DATA {
    while { [TCP::payload length] > 16 } {
#Get header
        binary scan [TCP::payload] IH8IIa* length operation status sequence p
        #log local0. "Request: $operation" 
        if { [TCP::payload length] < $length } {
            TCP::collect $length
            return
        }
        switch -glob $operation {           
            00000004 {
                # If submit_sm
set all [TCP::payload length] 
#log local0. "Request: $operation - $all" 
set p [string range $p [expr [string first \x00 $p]+1] end]
binary scan $p ccA* sourTon sourNpi p
#log local0. "Request: $operation - $sourTon - $sourNpi"

set p [string range $p [expr [string first \x00 $p]+1] end]
binary scan $p ccA* destTon destNpi p
#log local0. "Request: $operation - $destTon - $destNpi"

set p [string range $p [expr [string first \x00 $p]+1] end]
binary scan $p ccccA* esm protID pFlag schedTime p 
#log local0. "Request: $operation - $esm - $protID - $pFlag - $schedTime"

set p [string range $p [expr [string first \x00 $p]+1] end]
binary scan $p cccA* registDel replIfPres dataCoding p
#log local0. "Request: $operation - $registDel - $replIfPres - $dataCoding "

set lastindexDCex [string length $p]
#log local0. "Request: $operation - $lastindexDCex "
set indexDC [expr {$all - $lastindexDCex - 1}]
#log local0. "Request: $operation - $indexDC "

TCP::payload replace $indexDC 1 [binary format c 0]   

            }
        }
        TCP::release $length
        TCP::notify request
    }
    TCP::collect
}
Published Jan 16, 2018
Version 1.0
No CommentsBe the first to comment