diff --git a/pySim-smpp2sim.py b/pySim-smpp2sim.py index f7a45f5a..95b9ccd5 100755 --- a/pySim-smpp2sim.py +++ b/pySim-smpp2sim.py @@ -55,6 +55,7 @@ from pySim.transport import LinkBase, ProactiveHandler, argparse_add_reader_args from pySim.commands import SimCardCommands from pySim.cards import UiccCardBase from pySim.exceptions import * +from pySim.cat import sms_pp_download_envelope from pySim.cat import ProactiveCommand, SendShortMessage, SMS_TPDU, SMSPPDownload, BearerDescription from pySim.cat import DeviceIdentities, Address, OtherAddress, UiccTransportLevel, BufferSize from pySim.cat import ChannelStatus, ChannelData, ChannelDataLength @@ -169,10 +170,7 @@ class MyServer: tpdu = SMS_DELIVER.from_smpp_submit(pdu) logger.info(tpdu) # 2) wrap into the CAT ENVELOPE for SMS-PP-Download - tpdu_ie = SMS_TPDU(decoded={'tpdu': b2h(tpdu.to_bytes())}) - addr_ie = Address(decoded={'ton_npi': {'ext':False, 'type_of_number':'unknown', 'numbering_plan_id':'unknown'}, 'call_number': '0123456'}) - dev_ids = DeviceIdentities(decoded={'source_dev_id': 'network', 'dest_dev_id': 'uicc'}) - sms_dl = SMSPPDownload(children=[dev_ids, addr_ie, tpdu_ie]) + sms_dl = sms_pp_download_envelope(tpdu) # 3) send to the card envelope_hex = b2h(sms_dl.to_tlv()) logger.info("ENVELOPE: %s" % envelope_hex) diff --git a/pySim/cat.py b/pySim/cat.py index d755545a..89590040 100644 --- a/pySim/cat.py +++ b/pySim/cat.py @@ -763,6 +763,22 @@ class SMSPPDownload(BER_TLV_IE, tag=0xD1, nested=[DeviceIdentities, Address, SMS_TPDU]): pass + +def sms_pp_download_envelope(tpdu, call_number: str = '0123456') -> SMSPPDownload: + """TS 31.111 Section 7.1.1.2 wrap of a SMS-DELIVER TPDU in the ENVELOPE (SMS-PP Download) + call_number : + SMSC address to report, defined in TS 31.111 7.1.1.2 as + "the RP_Originating_Address of the Service Centre (TS-Service-Centre-Address, 3GPP TS 24.011)" + its presence is Conditional, and the note there says the UICC should be fine + if its missing, so for remote management its presence should suffice (?). + """ + return SMSPPDownload(children=[ + DeviceIdentities(decoded={'source_dev_id': 'network', 'dest_dev_id': 'uicc'}), + Address(decoded={'ton_npi': {'ext': False, 'type_of_number': 'unknown', + 'numbering_plan_id': 'unknown'}, + 'call_number': call_number}), + SMS_TPDU(decoded={'tpdu': b2h(tpdu.to_bytes())})]) + # TS 101 220 Table 7.17 + 31.111 7.1.1.3 class SMSCBDownload(BER_TLV_IE, tag=0xD2, nested=[DeviceIdentities, CBSPage]):