[Pcsclite-cvs-commit] r5946 - /trunk/PCSC/src/pcsc-spy.py
rousseau at users.alioth.debian.org
rousseau at users.alioth.debian.org
Fri Sep 9 08:36:48 UTC 2011
Author: rousseau
Date: Fri Sep 9 08:36:46 2011
New Revision: 5946
URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=5946
Log:
Use a PCSCspy class
Modified:
trunk/PCSC/src/pcsc-spy.py
Modified: trunk/PCSC/src/pcsc-spy.py
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/pcsc-spy.py?rev=5946&op=diff
==============================================================================
--- trunk/PCSC/src/pcsc-spy.py (original)
+++ trunk/PCSC/src/pcsc-spy.py Fri Sep 9 08:36:46 2011
@@ -21,307 +21,288 @@
# $Id$
import os
-import atexit
-
-fifo = os.path.expanduser('~/pcsc-spy')
-
-color_red = "\x1b[01;31m"
-color_green = "\x1b[32m"
-color_blue = "\x1b[34m"
-color_magenta = "\x1b[35m"
-color_normal = "\x1b[0m"
-
-
-def cleanup():
- """ cleanup at exit """
- os.unlink(fifo)
-
-
-def parse_rv(line):
- """ parse the return value line """
- (function, rv) = line.split(':')
- if function[0] != '<':
- raise Exception("Wrong line:", line)
-
- return rv
-
-
-def log_rv(f):
- """ log the return value """
- line = f.readline().strip()
- rv = parse_rv(line)
- if not "0x00000000" in rv:
- print color_red + " =>" + rv + color_normal
- else:
- print " =>", rv
-
-
-def log_in(line):
- """ generic log for IN line """
- print color_green + " i " + line + color_normal
-
-
-def log_out(line):
- """ generic log for OUT line """
- print color_magenta + " o " + line + color_normal
-
-
-def log_in_hCard(f):
- """ log hCard IN parameter """
- hContext = f.readline().strip()
- log_in("hCard: %s" % hContext)
-
-
-def log_in_hContext(f):
- """ log hContext IN parameter """
- hContext = f.readline().strip()
- log_in("hContext: %s" % hContext)
-
-
-def log_out_hContext(f):
- """ log hContext OUT parameter """
- hContext = f.readline().strip()
- log_out("hContext: %s" % hContext)
-
-
-def log_in2(header, f):
- """ generic log IN parameter """
- data = f.readline().strip()
- log_in("%s %s" % (header, data))
-
-
-def log_out2(header, f):
- """ generic log OUT parameter """
- data = f.readline().strip()
- log_out("%s %s" % (header, data))
-
-
-def log_out_n_str(size_name, field_name, f):
- """ log multi-lines entries """
- data = f.readline().strip()
- log_out("%s %s" % (size_name, data))
- size = int(data, 16)
- data_read = 0
- while data_read < size:
- data = f.readline().strip()
- log_out("%s %s" % (field_name, data))
- if data == 'NULL':
- break
- data_read += len(data) + 1
-
-
-def log_name(name):
- """ log function name """
- print color_blue + name + color_normal
-
-
-def SCardEstablishContext(f):
- """ SCardEstablishContext """
- log_name("SCardEstablishContext")
- dwScope = f.readline().strip()
- scopes = {0: 'SCARD_SCOPE_USER',
- 1: 'SCARD_SCOPE_TERMINAL',
- 2: 'SCARD_SCOPE_SYSTEM'}
- log_in("dwScope: %s (%s)" % (scopes[int(dwScope, 16)], dwScope))
- log_out_hContext(f)
- log_rv(f)
-
-
-def SCardIsValidContext(f):
- """ SCardIsValidContext """
- log_name("SCardIsValidContext")
- log_in_hContext(f)
- log_rv(f)
-
-
-def SCardReleaseContext(f):
- """ SCardReleaseContext """
- log_name("SCardReleaseContext")
- log_in_hContext(f)
- log_rv(f)
-
-
-def SCardListReaders(f):
- """ SCardListReaders """
- log_name("SCardListReaders")
- log_in_hContext(f)
- log_in2("mszGroups:", f)
- log_out_n_str("pcchReaders:", "mszReaders:", f)
- log_rv(f)
-
-
-def SCardListReaderGroups(f):
- """ SCardListReaderGroups """
- log_name("SCardListReaderGroups")
- log_in_hContext(f)
- log_in2("pcchGroups:", f)
- log_out_n_str("pcchGroups:", "mszGroups:", f)
- log_rv(f)
-
-
-def SCardGetStatusChange(f):
- """ SCardGetStatusChange """
- log_name("SCardGetStatusChange")
- log_in_hContext(f)
- log_in2("dwTimeout:", f)
- log_in2("cReaders:", f)
- log_rv(f)
-
-
-def SCardFreeMemory(f):
- """ SCardFreeMemory """
- log_name("SCardFreeMemory")
- log_in_hContext(f)
- log_in2("pvMem:", f)
- log_rv(f)
-
-
-def SCardConnect(f):
- """ SCardConnect """
- log_name("SCardConnect")
- log_in_hContext(f)
- log_in2("szReader", f)
- log_in2("dwShareMode", f)
- log_in2("dwPreferredProtocols", f)
- log_in2("phCard", f)
- log_in2("pdwActiveProtocol", f)
- log_out2("phCard", f)
- log_out2("pdwActiveProtocol", f)
- log_rv(f)
-
-
-def SCardTransmit(f):
- """ SCardTransmit """
- log_name("SCardTransmit")
- log_in_hCard(f)
- log_in2("bSendBuffer", f)
- log_out2("bRecvBuffer", f)
- log_rv(f)
-
-
-def SCardControl(f):
- """ SCardControl """
- log_name("SCarControl")
- log_in_hCard(f)
- log_in2("dwControlCode", f)
- log_in2("bSendBuffer", f)
- log_out2("bRecvBuffer", f)
- log_rv(f)
-
-
-def SCardGetAttrib(f):
- """ SCardGetAttrib """
- log_name("SCardGetAttrib")
- log_in_hCard(f)
- log_in2("dwAttrId", f)
- log_out2("bAttr", f)
- log_rv(f)
-
-
-def SCardSetAttrib(f):
- """ SCardSetAttrib """
- log_name("SCardSetAttrib")
- log_in_hCard(f)
- log_in2("dwAttrId", f)
- log_in2("bAttr", f)
- log_rv(f)
-
-
-def SCardStatus(f):
- """ SCardStatus """
- log_name("SCardStatus")
- log_in_hCard(f)
- log_in2("pcchReaderLen", f)
- log_in2("pcbAtrLen", f)
- log_out2("cchReaderLen", f)
- log_out2("mszReaderName", f)
- log_out2("dwState", f)
- log_out2("dwProtocol", f)
- log_out2("bAtr", f)
- log_rv(f)
-
-
-def SCardReconnect(f):
- """ SCardReconnect """
- log_name("SCardReconnect")
- log_in_hCard(f)
- log_in2("dwShareMode", f)
- log_in2("dwPreferredProtocols", f)
- log_in2("dwInitialization", f)
- log_out2("dwActiveProtocol", f)
- log_rv(f)
-
-
-def SCardDisconnect(f):
- """" SCardDisconnect """
- log_name("SCardDisconnect")
- log_in_hCard(f)
- log_in2("dwDisposition", f)
- log_rv(f)
+
+
+class PCSCspy(object):
+ """ PC/SC spy """
+
+ color_red = "\x1b[01;31m"
+ color_green = "\x1b[32m"
+ color_blue = "\x1b[34m"
+ color_magenta = "\x1b[35m"
+ color_normal = "\x1b[0m"
+
+ def _parse_rv(self, line):
+ """ parse the return value line """
+ (function, rv) = line.split(':')
+ if function[0] != '<':
+ raise Exception("Wrong line:", line)
+
+ return rv
+
+ def _log_rv(self):
+ """ log the return value """
+ line = self.filedesc.readline().strip()
+ rv = self._parse_rv(line)
+ if not "0x00000000" in rv:
+ print PCSCspy.color_red + " =>" + rv + PCSCspy.color_normal
+ else:
+ print " =>", rv
+
+ def log_in(self, line):
+ """ generic log for IN line """
+ print PCSCspy.color_green + " i " + line + PCSCspy.color_normal
+
+ def log_out(self, line):
+ """ generic log for OUT line """
+ print PCSCspy.color_magenta + " o " + line + PCSCspy.color_normal
+
+ def log_in_hCard(self):
+ """ log hCard IN parameter """
+ hContext = self.filedesc.readline().strip()
+ self.log_in("hCard: %s" % hContext)
+
+ def log_in_hContext(self):
+ """ log hContext IN parameter """
+ hContext = self.filedesc.readline().strip()
+ self.log_in("hContext: %s" % hContext)
+
+ def log_out_hContext(self):
+ """ log hContext OUT parameter """
+ hContext = self.filedesc.readline().strip()
+ self.log_out("hContext: %s" % hContext)
+
+ def log_in2(self, header):
+ """ generic log IN parameter """
+ data = self.filedesc.readline().strip()
+ self.log_in("%s %s" % (header, data))
+
+ def log_out2(self, header):
+ """ generic log OUT parameter """
+ data = self.filedesc.readline().strip()
+ self.log_out("%s %s" % (header, data))
+
+ def log_out_n_str(self, size_name, field_name):
+ """ log multi-lines entries """
+ data = self.filedesc.readline().strip()
+ self.log_out("%s %s" % (size_name, data))
+ size = int(data, 16)
+ data_read = 0
+ while data_read < size:
+ data = self.filedesc.readline().strip()
+ self.log_out("%s %s" % (field_name, data))
+ if data == 'NULL':
+ break
+ data_read += len(data) + 1
+
+ def log_name(self, name):
+ """ log function name """
+ print PCSCspy.color_blue + name + PCSCspy.color_normal
+
+ def _SCardEstablishContext(self):
+ """ SCardEstablishContext """
+ self.log_name("SCardEstablishContext")
+ dwScope = self.filedesc.readline().strip()
+ scopes = {0: 'SCARD_SCOPE_USER',
+ 1: 'SCARD_SCOPE_TERMINAL',
+ 2: 'SCARD_SCOPE_SYSTEM'}
+ self.log_in("dwScope: %s (%s)" % (scopes[int(dwScope, 16)], dwScope))
+ self.log_out_hContext()
+ self._log_rv()
+
+ def _SCardIsValidContext(self):
+ """ SCardIsValidContext """
+ self.log_name("SCardIsValidContext")
+ self.log_in_hContext()
+ self._log_rv()
+
+ def _SCardReleaseContext(self):
+ """ SCardReleaseContext """
+ self.log_name("SCardReleaseContext")
+ self.log_in_hContext()
+ self._log_rv()
+
+ def _SCardListReaders(self):
+ """ SCardListReaders """
+ self.log_name("SCardListReaders")
+ self.log_in_hContext()
+ self.log_in2("mszGroups:")
+ self.log_out_n_str("pcchReaders:", "mszReaders:")
+ self._log_rv()
+
+ def _SCardListReaderGroups(self):
+ """ SCardListReaderGroups """
+ self.log_name("SCardListReaderGroups")
+ self.log_in_hContext()
+ self.log_in2("pcchGroups:")
+ self.log_out_n_str("pcchGroups:", "mszGroups:")
+ self._log_rv()
+
+ def _SCardGetStatusChange(self):
+ """ SCardGetStatusChange """
+ self.log_name("SCardGetStatusChange")
+ self.log_in_hContext()
+ self.log_in2("dwTimeout:")
+ self.log_in2("cReaders:")
+ self._log_rv()
+
+ def _SCardFreeMemory(self):
+ """ SCardFreeMemory """
+ self.log_name("SCardFreeMemory")
+ self.log_in_hContext()
+ self.log_in2("pvMem:")
+ self._log_rv()
+
+ def _SCardConnect(self):
+ """ SCardConnect """
+ self.log_name("SCardConnect")
+ self.log_in_hContext()
+ self.log_in2("szReader")
+ self.log_in2("dwShareMode")
+ self.log_in2("dwPreferredProtocols")
+ self.log_in2("phCard")
+ self.log_in2("pdwActiveProtocol")
+ self.log_out2("phCard")
+ self.log_out2("pdwActiveProtocol")
+ self._log_rv()
+
+ def _SCardTransmit(self):
+ """ SCardTransmit """
+ self.log_name("SCardTransmit")
+ self.log_in_hCard()
+ self.log_in2("bSendBuffer")
+ self.log_out2("bRecvBuffer")
+ self._log_rv()
+
+ def _SCardControl(self):
+ """ SCardControl """
+ self.log_name("SCarControl")
+ self.log_in_hCard()
+ self.log_in2("dwControlCode")
+ self.log_in2("bSendBuffer")
+ self.log_out2("bRecvBuffer")
+ self._log_rv()
+
+ def _SCardGetAttrib(self):
+ """ SCardGetAttrib """
+ self.log_name("SCardGetAttrib")
+ self.log_in_hCard()
+ self.log_in2("dwAttrId")
+ self.log_out2("bAttr")
+ self._log_rv()
+
+ def _SCardSetAttrib(self):
+ """ SCardSetAttrib """
+ self.log_name("SCardSetAttrib")
+ self.log_in_hCard()
+ self.log_in2("dwAttrId")
+ self.log_in2("bAttr")
+ self._log_rv()
+
+ def _SCardStatus(self):
+ """ SCardStatus """
+ self.log_name("SCardStatus")
+ self.log_in_hCard()
+ self.log_in2("pcchReaderLen")
+ self.log_in2("pcbAtrLen")
+ self.log_out2("cchReaderLen")
+ self.log_out2("mszReaderName")
+ self.log_out2("dwState")
+ self.log_out2("dwProtocol")
+ self.log_out2("bAtr")
+ self._log_rv()
+
+ def _SCardReconnect(self):
+ """ SCardReconnect """
+ self.log_name("SCardReconnect")
+ self.log_in_hCard()
+ self.log_in2("dwShareMode")
+ self.log_in2("dwPreferredProtocols")
+ self.log_in2("dwInitialization")
+ self.log_out2("dwActiveProtocol")
+ self._log_rv()
+
+ def _SCardDisconnect(self):
+ """" SCardDisconnect """
+ self.log_name("SCardDisconnect")
+ self.log_in_hCard()
+ self.log_in2("dwDisposition")
+ self._log_rv()
+
+ def __del__(self):
+ """ cleanup """
+ os.unlink(self.fifo)
+
+ def __init__(self):
+ self.fifo = os.path.expanduser('~/pcsc-spy')
+
+ # create the FIFO file
+ try:
+ os.mkfifo(self.fifo)
+ except (OSError):
+ print "fifo %s already present. Reusing it." % self.fifo
+
+ self.filedesc = open(self.fifo, 'r')
+ #import sys
+ #self.filedesc = sys.stdin
+
+ def loop(self):
+ """ loop reading logs """
+
+ # check version
+ version = self.filedesc.readline().strip()
+ if version != "PCSC SPY VERSION: 1":
+ print "Wrong version:", version
+ return
+
+ line = self.filedesc.readline()
+ while line != '':
+ # Enter function?
+ if line[0] != '>':
+ print "Garbage: ", line
+ else:
+ # dispatch
+ fct = line[2:-1]
+ if fct == 'SCardEstablishContext':
+ self._SCardEstablishContext()
+ elif fct == 'SCardReleaseContext':
+ self._SCardReleaseContext()
+ elif fct == 'SCardIsValidContext':
+ self._SCardIsValidContext()
+ elif fct == 'SCardListReaderGroups':
+ self._SCardListReaderGroups()
+ elif fct == 'SCardFreeMemory':
+ self._SCardFreeMemory()
+ elif fct == 'SCardListReaders':
+ self._SCardListReaders()
+ elif fct == 'SCardGetStatusChange':
+ self._SCardGetStatusChange()
+ elif fct == 'SCardConnect':
+ self._SCardConnect()
+ elif fct == 'SCardTransmit':
+ self._SCardTransmit()
+ elif fct == 'SCardControl':
+ self._SCardControl()
+ elif fct == 'SCardGetAttrib':
+ self._SCardGetAttrib()
+ elif fct == 'SCardSetAttrib':
+ self._SCardSetAttrib()
+ elif fct == 'SCardStatus':
+ self._SCardStatus()
+ elif fct == 'SCardReconnect':
+ self._SCardReconnect()
+ elif fct == 'SCardDisconnect':
+ self._SCardDisconnect()
+ else:
+ print "Unknown function:", fct
+
+ line = self.filedesc.readline()
def main():
- # register clean up function
- atexit.register(cleanup)
-
- # create the FIFO file
- try:
- os.mkfifo(fifo)
- except (OSError):
- print "fifo %s already present. Reusing it." % fifo
-
- f = open(fifo, 'r')
- #import sys
- #f = sys.stdin
-
- # check version
- version = f.readline().strip()
- if version != "PCSC SPY VERSION: 1":
- print "Wrong version:", version
- return
-
- line = f.readline()
- while line != '':
- # Enter function?
- if line[0] != '>':
- print "Garbage: ", line
- else:
- # dispatch
- fct = line[2:-1]
- if fct == 'SCardEstablishContext':
- SCardEstablishContext(f)
- elif fct == 'SCardReleaseContext':
- SCardReleaseContext(f)
- elif fct == 'SCardIsValidContext':
- SCardIsValidContext(f)
- elif fct == 'SCardListReaderGroups':
- SCardListReaderGroups(f)
- elif fct == 'SCardFreeMemory':
- SCardFreeMemory(f)
- elif fct == 'SCardListReaders':
- SCardListReaders(f)
- elif fct == 'SCardGetStatusChange':
- SCardGetStatusChange(f)
- elif fct == 'SCardConnect':
- SCardConnect(f)
- elif fct == 'SCardTransmit':
- SCardTransmit(f)
- elif fct == 'SCardControl':
- SCardControl(f)
- elif fct == 'SCardGetAttrib':
- SCardGetAttrib(f)
- elif fct == 'SCardSetAttrib':
- SCardSetAttrib(f)
- elif fct == 'SCardStatus':
- SCardStatus(f)
- elif fct == 'SCardReconnect':
- SCardReconnect(f)
- elif fct == 'SCardDisconnect':
- SCardDisconnect(f)
- else:
- print "Unknown function:", fct
-
- line = f.readline()
+ """ main """
+ spy = PCSCspy()
+ spy.loop()
if __name__ == "__main__":
More information about the Pcsclite-cvs-commit
mailing list