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)))
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)))
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)