Ejemplo n.º 1
0
    class Monitoring(Thread):
        def __init__(self, observer, reader):
            Thread.__init__(self)
            self.reader = reader
            self.observer = observer
            self.stopEvent = Event()
            self.stopEvent.clear()
            self.initializedEvent = Event()
            self.initializedEvent.clear()
            self.setDaemon(True)
            self.card = None

        def run(self):
            self.cardrequest = CardRequest(timeout=0.5, readers=[reader])
            while not self.stopEvent.isSet():
                try:
                    card = self.cardrequest.waitforcardevent()
                    if card != self.card:
                        if not card:
                            self.observer.removed()
                        else:
                            self.observer.inserted(card[0])
                    self.card = card
                    self.initializedEvent.set()
                except Exception as e:
                    print >> sys.stderr, "Connection error:", e
Ejemplo n.º 2
0
    class __CardMonitoringThreadSingleton(Thread):
        """The real card monitoring thread class.

        A single instance of this class is created
        by the public CardMonitoringThread class.
        """

        def __init__(self, observable):
            Thread.__init__(self)
            self.observable = observable
            self.stopEvent = Event()
            self.stopEvent.clear()
            self.cards = []
            self.setDaemon(True)

        # the actual monitoring thread
        def run(self):
            """Runs until stopEvent is notified, and notify
            observers of all card insertion/removal.
            """
            self.cardrequest = CardRequest(timeout=0.1)
            while self.stopEvent.isSet() != 1:
                try:
                    currentcards = self.cardrequest.waitforcardevent()

                    addedcards = []
                    for card in currentcards:
                        if not self.cards.__contains__(card):
                            addedcards.append(card)

                    removedcards = []
                    for card in self.cards:
                        if not currentcards.__contains__(card):
                            removedcards.append(card)

                    if addedcards != [] or removedcards != []:
                        self.cards = currentcards
                        self.observable.setChanged()
                        self.observable.notifyObservers(
                            (addedcards, removedcards))

                # when CardMonitoringThread.__del__() is invoked in
                # response to shutdown, e.g., when execution of the
                # program is done, other globals referenced by the
                # __del__() method may already have been deleted.
                # this causes ReaderMonitoringThread.run() to except
                # with a TypeError or AttributeError
                except TypeError:
                    pass
                except AttributeError:
                    pass

                except:
                    # FIXME Tighten the exceptions caught by this block
                    traceback.print_exc()

        # stop the thread by signaling stopEvent
        def stop(self):
            self.stopEvent.set()
Ejemplo n.º 3
0
    class __CardMonitoringThreadSingleton(Thread):
        """The real card monitoring thread class.

        A single instance of this class is created
        by the public CardMonitoringThread class.
        """
        def __init__(self, observable):
            Thread.__init__(self)
            self.observable = observable
            self.stopEvent = Event()
            self.stopEvent.clear()
            self.cards = []
            self.setDaemon(True)

        # the actual monitoring thread
        def run(self):
            """Runs until stopEvent is notified, and notify
            observers of all card insertion/removal.
            """
            self.cardrequest = CardRequest(timeout=0.1)
            while self.stopEvent.isSet() != 1:
                try:
                    currentcards = self.cardrequest.waitforcardevent()

                    addedcards = []
                    for card in currentcards:
                        if not self.cards.__contains__(card):
                            addedcards.append(card)

                    removedcards = []
                    for card in self.cards:
                        if not currentcards.__contains__(card):
                            removedcards.append(card)

                    if addedcards != [] or removedcards != []:
                        self.cards = currentcards
                        self.observable.setChanged()
                        self.observable.notifyObservers(
                            (addedcards, removedcards))

                # when CardMonitoringThread.__del__() is invoked in
                # response to shutdown, e.g., when execution of the
                # program is done, other globals referenced by the
                # __del__() method may already have been deleted.
                # this causes ReaderMonitoringThread.run() to except
                # with a TypeError or AttributeError
                except TypeError:
                    pass
                except AttributeError:
                    pass

                except:
                    # FIXME Tighten the exceptions caught by this block
                    traceback.print_exc()

        # stop the thread by signaling stopEvent
        def stop(self):
            self.stopEvent.set()
Ejemplo n.º 4
0
 def removeAllCards(self):
     print('please remove all inserted smart cards')
     cardrequest = CardRequest()
     while True:
         cards = cardrequest.waitforcardevent()
         if 0 == len(cards):
             break
         time.sleep(.3)
     print('ok')
Ejemplo n.º 5
0
 def removeAllCards(self):
     print 'please remove all inserted smart cards'
     cardrequest = CardRequest()
     while True:
         cards = cardrequest.waitforcardevent()
         if 0 == len(cards):
             break
         time.sleep(.3)
     print 'ok'
Ejemplo n.º 6
0
#
# setup test first: detect current readers and cards
#
print('insert two smartcard readers')
while True:
    readerz = readers()
    if 2 <= len(readerz):
        break
    time.sleep(.3)
for reader in readerz:
    print('\t', reader)

print('insert two cards in the readers')
cardrequest = CardRequest()
while True:
    cardz = cardrequest.waitforcardevent()
    if 2 <= len(cardz):
        break
    time.sleep(.3)
for card in cardz:
    print('\t', toHexString(card.atr))


class testcase_manualCardRequest(unittest.TestCase, CardObserver):
    """Test case for CardRequest."""

    def setUp(self):
        pass

    def tearDown(self):
        pass
Ejemplo n.º 7
0
#
# setup test first: detect current readers and cards
#
print 'insert two smartcard readers'
while True:
    readerz = readers()
    if 2 <= len(readerz):
        break
    time.sleep(.3)
for reader in readerz:
    print '\t', reader

print 'insert two cards in the readers'
cardrequest = CardRequest()
while True:
    cardz = cardrequest.waitforcardevent()
    if 2 <= len(cardz):
        break
    time.sleep(.3)
for card in cardz:
    print '\t', toHexString(card.atr)


class testcase_manualCardRequest(unittest.TestCase, CardObserver):
    """Test case for CardRequest."""

    def setUp(self):
        pass

    def tearDown(self):
        pass