Skip to main content

Library for parsing Protocol Data Units (PDUs) in SMPP protocol

Project description

SMPPPDU (Forked from smpp.pdu)

smpppdu is a Python3 library for parsing Protocol Data Units (PDUs) in SMPP protocol

http://www.nowsms.com/discus/messages/1/24856.html

Install

$ pip install smpppdu

Examples

Decoding (parsing) PDUs

import binascii
import io

from smpp.pdu.pdu_encoding import PDUEncoder

hex = '0000004d00000005000000009f88f12441575342440001013136353035353531323334000101313737333535353430373000000000000000000300117468657265206973206e6f2073706f6f6e'
binary = binascii.a2b_hex(hex)
file = io.BytesIO(binary)

pdu = PDUEncoder().decode(file)
print(f"PDU: {pdu}")

# Prints the following:
#
# PDU: PDU [command: deliver_sm, sequence_number: 2676551972, command_status: ESME_ROK
# service_type: AWSBD
# source_addr_ton: INTERNATIONAL
# source_addr_npi: ISDN
# source_addr: 16505551234
# dest_addr_ton: INTERNATIONAL
# dest_addr_npi: ISDN
# destination_addr: 17735554070
# esm_class: EsmClass[mode: DEFAULT, type: DEFAULT, gsmFeatures: set()]
# protocol_id: 0
# priority_flag: LEVEL_0
# schedule_delivery_time: None
# validity_period: None
# registered_delivery: RegisteredDelivery[receipt: NO_SMSC_DELIVERY_RECEIPT_REQUESTED, smeOriginatedAcks: set(), intermediateNotification: False]
# replace_if_present_flag: DO_NOT_REPLACE
# data_coding: DataCoding[scheme: DEFAULT, schemeData: LATIN_1]
# sm_default_msg_id: None
# short_message: b'there is no spoon'
# ]

Creating and encoding PDUs

import binascii

from smpp.pdu.pdu_types import (
    AddrTon, AddrNpi, EsmClass, EsmClassMode, EsmClassType, PriorityFlag, 
    RegisteredDelivery, RegisteredDeliveryReceipt, ReplaceIfPresentFlag,
    DataCoding, DataCodingScheme, DataCodingGsmMsg, DataCodingGsmMsgCoding,
    DataCodingGsmMsgClass
)
from smpp.pdu.operations import SubmitSM
from smpp.pdu.pdu_encoding import PDUEncoder

pdu = SubmitSM(9284,
    service_type='',
    source_addr_ton=AddrTon.ALPHANUMERIC,
    source_addr_npi=AddrNpi.UNKNOWN,
    source_addr='mobileway',
    dest_addr_ton=AddrTon.INTERNATIONAL,
    dest_addr_npi=AddrNpi.ISDN,
    destination_addr='1208230',
    esm_class=EsmClass(EsmClassMode.DEFAULT, EsmClassType.DEFAULT),
    protocol_id=0,
    priority_flag=PriorityFlag.LEVEL_0,
    registered_delivery=RegisteredDelivery(
        RegisteredDeliveryReceipt.SMSC_DELIVERY_RECEIPT_REQUESTED
    ),
    replace_if_present_flag=ReplaceIfPresentFlag.DO_NOT_REPLACE,
    data_coding=DataCoding(
        DataCodingScheme.GSM_MESSAGE_CLASS, 
        DataCodingGsmMsg(
            DataCodingGsmMsgCoding.DEFAULT_ALPHABET, 
            DataCodingGsmMsgClass.CLASS_2
        )
    ),
    short_message=b'HELLO',
)
print(f"PDU: {pdu}")

binary = PDUEncoder().encode(pdu)
hexStr = binascii.b2a_hex(binary)
print(f"HEX: {hexStr}")

# Prints the following:
#
# PDU: PDU [command: submit_sm, sequence_number: 9284, command_status: ESME_ROK
# service_type: 
# source_addr_ton: ALPHANUMERIC
# source_addr_npi: UNKNOWN
# source_addr: mobileway
# dest_addr_ton: INTERNATIONAL
# dest_addr_npi: ISDN
# destination_addr: 1208230
# esm_class: EsmClass[mode: DEFAULT, type: DEFAULT, gsmFeatures: set()]
# protocol_id: 0
# priority_flag: LEVEL_0
# schedule_delivery_time: None
# validity_period: None
# registered_delivery: RegisteredDelivery[receipt: SMSC_DELIVERY_RECEIPT_REQUESTED, smeOriginatedAcks: set(), intermediateNotification: False]
# replace_if_present_flag: DO_NOT_REPLACE
# data_coding: DataCoding[scheme: GSM_MESSAGE_CLASS, schemeData: DataCodingGsmMsg[msgCoding: DEFAULT_ALPHABET, msgClass: CLASS_2]]
# sm_default_msg_id: None
# short_message: b'HELLO'
# ]
# HEX: b'000000360000000400000000000024440005006d6f62696c65776179000101313230383233300000000000000100f2000548454c4c4f'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smpppdu-0.1.1.tar.gz (34.1 kB view details)

Uploaded Source

File details

Details for the file smpppdu-0.1.1.tar.gz.

File metadata

  • Download URL: smpppdu-0.1.1.tar.gz
  • Upload date:
  • Size: 34.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.4

File hashes

Hashes for smpppdu-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d5ebaf992784efc696d1806dc70bbc4e6087fb8d4fc944eea91507c8947855af
MD5 2b8d052b18c2c2f252dcee73d50b8960
BLAKE2b-256 e3a0d8ac441fa6f2e50038e401496cb2d9b43447af6a918dd6c5ac5126be583d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page