opencard.opt.applet
Class BasicAppletCardService

java.lang.Object
  |
  +--opencard.core.service.CardService
        |
        +--opencard.opt.applet.BasicAppletCardService
Direct Known Subclasses:
AppletProxy

public class BasicAppletCardService
extends opencard.core.service.CardService

This service offers methods to applications or proxies derived from it, which send a given command APDU to the card applet identified by the given application identifier and which return the result APDU. All instances associated with the same physical card share a common state object attached to the the used channel by the first BasicAppletCardService instance. This state object, an instance of CardState, keeps track of the currently selected applet and is used by BasicAppletCardServices to avoid unnecessary selection of applets.

Since:
OCF1.2
See Also:
CardServiceScheduler, CardChannel, AppletID

Constructor Summary
BasicAppletCardService()
           
 
Method Summary
protected  AppletSelector getAppletSelector()
          Get the applet selector.
protected  CardState getCardState(opencard.core.service.CardChannel channel)
          Gets the associated state object.
protected  void initialize(opencard.core.service.CardServiceScheduler scheduler, opencard.core.service.SmartCard card, boolean blocking)
          Instantiates a BasicAppletCardService and tie it both to its CardServiceScheduler and its using SmartCard object.
 opencard.core.terminal.ResponseAPDU sendCommandAPDU(AppletID appletID, opencard.core.terminal.CommandAPDU commandAPDU)
          Sends a CommandAPDU to the applet on the card that has the given application identifier.
protected  opencard.core.terminal.ResponseAPDU sendCommandAPDU(opencard.core.service.CardChannel channel, AppletID appletID, opencard.core.terminal.CommandAPDU commandAPDU)
          Sends a CommandAPDU to the applet on the card that has the given application identifier using the given channel.
protected  opencard.core.terminal.ResponseAPDU sendVerifiedAPDU(opencard.core.service.CardChannel channel, AppletID appletID, opencard.core.terminal.CommandAPDU verificationAPDU, opencard.core.terminal.CHVControl chvControl, int timeout)
          Send a verify CHV command APDU to the card applet with the given application identifier after filling in the password obtained from the CHV dialog currently associated with this card service.
protected  void setAppletSelector(AppletSelector s)
          Set the applet selector. Subclasses may need to redefine the way applet selection is performed.
 
Methods inherited from class opencard.core.service.CardService
allocateCardChannel, getCard, getCardChannel, getCHVDialog, releaseCardChannel, setCardChannel, setCHVDialog
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BasicAppletCardService

public BasicAppletCardService()
Method Detail

getAppletSelector

protected AppletSelector getAppletSelector()
Get the applet selector.

Returns:
A helper object that implements the "AppletSelector" interface.

getCardState

protected CardState getCardState(opencard.core.service.CardChannel channel)
Gets the associated state object. We store the CardState in the same way as the state of an applet proxy or applet. This has the advantage that the state is guaranteed to exist only once per card channel and thus per card.
Returns:
The state object representing the state of the card.

initialize

protected void initialize(opencard.core.service.CardServiceScheduler scheduler,
                          opencard.core.service.SmartCard card,
                          boolean blocking)
                   throws opencard.core.service.CardServiceException
Instantiates a BasicAppletCardService and tie it both to its CardServiceScheduler and its using SmartCard object.
Parameters:
scheduler - The scheduler of this CardExecutiveCardService.
card - The controlling SmartCard object.
blocking - Specify the wait behavior for obtaining a CardChannel from the CardServiceScheduler.
Overrides:
initialize in class opencard.core.service.CardService

sendCommandAPDU

protected opencard.core.terminal.ResponseAPDU sendCommandAPDU(opencard.core.service.CardChannel channel,
                                                              AppletID appletID,
                                                              opencard.core.terminal.CommandAPDU commandAPDU)
                                                       throws opencard.core.terminal.CardTerminalException,
                                                              opencard.core.service.CardServiceException
Sends a CommandAPDU to the applet on the card that has the given application identifier using the given channel.
Parameters:
channel - channel to be used for sending APDUs to the smart card
appletID - application identifier of destination applet
commandAPDU - CommandAPDU to send
Returns:
The resulting ResponseAPDU as received from the card.

sendCommandAPDU

public opencard.core.terminal.ResponseAPDU sendCommandAPDU(AppletID appletID,
                                                           opencard.core.terminal.CommandAPDU commandAPDU)
                                                    throws opencard.core.terminal.CardTerminalException,
                                                           opencard.core.service.CardServiceException
Sends a CommandAPDU to the applet on the card that has the given application identifier.
Parameters:
appletID - application identifier of destination applet
commandAPDU - CommandAPDU to send
Returns:
The resulting ResponseAPDU as received from the card.

sendVerifiedAPDU

protected opencard.core.terminal.ResponseAPDU sendVerifiedAPDU(opencard.core.service.CardChannel channel,
                                                               AppletID appletID,
                                                               opencard.core.terminal.CommandAPDU verificationAPDU,
                                                               opencard.core.terminal.CHVControl chvControl,
                                                               int timeout)
                                                        throws opencard.core.service.CardServiceException,
                                                               opencard.core.terminal.CardTerminalException
Send a verify CHV command APDU to the card applet with the given application identifier after filling in the password obtained from the CHV dialog currently associated with this card service.
Parameters:
channel - The CardChannel to be used for sending the command APDU.
appletID - The application identifier of the applet to which the verification APDU shall be sent.
verificationAPDU - The command APDU for password verification into which the password shall be inserted.
chvControl - The CHV control to be used for password input.
timeout - The timeout to be used.
Returns:
The response APDU returned by the card as response to the verify password command.

setAppletSelector

protected void setAppletSelector(AppletSelector s)
Set the applet selector.

Subclasses may need to redefine the way applet selection is performed. They can do that by specifying a class implementing "AppletSelector" and call setAppletSelector with a new helper object that will be used in place of the default ISO implementation.