HBCIUtils.log("found card terminals:",HBCIUtils.LOG_INFO);
for (CardTerminal t:list) {
HBCIUtils.log(" "+t.getName(),HBCIUtils.LOG_INFO);
}
CardTerminal terminal = null;
// Checken, ob der User einen konkreten Kartenleser vorgegeben hat
String name = HBCIUtils.getParam(getParamHeader()+".pcsc.name",null);
if (name != null)
{
HBCIUtils.log("explicit terminal name given, trying to open terminal: " + name,HBCIUtils.LOG_DEBUG);
terminal = terminals.getTerminal(name);
if (terminal == null)
throw new HBCI_Exception("Kartenleser \"" + name + "\" nicht gefunden");
}
else
{
HBCIUtils.log("open first available card terminal",HBCIUtils.LOG_DEBUG);
terminal = list.get(0);
}
HBCIUtils.log("using card terminal " + terminal.getName(),HBCIUtils.LOG_DEBUG);
// wait for card
if (!terminal.waitForCardPresent(60 * 1000L))
throw new HBCI_Exception("Keine Chipkarte in Kartenleser " + terminal.getName() + " gefunden");
// Hier kann man gemaess
// http://download.oracle.com/javase/6/docs/jre/api/security/smartcardio/spec/javax/smartcardio/CardTerminal.html#connect%28java.lang.String%29
// auch "T=0" oder "T=1" angeben. Wir wissen allerdings noch nicht, von welchem
// Typ die Karte ist. Daher nehmen wir "*" fuer jedes verfuegbare. Wenn wir die
// Karte geoeffnet haben, kriegen wir dann auch das Protokoll raus.
this.smartCard = terminal.connect("*");
String type = this.smartCard.getProtocol();
HBCIUtils.log(" card type: " + type,HBCIUtils.LOG_INFO);
// Card-Service basierend auf dem Kartentyp erzeugen
if (type == null || type.indexOf("=") == -1)