mirror of https://gerrit.osmocom.org/pysim
transport: Pass status word interpreter to exception handler
Prior to this patch, any SwMatchError raised within the 'transport' would not be interpreted. EXCEPTION of type 'SwMatchError' occurred with message: 'SW match failed! Expected 9000 and got 6982.' vs (now) EXCEPTION of type 'SwMatchError' occurred with message: 'SW match failed! Expected 9000 and got 6982: Command not allowed - Security status not satisfied' Change-Id: I08b7f2b6bd422f7f2f36094bc8a29b187ff882a6
This commit is contained in:
parent
be9516f157
commit
4f2c546613
|
@ -433,6 +433,8 @@ if __name__ == '__main__':
|
|||
profile.add_application(CardApplicationISIM)
|
||||
|
||||
rs = RuntimeState(card, profile)
|
||||
# inform the transport that we can do context-specific SW interpretation
|
||||
sl.set_sw_interpreter(rs)
|
||||
|
||||
# FIXME: do this dynamically
|
||||
rs.mf.add_file(DF_TELECOM())
|
||||
|
|
|
@ -28,6 +28,12 @@ from pySim.utils import sw_match
|
|||
class LinkBase(object):
|
||||
"""Base class for link/transport to card."""
|
||||
|
||||
sw_interpreter = None
|
||||
|
||||
def set_sw_interpreter(self, interp):
|
||||
"""Set an (optional) status word interpreter."""
|
||||
self.sw_interpreter = interp
|
||||
|
||||
def wait_for_card(self, timeout:int=None, newcardonly:bool=False):
|
||||
"""Wait for a card and connect to it
|
||||
|
||||
|
@ -103,7 +109,7 @@ class LinkBase(object):
|
|||
rv = self.send_apdu(pdu)
|
||||
|
||||
if not sw_match(rv[1], sw):
|
||||
raise SwMatchError(rv[1], sw.lower())
|
||||
raise SwMatchError(rv[1], sw.lower(), self.sw_interpreter)
|
||||
return rv
|
||||
|
||||
def init_reader(opts) -> Optional[LinkBase]:
|
||||
|
|
Loading…
Reference in New Issue