Example #1
0
    def test_submit_sm_multipart_sar(self):
        transport, protocol = yield self.setup_bind(config={
            'send_multipart_sar': True,
        })
        long_message = 'This is a long message.' * 20
        seq_nums = yield protocol.submit_csm_sar(
            'abc123', 'dest_addr', short_message=long_message)
        pdus = yield wait_for_pdus(transport, 4)
        # seq no 1 == bind_transceiver, 2 == enquire_link, 3 == sar_msg_ref_num
        self.assertEqual([4, 5, 6, 7], seq_nums)
        msg_parts = []
        msg_refs = []

        for i, sm in enumerate(pdus):
            pdu_opts = unpacked_pdu_opts(sm)
            mandatory_parameters = sm['body']['mandatory_parameters']

            self.assertEqual('submit_sm', sm['header']['command_id'])
            msg_parts.append(mandatory_parameters['short_message'])
            self.assertTrue(len(mandatory_parameters['short_message']) <= 130)
            msg_refs.append(pdu_opts['sar_msg_ref_num'])
            self.assertEqual(i + 1, pdu_opts['sar_segment_seqnum'])
            self.assertEqual(4, pdu_opts['sar_total_segments'])

        self.assertEqual(long_message, ''.join(msg_parts))
        self.assertEqual([3, 3, 3, 3], msg_refs)

        stored_ids = yield self.lookup_message_ids(protocol, seq_nums)
        self.assertEqual(['abc123'] * len(seq_nums), stored_ids)
Example #2
0
    def handle_ussd_pdu(self, pdu):
        pdu_params = pdu['body']['mandatory_parameters']
        pdu_opts = unpacked_pdu_opts(pdu)

        if not detect_ussd(pdu_opts):
            return succeed(False)

        # We have a USSD message.
        d = self.handle_deliver_sm_ussd(pdu, pdu_params, pdu_opts)
        d.addCallback(lambda _: True)
        return d
Example #3
0
    def handle_ussd_pdu(self, pdu):
        pdu_params = pdu['body']['mandatory_parameters']
        pdu_opts = unpacked_pdu_opts(pdu)

        if not detect_ussd(pdu_opts):
            return succeed(False)

        # We have a USSD message.
        d = self.handle_deliver_sm_ussd(pdu, pdu_params, pdu_opts)
        d.addCallback(lambda _: True)
        return d
Example #4
0
    def decode_pdus(self, pdus):
        content = []
        for pdu in pdus:
            pdu_params = pdu["body"]["mandatory_parameters"]
            pdu_opts = unpacked_pdu_opts(pdu)

            # We might have a `message_payload` optional field to worry about.
            message_payload = pdu_opts.get("message_payload", None)
            if message_payload is not None:
                short_message = message_payload.decode("hex")
            else:
                short_message = pdu_params["short_message"]

            content.append(self.dcs_decode(short_message, pdu_params["data_coding"]))
        return content
Example #5
0
    def test_submit_sm_long(self):
        transport, protocol = yield self.setup_bind()
        long_message = 'This is a long message.' * 20
        seq_nums = yield protocol.submit_sm_long(
            'abc123', 'dest_addr', long_message)
        [submit_sm] = yield wait_for_pdus(transport, 1)
        pdu_opts = unpacked_pdu_opts(submit_sm)

        self.assertEqual('submit_sm', submit_sm['header']['command_id'])
        self.assertEqual(
            None, submit_sm['body']['mandatory_parameters']['short_message'])
        self.assertEqual(''.join('%02x' % ord(c) for c in long_message),
                         pdu_opts['message_payload'])
        stored_ids = yield self.lookup_message_ids(protocol, seq_nums)
        self.assertEqual(['abc123'], stored_ids)
Example #6
0
    def decode_pdus(self, pdus):
        content = []
        for pdu in pdus:
            pdu_params = pdu['body']['mandatory_parameters']
            pdu_opts = unpacked_pdu_opts(pdu)

            # We might have a `message_payload` optional field to worry about.
            message_payload = pdu_opts.get('message_payload', None)
            if message_payload is not None:
                short_message = message_payload.decode('hex')
            else:
                short_message = pdu_params['short_message']

            content.append(
                self.dcs_decode(short_message, pdu_params['data_coding']))
        return content
