Класс CardChannel
- java.lang.Object
- javax.smartcardio.CardChannel
public abstract class CardChannel extends Object
Логическое соединение канала со смарт-картой. Используется для обмена APDUs со смарт-картой. Объект CardChannel можно получить, вызвав метод Card.getBasicChannel() или Card.openLogicalChannel().
- Since:
- 1.6
- См. также:
-
Card,CommandAPDU,ResponseAPDU
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | CardChannel() | Создаёт новый объект CardChannel. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void | close() | Закрывает этот CardChannel. |
abstract Card | getCard() | Возвращает Card, с которым связан этот канал. |
abstract int | getChannelNumber() | Возвращает номер канала этого CardChannel. |
abstract int | transmit(ByteBuffer command,
ByteBuffer response) | Передаёт команду APDU, хранящуюся в буфере команд ByteBuffer, и получает ответ APDU в буфере ответов response ByteBuffer. |
abstract ResponseAPDU | transmit(CommandAPDU command) | Передаёт указанную команду APDU смарт-карте и возвращает ответ APDU. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitКонструкторы
CardChannel
protected CardChannel()
Создаёт новый объект CardChannel.
Этот конструктор вызывается только подклассами. Приложение должно вызывать методы Card.getBasicChannel() и Card.openLogicalChannel() для получения объекта CardChannel.
Методы
getCard
public abstract Card getCard()
Возвращает Card, с которым связан этот канал.
- Возвращает:
- Card, с которым связан этот канал
getChannelNumber
public abstract int getChannelNumber()
Возвращает номер канала этого CardChannel. Номер канала 0 указывает на базовый логический канал.
- Возвращает:
- номер канала этого CardChannel.
- Исключения:
-
IllegalStateException- если этот канал был закрыт или соответствующий Card был отключен.
transmit
public abstract ResponseAPDU transmit(CommandAPDU command)
throws CardExceptionПередаёт указанную команду APDU смарт-карте и возвращает ответ APDU.
Байт CLA команды APDU автоматически корректируется для соответствия номеру канала этого CardChannel.
Обратите внимание, что этот метод не может использоваться для передачи MANAGE CHANNEL APDUs. Логические каналы должны управляться с помощью методов Card.openLogicalChannel() и CardChannel.close().
Реализации должны прозрачно обрабатывать артефакты протокола передачи. Например, при использовании протокола T=0, следующая обработка должна выполняться, как описано в ISO/IEC 7816-4:
если ответ APDU имеет SW1
61, реализация должна выполнить командуGET RESPONSEс использованиемSW2в полеLe. Этот процесс повторяется до тех пор, пока не будет получен SW161. Тело ответа этих обменов конкатенируется, чтобы сформировать окончательное тело ответа.если ответ APDU
6C XX, реализация должна повторно отправить команду с использованиемXXв полеLe.
ResponseAPDU, возвращаемый этим методом, является результатом после выполнения этой обработки.
- Параметры:
-
command- команда APDU - Возвращает:
- ответ APDU, полученный от карты
- Исключения:
-
IllegalStateException- если этот канал был закрыт или соответствующий Card был отключен. -
IllegalArgumentException- если APDU кодирует командуMANAGE CHANNEL -
NullPointerException- если команда равна null -
CardException- если операция с картой завершилась неудачно
transmit
public abstract int transmit(ByteBuffer command,
ByteBuffer response)
throws CardExceptionПередаёт команду APDU, хранящуюся в буфере команд ByteBuffer, и получает ответ APDU в буфере ответов response ByteBuffer.
Буфер команд должен содержать данные команды APDU, начиная с command.position(), и APDU должен иметь длину command.remaining() байтов. По возвращении позиция буфера команд будет равна его пределу; его предел не изменится. Буфер вывода получит байты ответа APDU. Его позиция будет увеличена на количество полученных байтов, что также является возвращаемым значением этого метода.
Байт CLA команды APDU автоматически корректируется для соответствия номеру канала этого CardChannel.
Обратите внимание, что этот метод не может использоваться для передачи MANAGE CHANNEL APDUs. Логические каналы должны управляться с помощью методов Card.openLogicalChannel() и CardChannel.close().
См. transmit() для обсуждения обработки ответов APDUs со значениями SW1 61 или 6C.
- Параметры:
-
command- буфер, содержащий команду APDU -
response- буфер, который должен получить ответ APDU с карты - Возвращает:
- длина полученного ответа APDU
- Исключения:
-
IllegalStateException- если этот канал был закрыт или соответствующий Card был отключен. -
NullPointerException- если команда или ответ равны null -
ReadOnlyBufferException- если буфер ответа является только для чтения -
IllegalArgumentException- если команда и ответ являются одним и тем же объектом, еслиresponseможет не иметь достаточно места для получения ответа APDU или если APDU кодирует командуMANAGE CHANNEL -
CardException- если операция с картой завершилась неудачно
close
public abstract void close()
throws CardExceptionЗакрывает этот CardChannel. Логический канал закрывается путём выдачи команды MANAGE CHANNEL, которая должна использовать формат [xx 70 80 0n], где n - номер канала этого канала, а xx - байт CLA, который кодирует этот логический канал и все остальные биты которого установлены в 0. После возвращения этого метода вызов других методов в этом классе вызовет IllegalStateException.
Обратите внимание, что базовый логический канал не может быть закрыт с помощью этого метода. Он может быть закрыт путём вызова Card.disconnect(boolean).
- Исключения:
-
CardException- если операция с картой завершилась неудачно -
IllegalStateException- если этот CardChannel представляет подключение к базовому логическому каналу
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.smartcardio/javax/smartcardio/CardChannel.html