public abstract class CardChannel extends Object
Card
, CommandAPDU
, ResponseAPDU
修飾子 | コンストラクタと説明 |
---|---|
protected |
CardChannel()
新しいCardChannelオブジェクトを構築します。
|
修飾子と型 | メソッドと説明 |
---|---|
abstract void |
close()
このCardChannelをクローズします。
|
abstract Card |
getCard()
このチャネルが関連付けられているカードを返します。
|
abstract int |
getChannelNumber()
このCardChannelのチャネル番号を返します。
|
abstract int |
transmit(ByteBuffer command, ByteBuffer response)
コマンドByteBufferに格納されたコマンドAPDUを送信し、応答ByteBufferにレスポンスAPDUを受信します。
|
abstract ResponseAPDU |
transmit(CommandAPDU command)
指定されたコマンドAPDUをスマート・カードに送信し、レスポンスAPDUを返します。
|
protected CardChannel()
このコンストラクタはサブクラスのみから呼び出されます。アプリケーションでは、Card.getBasicChannel()およびCard.openLogicalChannel()メソッドを呼び出してCardChannelオブジェクトを取得する必要があります。
public abstract Card getCard()
public abstract int getChannelNumber()
IllegalStateException
- このチャネルがクローズしている場合、または対応するカードが切断されている場合。public abstract ResponseAPDU transmit(CommandAPDU command) throws CardException
コマンドAPDUのCLAバイトは、このCardChannelのチャネル番号と一致するよう自動的に調整されます。
このメソッドは、MANAGE CHANNEL
APDUの送信には使用できません。論理チャネルは、Card.openLogicalChannel()およびCardChannel.close()メソッドを使用して管理する必要があります。
実装では、送信プロトコルのアーティファクトが透過的に処理されます。たとえば、T=0プロトコルを使用すると、ISO/IEC 7816-4に記載されているように、次のような処理が行われます。
レスポンスAPDUにSW1 61
がある場合、実装では、Le
フィールドとしてSW2
を使用するGET RESPONSE
コマンドが発行される必要があります。この処理は、SW1 61
が受信されるかぎり繰り返されます。これらの交換の応答本体は、最終的な応答本体を作成するために連結されます。
レスポンスAPDUが6C XX
の場合、実装では、Le
フィールドとしてXX
を使用するコマンドが再発行される必要があります。
このメソッドによって返されるResponseAPDUは、この処理が実行されたあとの結果です。
command
- コマンドAPDUIllegalStateException
- このチャネルがクローズしている場合、または対応するカードが切断されている場合。IllegalArgumentException
- APDUがMANAGE CHANNEL
コマンドをエンコードする場合NullPointerException
- コマンドがnullの場合CardException
- カード操作が失敗した場合public abstract int transmit(ByteBuffer command, ByteBuffer response) throws CardException
コマンド・バッファにはcommand.position()
から始まる有効なコマンドAPDUが含まれている必要があり、APDUの長さはcommand.remaining()
バイトである必要があります。復帰時には、コマンド・バッファの位置はその制限と等しくなります。制限は変更されません。出力バッファは、レスポンスAPDUバイトを受信します。その位置は受信したバイト数だけ増加します。これは、このメソッドの戻り値でもあります。
コマンドAPDUのCLAバイトは、このCardChannelのチャネル番号と一致するよう自動的に調整されます。
このメソッドは、MANAGE CHANNEL
APDUの送信には使用できません。論理チャネルは、Card.openLogicalChannel()およびCardChannel.close()メソッドを使用して管理する必要があります。
SW1値61
または6C
を持つレスポンスAPDUの処理については、transmit()を参照してください。
command
- コマンドAPDUを含むバッファresponse
- カードからレスポンスAPDUを受信するバッファIllegalStateException
- このチャネルがクローズしている場合、または対応するカードが切断されている場合。NullPointerException
- コマンドまたは応答がnullの場合ReadOnlyBufferException
- 応答バッファが読取り専用の場合IllegalArgumentException
- コマンドと応答が同じオブジェクトの場合、response
にレスポンスAPDUを受信するための十分な容量がない可能性がある場合、またはAPDUがMANAGE CHANNEL
コマンドをエンコードする場合CardException
- カード操作が失敗した場合public abstract void close() throws CardException
[xx 70 80 0n]
という形式を使用するMANAGE CHANNEL
コマンドを発行することによってクローズされます。ここで、n
はこのチャネルのチャネル番号であり、xx
は、この論理チャネルをエンコードし、他のすべてのビットが0に設定されているCLA
バイトです。このメソッドが復帰した後、このクラス内のその他のメソッドを呼び出すと、IllegalStateExceptionが発生します。
このメソッドを使用して基本論理チャネルをクローズすることはできません。これは、Card.disconnect(boolean)
を呼び出すことでクローズできます。
CardException
- カード操作が失敗した場合IllegalStateException
- このCardChannelが基本論理チャネルの接続を表す場合
Copyright © 2005, 2018, Oracle and/or its affiliates. All rights reserved.