Example #7
0
    def decode_pdus(self, pdus):
        content = []
        for pdu in pdus:
            pdu_params = pdu['body']['mandatory_parameters']
            pdu_opts = unpacked_pdu_opts(pdu)

            # We might have a `message_payload` optional field to worry about.
            message_payload = pdu_opts.get('message_payload', None)
            if message_payload is not None:
                short_message = message_payload.decode('hex')
            else:
                short_message = pdu_params['short_message']

            content.append(
                self.dcs_decode(short_message, pdu_params['data_coding']))
        return content
Example #8
0
    def _handle_delivery_report_optional_params(self, pdu):
        """
        Check if this might be a delivery report with optional PDU parameters.

        If so, handle it and return a deferred ``True``, otherwise return a
        deferred ``False``.
        """
        pdu_opts = unpacked_pdu_opts(pdu)
        receipted_message_id = pdu_opts.get("receipted_message_id", None)
        message_state = pdu_opts.get("message_state", None)
        if receipted_message_id is None or message_state is None:
            return succeed(False)

        status = self.STATUS_MAP.get(message_state, "UNKNOWN")

        d = self.transport.handle_delivery_report(
            receipted_message_id=receipted_message_id, delivery_status=self.delivery_status(status)
        )
        d.addCallback(lambda _: True)
        return d
Example #9
0
    def _handle_delivery_report_optional_params(self, pdu):
        """
        Check if this might be a delivery report with optional PDU parameters.

        If so, handle it and return a deferred ``True``, otherwise return a
        deferred ``False``.
        """
        pdu_opts = unpacked_pdu_opts(pdu)
        receipted_message_id = pdu_opts.get('receipted_message_id', None)
        message_state = pdu_opts.get('message_state', None)
        if receipted_message_id is None or message_state is None:
            return succeed(False)

        status = self.STATUS_MAP.get(message_state, 'UNKNOWN')

        d = self.transport.handle_delivery_report(
            receipted_message_id=receipted_message_id,
            delivery_status=self.delivery_status(status))
        d.addCallback(lambda _: True)
        return d
Example #10
0
    def handle_delivery_report_pdu(self, pdu):
        """
        Check if this might be a delivery receipt with PDU parameters.

        There's a chance we'll get a delivery receipt without these
        parameters, if that happens we'll try a regex match in
        ``inspect_delivery_report_content`` once the message
        has (potentially) been reassembled and decoded.
        """
        pdu_opts = unpacked_pdu_opts(pdu)
        receipted_message_id = pdu_opts.get('receipted_message_id', None)
        message_state = pdu_opts.get('message_state', None)
        if receipted_message_id is None or message_state is None:
            return succeed(False)

        status = self.STATUS_MAP.get(message_state, 'UNKNOWN')

        d = self.transport.handle_delivery_report(
            receipted_message_id=receipted_message_id,
            delivery_status=self.delivery_status(status))
        d.addCallback(lambda _: True)
        return d
Example #11
0
    def handle_delivery_report_pdu(self, pdu):
        """
        Check if this might be a delivery receipt with PDU parameters.

        There's a chance we'll get a delivery receipt without these
        parameters, if that happens we'll try a regex match in
        ``inspect_delivery_report_content`` once the message
        has (potentially) been reassembled and decoded.
        """
        pdu_opts = unpacked_pdu_opts(pdu)
        receipted_message_id = pdu_opts.get('receipted_message_id', None)
        message_state = pdu_opts.get('message_state', None)
        if receipted_message_id is None or message_state is None:
            return succeed(False)

        status = self.STATUS_MAP.get(message_state, 'UNKNOWN')

        d = self.transport.handle_delivery_report(
            receipted_message_id=receipted_message_id,
            delivery_status=self.delivery_status(status))
        d.addCallback(lambda _: True)
        return d
Example #12
0
def pdu_tlv(pdu, tag):
    return unpacked_pdu_opts(pdu)[tag]
Example #13
0
def pdu_tlv(pdu, tag):
    return unpacked_pdu_opts(pdu)[tag]