Example #1
0
    def _process_message(self, data):
        # Now get message body
        msgl = data.pop(0)
        msg = encode_bytes(data[:msgl])
        # check for header
        headlen = ud_len = 0

        if self.mtype & 0x40:  # UDHI present
            ud_len = data.pop(0)
            self.udh = UserDataHeader.from_bytes(data[:ud_len])
            headlen = (ud_len + 1) * 8
            if self.fmt == 0x00:
                while headlen % 7:
                    headlen += 1
                headlen /= 7

            headlen = int(headlen)

        if self.fmt == 0x00:
            # XXX: Use unpack_msg2
            data = data[ud_len:].tolist()
            #self.text = unpack_msg2(data).decode("gsm0338")
            self.text = unpack_msg(msg)[headlen:msgl].decode("gsm0338")

        elif self.fmt == 0x04:
            self.text = data[ud_len:].tostring()

        elif self.fmt == 0x08:
            data = data[ud_len:].tolist()
            _bytes = [int("%02X%02X" % (data[i], data[i + 1]), 16)
                            for i in range(0, len(data), 2)]
            self.text = u''.join(list(map(unichr, _bytes)))
Example #2
0
    def _process_message(self, data):
        # Now get message body
        msgl = data.pop(0)
        msg = encode_bytes(data[:msgl])
        # check for header
        headlen = ud_len = 0

        if self.mtype & 0x40:  # UDHI present
            ud_len = data.pop(0)
            self.udh = UserDataHeader.from_bytes(data[:ud_len])
            headlen = (ud_len + 1) * 8
            if self.fmt == 0x00:
                while headlen % 7:
                    headlen += 1
                headlen /= 7

            headlen = int(headlen)

        if self.fmt == 0x00:
            self.text = unpack_msg(msg)[headlen:msgl].decode("gsm0338")

        elif self.fmt == 0x04:
            self.text = data[ud_len:].tobytes()

        elif self.fmt == 0x08:
            data = data[ud_len:].tolist()
            _bytes = [
                int("%02X%02X" % (data[i], data[i + 1]), 16)
                for i in range(0, len(data), 2)
            ]
            self.text = ''.join(list(map(chr, _bytes)))
Example #3
0
    def test_user_data_header(self):
        data = to_array("08049f8e020105040b8423f0")
        udh = UserDataHeader.from_bytes(data)

        self.assertEqual(udh.concat.seq, 1)
        self.assertEqual(udh.concat.cnt, 2)
        self.assertEqual(udh.concat.ref, 40846)
        self.assertEqual(udh.ports.dest_port, 2948)
        self.assertEqual(udh.ports.orig_port, 9200)

        data = to_array("0003190201")
        udh = UserDataHeader.from_bytes(data)

        self.assertEqual(udh.concat.seq, 1)
        self.assertEqual(udh.concat.cnt, 2)
        self.assertEqual(udh.concat.ref, 25)