Я реализовал приложение Andoid - приложение на стороне сервера. Сервер взаимодействует со считывателем смарт-карт. Когда пользователь касается кнопки в приложении Android, создается соединение с сервером для аутентификации пользователя. Обмен сообщениями между приложением и сервером имеет следующий формат:
<type> 0x00 0x00 0x00 <length> 0x00 0x00 0x00 <[data]>
- Если сообщение имеет значение типа
06
, это указывает на ошибку в устройстве чтения смарт-карт. - Если сообщение имеет значение типа
07
, это указывает на ошибку в смарт-карте.
Я использую код, как показано ниже, для связи со считывателем смарт-карт:
// show the list of available terminals
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
// get the first terminal
CardTerminal terminal = terminals.get(0);
// establish a connection with the card
Card card = terminal.connect("T=0");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();
ResponseAPDU r = channel.transmit(new CommandAPDU(c1));
System.out.println("response: " + toString(r.getBytes()));
// disconnect
card.disconnect(false);
API Smart Card IO имеет класс CardException
для исключений. Моя проблема в том, что я не знаю, когда отправлять сообщение типа 06
или 07
, потому что я не могу отличить ошибки, которые генерируются картой, и ошибки, которые генерируются считывателем, когда выбрасывается CardException
. Как я могу это сделать?