final class sun.security.smartcardio.ChannelImpl extends javax.smartcardio.CardChannel
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: sun.security.smartcardio.ChannelImpl
super_class: javax.smartcardio.CardChannel
{
private final sun.security.smartcardio.CardImpl card;
descriptor: Lsun/security/smartcardio/CardImpl;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final int channel;
descriptor: I
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private volatile boolean isClosed;
descriptor: Z
flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
private static final boolean t0GetResponse;
descriptor: Z
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final boolean t1GetResponse;
descriptor: Z
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final boolean t1StripLe;
descriptor: Z
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final int RESPONSE_ITERATIONS;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 256
private static final byte[] B0;
descriptor: [B
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: ldc "sun.security.smartcardio.t0GetResponse"
iconst_1
invokestatic sun.security.smartcardio.ChannelImpl.getBooleanProperty:(Ljava/lang/String;Z)Z
1: putstatic sun.security.smartcardio.ChannelImpl.t0GetResponse:Z
2: ldc "sun.security.smartcardio.t1GetResponse"
iconst_1
invokestatic sun.security.smartcardio.ChannelImpl.getBooleanProperty:(Ljava/lang/String;Z)Z
3: putstatic sun.security.smartcardio.ChannelImpl.t1GetResponse:Z
4: ldc "sun.security.smartcardio.t1StripLe"
iconst_0
invokestatic sun.security.smartcardio.ChannelImpl.getBooleanProperty:(Ljava/lang/String;Z)Z
5: putstatic sun.security.smartcardio.ChannelImpl.t1StripLe:Z
6: iconst_0
newarray 8
putstatic sun.security.smartcardio.ChannelImpl.B0:[B
return
LocalVariableTable:
Start End Slot Name Signature
void <init>(sun.security.smartcardio.CardImpl, int);
descriptor: (Lsun/security/smartcardio/CardImpl;I)V
flags: (0x0000)
Code:
stack=2, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokespecial javax.smartcardio.CardChannel.<init>:()V
1: aload 0
aload 1
putfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
2: aload 0
iload 2
putfield sun.security.smartcardio.ChannelImpl.channel:I
3: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lsun/security/smartcardio/ChannelImpl;
0 4 1 card Lsun/security/smartcardio/CardImpl;
0 4 2 channel I
MethodParameters:
Name Flags
card
channel
void checkClosed();
descriptor: ()V
flags: (0x0000)
Code:
stack=3, locals=1, args_size=1
start local 0 0: aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
invokevirtual sun.security.smartcardio.CardImpl.checkState:()V
1: aload 0
getfield sun.security.smartcardio.ChannelImpl.isClosed:Z
ifeq 3
2: new java.lang.IllegalStateException
dup
ldc "Logical channel has been closed"
invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
athrow
3: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lsun/security/smartcardio/ChannelImpl;
public javax.smartcardio.Card getCard();
descriptor: ()Ljavax/smartcardio/Card;
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lsun/security/smartcardio/ChannelImpl;
public int getChannelNumber();
descriptor: ()I
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokevirtual sun.security.smartcardio.ChannelImpl.checkClosed:()V
1: aload 0
getfield sun.security.smartcardio.ChannelImpl.channel:I
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lsun/security/smartcardio/ChannelImpl;
private static void checkManageChannel(byte[]);
descriptor: ([B)V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: aload 0
arraylength
iconst_4
if_icmpge 4
1: new java.lang.IllegalArgumentException
dup
2: ldc "Command APDU must be at least 4 bytes long"
3: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
4: StackMap locals:
StackMap stack:
aload 0
iconst_0
baload
iflt 8
aload 0
iconst_1
baload
bipush 112
if_icmpne 8
5: new java.lang.IllegalArgumentException
dup
6: ldc "Manage channel command not allowed, use openLogicalChannel()"
7: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
8: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 b [B
MethodParameters:
Name Flags
b
public javax.smartcardio.ResponseAPDU transmit(javax.smartcardio.CommandAPDU);
descriptor: (Ljavax/smartcardio/CommandAPDU;)Ljavax/smartcardio/ResponseAPDU;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=4, args_size=2
start local 0 start local 1 0: aload 0
invokevirtual sun.security.smartcardio.ChannelImpl.checkClosed:()V
1: aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
invokevirtual sun.security.smartcardio.CardImpl.checkExclusive:()V
2: aload 1
invokevirtual javax.smartcardio.CommandAPDU.getBytes:()[B
astore 2
start local 2 3: aload 0
aload 2
invokevirtual sun.security.smartcardio.ChannelImpl.doTransmit:([B)[B
astore 3
start local 3 4: new javax.smartcardio.ResponseAPDU
dup
aload 3
invokespecial javax.smartcardio.ResponseAPDU.<init>:([B)V
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lsun/security/smartcardio/ChannelImpl;
0 5 1 command Ljavax/smartcardio/CommandAPDU;
3 5 2 commandBytes [B
4 5 3 responseBytes [B
Exceptions:
throws javax.smartcardio.CardException
MethodParameters:
Name Flags
command
public int transmit(java.nio.ByteBuffer, java.nio.ByteBuffer);
descriptor: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokevirtual sun.security.smartcardio.ChannelImpl.checkClosed:()V
1: aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
invokevirtual sun.security.smartcardio.CardImpl.checkExclusive:()V
2: aload 1
ifnull 3
aload 2
ifnonnull 4
3: StackMap locals:
StackMap stack:
new java.lang.NullPointerException
dup
invokespecial java.lang.NullPointerException.<init>:()V
athrow
4: StackMap locals:
StackMap stack:
aload 2
invokevirtual java.nio.ByteBuffer.isReadOnly:()Z
ifeq 6
5: new java.nio.ReadOnlyBufferException
dup
invokespecial java.nio.ReadOnlyBufferException.<init>:()V
athrow
6: StackMap locals:
StackMap stack:
aload 1
aload 2
if_acmpne 10
7: new java.lang.IllegalArgumentException
dup
8: ldc "command and response must not be the same object"
9: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
10: StackMap locals:
StackMap stack:
aload 2
invokevirtual java.nio.ByteBuffer.remaining:()I
sipush 258
if_icmpge 14
11: new java.lang.IllegalArgumentException
dup
12: ldc "Insufficient space in response buffer"
13: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
14: StackMap locals:
StackMap stack:
aload 1
invokevirtual java.nio.ByteBuffer.remaining:()I
newarray 8
astore 3
start local 3 15: aload 1
aload 3
invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
pop
16: aload 0
aload 3
invokevirtual sun.security.smartcardio.ChannelImpl.doTransmit:([B)[B
astore 4
start local 4 17: aload 2
aload 4
invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
pop
18: aload 4
arraylength
ireturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 19 0 this Lsun/security/smartcardio/ChannelImpl;
0 19 1 command Ljava/nio/ByteBuffer;
0 19 2 response Ljava/nio/ByteBuffer;
15 19 3 commandBytes [B
17 19 4 responseBytes [B
Exceptions:
throws javax.smartcardio.CardException
MethodParameters:
Name Flags
command
response
private static boolean getBooleanProperty(java.lang.String, boolean);
descriptor: (Ljava/lang/String;Z)Z
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=5, locals=3, args_size=2
start local 0 start local 1 0: new sun.security.action.GetPropertyAction
dup
aload 0
invokespecial sun.security.action.GetPropertyAction.<init>:(Ljava/lang/String;)V
invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
checkcast java.lang.String
astore 2
start local 2 1: aload 2
ifnonnull 3
2: iload 1
ireturn
3: StackMap locals: java.lang.String
StackMap stack:
aload 2
ldc "true"
invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
ifeq 5
4: iconst_1
ireturn
5: StackMap locals:
StackMap stack:
aload 2
ldc "false"
invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
ifeq 7
6: iconst_0
ireturn
7: StackMap locals:
StackMap stack:
new java.lang.IllegalArgumentException
dup
8: new java.lang.StringBuilder
dup
aload 0
invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
ldc " must be either 'true' or 'false'"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
9: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 name Ljava/lang/String;
0 10 1 def Z
1 10 2 val Ljava/lang/String;
MethodParameters:
Name Flags
name
def
private byte[] concat(byte[], byte[], int);
descriptor: ([B[BI)[B
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=6, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 1
arraylength
istore 4
start local 4 1: iload 4
ifne 3
iload 3
aload 2
arraylength
if_icmpne 3
2: aload 2
areturn
3: StackMap locals: int
StackMap stack:
iload 4
iload 3
iadd
newarray 8
astore 5
start local 5 4: aload 1
iconst_0
aload 5
iconst_0
iload 4
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
5: aload 2
iconst_0
aload 5
iload 4
iload 3
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
6: aload 5
areturn
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lsun/security/smartcardio/ChannelImpl;
0 7 1 b1 [B
0 7 2 b2 [B
0 7 3 n2 I
1 7 4 n1 I
4 7 5 res [B
MethodParameters:
Name Flags
b1
b2
n2
private byte[] doTransmit(byte[]);
descriptor: ([B)[B
flags: (0x0002) ACC_PRIVATE
Code:
stack=6, locals=10, args_size=2
start local 0 start local 1 0: aload 1
invokestatic sun.security.smartcardio.ChannelImpl.checkManageChannel:([B)V
1: aload 0
aload 1
invokevirtual sun.security.smartcardio.ChannelImpl.setChannel:([B)V
2: aload 1
arraylength
istore 2
start local 2 3: aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
getfield sun.security.smartcardio.CardImpl.protocol:I
iconst_1
if_icmpne 4
iconst_1
goto 5
StackMap locals: int
StackMap stack:
4: iconst_0
StackMap locals:
StackMap stack: int
5: istore 3
start local 3 6: aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
getfield sun.security.smartcardio.CardImpl.protocol:I
iconst_2
if_icmpne 7
iconst_1
goto 8
StackMap locals: int
StackMap stack:
7: iconst_0
StackMap locals:
StackMap stack: int
8: istore 4
start local 4 9: iload 3
ifeq 13
iload 2
bipush 7
if_icmplt 13
aload 1
iconst_4
baload
ifne 13
10: new javax.smartcardio.CardException
dup
11: ldc "Extended length forms not supported for T=0"
12: invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;)V
athrow
13: StackMap locals: int
StackMap stack:
iload 3
ifne 14
iload 4
ifeq 23
getstatic sun.security.smartcardio.ChannelImpl.t1StripLe:Z
ifeq 23
StackMap locals:
StackMap stack:
14: iload 2
bipush 7
if_icmplt 23
15: aload 1
iconst_4
baload
sipush 255
iand
istore 5
start local 5 16: iload 5
ifeq 20
17: iload 2
iload 5
bipush 6
iadd
if_icmpne 23
18: iinc 2 -1
19: goto 23
20: StackMap locals: int
StackMap stack:
aload 1
iconst_5
baload
sipush 255
iand
bipush 8
ishl
aload 1
bipush 6
baload
sipush 255
iand
ior
istore 5
21: iload 2
iload 5
bipush 9
iadd
if_icmpne 23
22: iinc 2 -2
end local 5 23: StackMap locals:
StackMap stack:
iload 3
ifeq 24
getstatic sun.security.smartcardio.ChannelImpl.t0GetResponse:Z
ifne 26
StackMap locals:
StackMap stack:
24: iload 4
ifeq 25
getstatic sun.security.smartcardio.ChannelImpl.t1GetResponse:Z
ifne 26
StackMap locals:
StackMap stack:
25: iconst_0
goto 27
StackMap locals:
StackMap stack:
26: iconst_1
StackMap locals:
StackMap stack: int
27: istore 5
start local 5 28: iconst_0
istore 6
start local 6 29: getstatic sun.security.smartcardio.ChannelImpl.B0:[B
astore 7
start local 7 30: StackMap locals: int int byte[]
StackMap stack:
iinc 6 1
iload 6
sipush 256
if_icmple 32
31: new javax.smartcardio.CardException
dup
ldc "Number of response iterations exceeded maximum 256"
invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;)V
athrow
32: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
getfield sun.security.smartcardio.CardImpl.cardId:J
aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
getfield sun.security.smartcardio.CardImpl.protocol:I
aload 1
iconst_0
iload 2
33: invokestatic sun.security.smartcardio.PCSC.SCardTransmit:(JI[BII)[B
astore 8
start local 8 34: aload 8
arraylength
istore 9
start local 9 35: iload 5
ifeq 48
iload 9
iconst_2
if_icmplt 48
36: iload 9
iconst_2
if_icmpne 39
aload 8
iconst_0
baload
bipush 108
if_icmpne 39
37: aload 1
iload 2
iconst_1
isub
aload 8
iconst_1
baload
bastore
38: goto 30
39: StackMap locals: byte[] int
StackMap stack:
aload 8
iload 9
iconst_2
isub
baload
bipush 97
if_icmpne 48
40: iload 9
iconst_2
if_icmple 42
41: aload 0
aload 7
aload 8
iload 9
iconst_2
isub
invokevirtual sun.security.smartcardio.ChannelImpl.concat:([B[BI)[B
astore 7
42: StackMap locals:
StackMap stack:
aload 1
iconst_1
bipush -64
bastore
43: aload 1
iconst_2
iconst_0
bastore
44: aload 1
iconst_3
iconst_0
bastore
45: aload 1
iconst_4
aload 8
iload 9
iconst_1
isub
baload
bastore
46: iconst_5
istore 2
47: goto 30
48: StackMap locals:
StackMap stack:
aload 0
aload 7
aload 8
iload 9
invokevirtual sun.security.smartcardio.ChannelImpl.concat:([B[BI)[B
astore 7
end local 9 end local 8 49: aload 7
50: areturn
end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 51: StackMap locals: sun.security.smartcardio.ChannelImpl byte[]
StackMap stack: sun.security.smartcardio.PCSCException
astore 2
start local 2 52: aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
aload 2
invokevirtual sun.security.smartcardio.CardImpl.handleError:(Lsun/security/smartcardio/PCSCException;)V
53: new javax.smartcardio.CardException
dup
aload 2
invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/Throwable;)V
athrow
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 54 0 this Lsun/security/smartcardio/ChannelImpl;
0 54 1 command [B
3 51 2 n I
6 51 3 t0 Z
9 51 4 t1 Z
16 23 5 lc I
28 51 5 getresponse Z
29 51 6 k I
30 51 7 result [B
34 49 8 response [B
35 49 9 rn I
52 54 2 e Lsun/security/smartcardio/PCSCException;
Exception table:
from to target type
0 50 51 Class sun.security.smartcardio.PCSCException
Exceptions:
throws javax.smartcardio.CardException
MethodParameters:
Name Flags
command
private static int getSW(byte[]);
descriptor: ([B)I
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=5, locals=3, args_size=1
start local 0 0: aload 0
arraylength
iconst_2
if_icmpge 2
1: new javax.smartcardio.CardException
dup
new java.lang.StringBuilder
dup
ldc "Invalid response length: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 0
arraylength
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
aload 0
arraylength
iconst_2
isub
baload
sipush 255
iand
istore 1
start local 1 3: aload 0
aload 0
arraylength
iconst_1
isub
baload
sipush 255
iand
istore 2
start local 2 4: iload 1
bipush 8
ishl
iload 2
ior
ireturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 res [B
3 5 1 sw1 I
4 5 2 sw2 I
Exceptions:
throws javax.smartcardio.CardException
MethodParameters:
Name Flags
res
private static boolean isOK(byte[]);
descriptor: ([B)Z
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
arraylength
iconst_2
if_icmpne 1
aload 0
invokestatic sun.security.smartcardio.ChannelImpl.getSW:([B)I
ldc 36864
if_icmpne 1
iconst_1
ireturn
StackMap locals:
StackMap stack:
1: iconst_0
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 res [B
Exceptions:
throws javax.smartcardio.CardException
MethodParameters:
Name Flags
res
private void setChannel(byte[]);
descriptor: ([B)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=3, args_size=2
start local 0 start local 1 0: aload 1
iconst_0
baload
istore 2
start local 2 1: iload 2
ifge 3
2: return
3: StackMap locals: int
StackMap stack:
iload 2
sipush 224
iand
bipush 32
if_icmpne 5
4: return
5: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.smartcardio.ChannelImpl.channel:I
iconst_3
if_icmpgt 9
6: aload 1
iconst_0
dup2
baload
sipush 188
iand
i2b
bastore
7: aload 1
iconst_0
dup2
baload
aload 0
getfield sun.security.smartcardio.ChannelImpl.channel:I
ior
i2b
bastore
8: goto 15
StackMap locals:
StackMap stack:
9: aload 0
getfield sun.security.smartcardio.ChannelImpl.channel:I
bipush 19
if_icmpgt 14
10: aload 1
iconst_0
dup2
baload
sipush 176
iand
i2b
bastore
11: aload 1
iconst_0
dup2
baload
bipush 64
ior
i2b
bastore
12: aload 1
iconst_0
dup2
baload
aload 0
getfield sun.security.smartcardio.ChannelImpl.channel:I
iconst_4
isub
ior
i2b
bastore
13: goto 15
14: StackMap locals:
StackMap stack:
new java.lang.RuntimeException
dup
new java.lang.StringBuilder
dup
ldc "Unsupported channel number: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 0
getfield sun.security.smartcardio.ChannelImpl.channel:I
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
15: StackMap locals:
StackMap stack:
return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 16 0 this Lsun/security/smartcardio/ChannelImpl;
0 16 1 com [B
1 16 2 cla I
MethodParameters:
Name Flags
com
public void close();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=4, args_size=1
start local 0 0: aload 0
invokevirtual sun.security.smartcardio.ChannelImpl.getChannelNumber:()I
ifne 2
1: new java.lang.IllegalStateException
dup
ldc "Cannot close basic logical channel"
invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.smartcardio.ChannelImpl.isClosed:Z
ifeq 4
3: return
4: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
invokevirtual sun.security.smartcardio.CardImpl.checkExclusive:()V
5: iconst_4
newarray 8
dup
iconst_1
bipush 112
bastore
dup
iconst_2
bipush -128
bastore
astore 1
start local 1 6: aload 1
iconst_3
aload 0
invokevirtual sun.security.smartcardio.ChannelImpl.getChannelNumber:()I
i2b
bastore
7: aload 0
aload 1
invokevirtual sun.security.smartcardio.ChannelImpl.setChannel:([B)V
8: aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
getfield sun.security.smartcardio.CardImpl.cardId:J
aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
getfield sun.security.smartcardio.CardImpl.protocol:I
aload 1
iconst_0
aload 1
arraylength
invokestatic sun.security.smartcardio.PCSC.SCardTransmit:(JI[BII)[B
astore 2
start local 2 9: aload 2
invokestatic sun.security.smartcardio.ChannelImpl.isOK:([B)Z
ifne 17
10: new javax.smartcardio.CardException
dup
new java.lang.StringBuilder
dup
ldc "close() failed: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 2
invokestatic sun.security.smartcardio.PCSC.toString:([B)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;)V
athrow
end local 2 end local 1 11: StackMap locals:
StackMap stack: sun.security.smartcardio.PCSCException
astore 1
start local 1 12: aload 0
getfield sun.security.smartcardio.ChannelImpl.card:Lsun/security/smartcardio/CardImpl;
aload 1
invokevirtual sun.security.smartcardio.CardImpl.handleError:(Lsun/security/smartcardio/PCSCException;)V
13: new javax.smartcardio.CardException
dup
ldc "Could not close channel"
aload 1
invokespecial javax.smartcardio.CardException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 1 14: StackMap locals:
StackMap stack: java.lang.Throwable
astore 3
15: aload 0
iconst_1
putfield sun.security.smartcardio.ChannelImpl.isClosed:Z
16: aload 3
athrow
17: StackMap locals:
StackMap stack:
aload 0
iconst_1
putfield sun.security.smartcardio.ChannelImpl.isClosed:Z
18: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 19 0 this Lsun/security/smartcardio/ChannelImpl;
6 11 1 com [B
9 11 2 res [B
12 14 1 e Lsun/security/smartcardio/PCSCException;
Exception table:
from to target type
5 11 11 Class sun.security.smartcardio.PCSCException
5 14 14 any
Exceptions:
throws javax.smartcardio.CardException
public java.lang.String toString();
descriptor: ()Ljava/lang/String;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: new java.lang.StringBuilder
dup
ldc "PC/SC channel "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 0
getfield sun.security.smartcardio.ChannelImpl.channel:I
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lsun/security/smartcardio/ChannelImpl;
}
SourceFile: "ChannelImpl.java"