def parseFile(filename): global input_file input_file = open(filename) #input_file = open(sys.argv[1]) #text = input_file.readlines() text_head = input_file.readline() print text_head progress = True dun_data = None while True: if progress == True: dun_data = put_DUNtext() progress = False txt = "Print single Info (1)\n"\ "Print single Blob (2)\n"\ "Decode PDU message (3)\n"\ "Add record to opened base (4)\n"\ "Stop (ESC)\n"\ "Next (Enter or Space): " if dun_data.info == 'OK': print "Parse completed!\n" break sys.stdout.write(txt) c = fixes.getch() print ord(c) #c = raw_input('Press y to continue, or n to exit: ') if c.upper() == '1': print "Entered 1" elif c.upper() == '2': print "Entered 2" elif c.upper() == '3': print "Entered 3" #print dun_data.info #print dun_data.data # Parses PDU packet dun_bin = dun_data.data.decode("hex") parsePDU(dun_bin) elif c.upper() == '4': print "Entered 4" global g_base_dbs g_base_dbs.insertSMS(pdu_bin=dun_bin) elif c == chr(27): break else: #print "Enter correct data" print "Entered any other key" progress = True
def decodeTest(cmd_idx, data=None): import struct, binascii if cmd_idx == '1': f_data = None is_file = False if data: f_data = data else: f = open('1_MPA3_001.bkp', 'rb') # SMS f_data = f.read() is_file = True f_len = len(f_data) idx = 0 pdu = True while True: #idx = 3 # 0, 1, 2, 3, ... pkt = f_data[ 0+(idx)*(186): 186+(idx)*(186)] pkt_one = pkt[ 0: 1] i = pkt.index('\xff') t_test = pkt[ 0: 176] import re import datetime #from datetime import * #from dateutil import * #from dateutil.tz import * from dateutil import tz #object = re.compile( ur"(.)\1{1,}$" ) #result = object.finditer( u"hellowffffff" ) #object = re.compile( b"(.)\xFF{1,}$" ) #result = object.finditer( b"\xAA\xBB\xCC\xDD\xDD\xEE\xAB\xFF\xFF" ) object = re.compile( b"(.)\xFF{1,}$" ) result = object.finditer( t_test ) group_name_by_index = dict( [ (v, k) for k, v in object.groupindex.items() ] ) print group_name_by_index for match in result : #vv1 = match.groups() #vvv = match.span( vv1[0] + 1 ) #print "vvv[0]: " + vvv[0] for group_index, group in enumerate( match.groups() ) : if group : print "text: %s" % group print "position: %d, %d" % match.span( group_index + 1 ) vv = match.span( group_index + 1 ) print vv[0]+1 i = vv[0]+1 #print "group: %s" % group_name_by_index[ group_index + 1 ] else: i = 176 t_data = pkt[ 1: i] #j = pkt.rfind('\xff') + 1 #pkt__ff = pkt[ i: j] #pkt_two = pkt[ j:186] pkt__ff = pkt[ i:176] pkt_two = pkt[176:186] h_data = t_data.encode('hex') print " index " + str(idx) print " pkt_one: " + pkt_one.encode('hex') print " t_data: " + h_data print " len(t_data): " + str(len(t_data)) print " pkt__ff: " + pkt__ff.encode('hex') print " pkt_two: " + pkt_two.encode('hex') pkt_two_datetime = pkt_two[0:4] pkt_two_datetime_r = pkt_two_datetime[::-1] pkt_two_datetime_h = pkt_two_datetime_r.encode('hex') recoverstamp = struct.unpack('<L', pkt_two_datetime)[0] recovernow = datetime.datetime.fromtimestamp(recoverstamp) #recovernow = datetime.fromtimestamp(recoverstamp) recovernow_str = recovernow.strftime("%Y-%m-%d %H:%M:%S") # auto-detect zones: utc_zone = tz.tzutc() local_zone = tz.tzlocal() recovernow = recovernow.replace(tzinfo=local_zone) recovernow_2 = recovernow.astimezone(utc_zone) recovernow_str_2 = recovernow_2.strftime("%Y-%m-%d %H:%M:%S") print " - datetime: " + pkt_two_datetime_h \ + ' (' + str(recoverstamp) + ') ' \ + recovernow_str_2 if pdu == True and len(t_data)>0 and (pkt_one=='\x01' or pkt_one=='\x05'): parsePDU(t_data) txt = "Print prev packet (1)\n"\ "Print next packet (2)\n"\ "Decode/No PDU message (3)\n"\ "Add to opened base (4)\n"\ "Stop (ESC)\n" sys.stdout.write(txt) c = fixes.getch() if c.upper() == '1': if idx > 0: idx = idx - 1 elif c.upper() == '2': if 186+(idx)*(186) < f_len: idx = idx + 1 elif c.upper() == '3': pdu = not pdu elif c.upper() == '4': global g_base_dbs g_base_dbs.insertSMS(pdu_bin=t_data) print "Success added sms to opened base" elif c == chr(27): break else: #print "Enter correct data" print "Entered any other key" if is_file: f.close() elif cmd_idx == '2': f = open('MP0C_004.bkp', 'rb') # ? Ext Phonebook f_data = f.read() f_len = len(f_data) f.close() elif cmd_idx == '3': f = open('MPD1_001.bkp', 'rb') # Phonebook f_data = f.read() f_len = len(f_data) f.close() else: print "Enter actual command"