pySIMphonebook.py 文件源码

python
阅读 24 收藏 0 点赞 0 评论 0

项目:SIMreader 作者: stoic1979 项目源码 文件源码
def read(self, *args):
        try:
            self.SIM.gotoFile(self.filepath)
            # Send the get response command, to find out record length
            data, sw = self.SIM.sendAPDUmatchSW("A0C000000F", SW_OK)
            self.recordLength  = int(data[28:30], 16) # Usually 0x20
            # Now we can work out the name length & number of records
            self.nameLength = self.recordLength - 14 # Defined GSM 11.11
            self.numberRecords = int(data[4:8], 16) / self.recordLength
        except:
            pySIMmessage(self, "Unable to find your phonebook on your SIM card.", "SIM card error")
            return

        if not self.SIM.checkAndVerifyCHV1(CHV_READ, data):
            return

        apdu = "A0B2%s04" + IntToHex(self.recordLength)
        dlg = wxskinProgressDialog("Phonebook", "Reading your phonebook entries", self.numberRecords + 1, self, wx.PD_CAN_ABORT | wx.PD_APP_MODAL)
        try:
            hexNameLen = self.nameLength << 1
            for i in range(1, self.numberRecords + 1):
                if not dlg.Update(i):
                    self.abortedRead = 1
                    break
                data, sw = self.SIM.sendAPDUmatchSW(apdu % IntToHex(i), SW_OK)
                # Find the end of the name
                #print data
                if data[0:2] != 'FF':
                    name = GSM3_38ToASCII(unhexlify(data[:hexNameLen]))
                    if ord(name[-1]) > 0x80:
                        # Nokia phones add this as a group identifier. Remove it.
                        name = name[:-1].rstrip()
                    number = ""
                    numberLen = int(data[hexNameLen:hexNameLen+2], 16)
                    if numberLen > 0 and numberLen <= (11): # Includes TON/NPI byte
                        hexNumber = data[hexNameLen+2:hexNameLen+2+(numberLen<<1)]
                        if hexNumber[:2] == '91':
                            number = "+"
                        number += GSMPhoneNumberToString(hexNumber[2:])
                    self.itemDataMap[i] = (name, number)
            self.abortedRead = 0
        except:
            # Finished with the guage
            self.abortedRead = 1
            print_exc()
            pySIMmessage(self, "Unable to read the phonebook on your SIM card.", "SIM card error")
        dlg.Destroy()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号