final class sun.security.ssl.SSLEngineOutputRecord extends sun.security.ssl.OutputRecord implements sun.security.ssl.SSLRecord
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: sun.security.ssl.SSLEngineOutputRecord
super_class: sun.security.ssl.OutputRecord
{
private sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment fragmenter;
descriptor: Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
flags: (0x0002) ACC_PRIVATE
private boolean isTalkingToV2;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
private java.nio.ByteBuffer v2ClientHello;
descriptor: Ljava/nio/ByteBuffer;
flags: (0x0002) ACC_PRIVATE
private volatile boolean isCloseWaiting;
descriptor: Z
flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
void <init>(sun.security.ssl.HandshakeHash);
descriptor: (Lsun/security/ssl/HandshakeHash;)V
flags: (0x0000)
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
aload 1
invokestatic sun.security.ssl.SSLCipher$SSLWriteCipher.nullTlsWriteCipher:()Lsun/security/ssl/SSLCipher$SSLWriteCipher;
invokespecial sun.security.ssl.OutputRecord.<init>:(Lsun/security/ssl/HandshakeHash;Lsun/security/ssl/SSLCipher$SSLWriteCipher;)V
1: aload 0
aconst_null
putfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
2: aload 0
iconst_0
putfield sun.security.ssl.SSLEngineOutputRecord.isTalkingToV2:Z
3: aload 0
aconst_null
putfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
4: aload 0
iconst_0
putfield sun.security.ssl.SSLEngineOutputRecord.isCloseWaiting:Z
5: aload 0
sipush 16709
putfield sun.security.ssl.SSLEngineOutputRecord.packetSize:I
6: aload 0
getstatic sun.security.ssl.ProtocolVersion.NONE:Lsun/security/ssl/ProtocolVersion;
putfield sun.security.ssl.SSLEngineOutputRecord.protocolVersion:Lsun/security/ssl/ProtocolVersion;
7: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lsun/security/ssl/SSLEngineOutputRecord;
0 8 1 handshakeHash Lsun/security/ssl/HandshakeHash;
MethodParameters:
Name Flags
handshakeHash
public void close();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=2, args_size=1
start local 0 0: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.recordLock:Ljava/util/concurrent/locks/ReentrantLock;
invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
1: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.isClosed:Z
ifne 10
2: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
ifnull 5
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
invokevirtual sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment.hasAlert:()Z
ifeq 5
3: aload 0
iconst_1
putfield sun.security.ssl.SSLEngineOutputRecord.isCloseWaiting:Z
4: goto 10
5: StackMap locals:
StackMap stack:
aload 0
invokespecial sun.security.ssl.OutputRecord.close:()V
6: goto 10
StackMap locals:
StackMap stack: java.lang.Throwable
7: astore 1
8: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.recordLock:Ljava/util/concurrent/locks/ReentrantLock;
invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
9: aload 1
athrow
10: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.recordLock:Ljava/util/concurrent/locks/ReentrantLock;
invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
11: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 12 0 this Lsun/security/ssl/SSLEngineOutputRecord;
Exception table:
from to target type
1 7 7 any
Exceptions:
throws java.io.IOException
boolean isClosed();
descriptor: ()Z
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.isClosed:Z
ifne 1
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.isCloseWaiting:Z
ifne 1
iconst_0
ireturn
StackMap locals:
StackMap stack:
1: iconst_1
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lsun/security/ssl/SSLEngineOutputRecord;
void encodeAlert(byte, byte);
descriptor: (BB)V
flags: (0x0000)
Code:
stack=4, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokevirtual sun.security.ssl.SSLEngineOutputRecord.isClosed:()Z
ifeq 6
1: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 5
ldc "ssl"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 5
2: new java.lang.StringBuilder
dup
ldc "outbound has closed, ignore outbound alert message: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
3: iload 2
invokestatic sun.security.ssl.Alert.nameOf:(B)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
4: invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
iconst_0
anewarray java.lang.Object
invokestatic sun.security.ssl.SSLLogger.warning:(Ljava/lang/String;[Ljava/lang/Object;)V
5: StackMap locals:
StackMap stack:
return
6: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
ifnonnull 8
7: aload 0
new sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment
dup
aload 0
invokespecial sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment.<init>:(Lsun/security/ssl/SSLEngineOutputRecord;)V
putfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
8: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
iload 1
iload 2
invokevirtual sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment.queueUpAlert:(BB)V
9: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 this Lsun/security/ssl/SSLEngineOutputRecord;
0 10 1 level B
0 10 2 description B
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
level
description
void encodeHandshake(byte[], int, int);
descriptor: ([BII)V
flags: (0x0000)
Code:
stack=7, locals=5, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
invokevirtual sun.security.ssl.SSLEngineOutputRecord.isClosed:()Z
ifeq 6
1: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 5
ldc "ssl"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 5
2: ldc "outbound has closed, ignore outbound handshake message"
iconst_1
anewarray java.lang.Object
dup
iconst_0
3: aload 1
iload 2
iload 3
invokestatic java.nio.ByteBuffer.wrap:([BII)Ljava/nio/ByteBuffer;
aastore
4: invokestatic sun.security.ssl.SSLLogger.warning:(Ljava/lang/String;[Ljava/lang/Object;)V
5: StackMap locals:
StackMap stack:
return
6: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
ifnonnull 8
7: aload 0
new sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment
dup
aload 0
invokespecial sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment.<init>:(Lsun/security/ssl/SSLEngineOutputRecord;)V
putfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
8: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.firstMessage:Z
ifeq 20
9: aload 0
iconst_0
putfield sun.security.ssl.SSLEngineOutputRecord.firstMessage:Z
10: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.helloVersion:Lsun/security/ssl/ProtocolVersion;
getstatic sun.security.ssl.ProtocolVersion.SSL20Hello:Lsun/security/ssl/ProtocolVersion;
if_acmpne 20
11: aload 1
iload 2
baload
getstatic sun.security.ssl.SSLHandshake.CLIENT_HELLO:Lsun/security/ssl/SSLHandshake;
getfield sun.security.ssl.SSLHandshake.id:B
if_icmpne 20
12: aload 1
iload 2
iconst_4
iadd
iconst_2
iadd
bipush 32
iadd
baload
ifne 20
13: aload 0
14: aload 1
iload 2
iconst_4
iadd
iload 3
iconst_4
isub
15: invokestatic sun.security.ssl.SSLEngineOutputRecord.encodeV2ClientHello:([BII)Ljava/nio/ByteBuffer;
putfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
16: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
iconst_2
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
17: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.handshakeHash:Lsun/security/ssl/HandshakeHash;
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
invokevirtual sun.security.ssl.HandshakeHash.deliver:(Ljava/nio/ByteBuffer;)V
18: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
iconst_0
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
19: return
20: StackMap locals:
StackMap stack:
aload 1
iload 2
baload
istore 4
start local 4 21: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.handshakeHash:Lsun/security/ssl/HandshakeHash;
iload 4
invokevirtual sun.security.ssl.HandshakeHash.isHashable:(B)Z
ifeq 23
22: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.handshakeHash:Lsun/security/ssl/HandshakeHash;
aload 1
iload 2
iload 3
invokevirtual sun.security.ssl.HandshakeHash.deliver:([BII)V
23: StackMap locals: int
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
aload 1
iload 2
iload 3
invokevirtual sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment.queueUpFragment:([BII)V
24: return
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 25 0 this Lsun/security/ssl/SSLEngineOutputRecord;
0 25 1 source [B
0 25 2 offset I
0 25 3 length I
21 25 4 handshakeType B
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
source
offset
length
void encodeChangeCipherSpec();
descriptor: ()V
flags: (0x0000)
Code:
stack=4, locals=1, args_size=1
start local 0 0: aload 0
invokevirtual sun.security.ssl.SSLEngineOutputRecord.isClosed:()Z
ifeq 4
1: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 3
ldc "ssl"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 3
2: ldc "outbound has closed, ignore outbound change_cipher_spec message"
iconst_0
anewarray java.lang.Object
invokestatic sun.security.ssl.SSLLogger.warning:(Ljava/lang/String;[Ljava/lang/Object;)V
3: StackMap locals:
StackMap stack:
return
4: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
ifnonnull 6
5: aload 0
new sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment
dup
aload 0
invokespecial sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment.<init>:(Lsun/security/ssl/SSLEngineOutputRecord;)V
putfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
6: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
invokevirtual sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment.queueUpChangeCipherSpec:()V
7: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lsun/security/ssl/SSLEngineOutputRecord;
Exceptions:
throws java.io.IOException
void encodeV2NoCipher();
descriptor: ()V
flags: (0x0000)
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
iconst_1
putfield sun.security.ssl.SSLEngineOutputRecord.isTalkingToV2:Z
1: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lsun/security/ssl/SSLEngineOutputRecord;
Exceptions:
throws java.io.IOException
sun.security.ssl.Ciphertext encode(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer[], int, int);
descriptor: ([Ljava/nio/ByteBuffer;II[Ljava/nio/ByteBuffer;II)Lsun/security/ssl/Ciphertext;
flags: (0x0000)
Code:
stack=6, locals=7, args_size=7
start local 0 start local 1 start local 2 start local 3 start local 4 start local 5 start local 6 0: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.isClosed:Z
ifeq 4
1: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 3
ldc "ssl"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 3
2: ldc "outbound has closed, ignore outbound application data or cached messages"
iconst_0
anewarray java.lang.Object
invokestatic sun.security.ssl.SSLLogger.warning:(Ljava/lang/String;[Ljava/lang/Object;)V
3: StackMap locals:
StackMap stack:
aconst_null
areturn
4: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.isCloseWaiting:Z
ifeq 8
5: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 7
ldc "ssl"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 7
6: ldc "outbound has closed, ignore outbound application data"
iconst_0
anewarray java.lang.Object
invokestatic sun.security.ssl.SSLLogger.warning:(Ljava/lang/String;[Ljava/lang/Object;)V
7: StackMap locals:
StackMap stack:
aconst_null
astore 1
8: StackMap locals:
StackMap stack:
aload 0
aload 1
iload 2
iload 3
aload 4
iconst_0
aaload
invokevirtual sun.security.ssl.SSLEngineOutputRecord.encode:([Ljava/nio/ByteBuffer;IILjava/nio/ByteBuffer;)Lsun/security/ssl/Ciphertext;
areturn
end local 6 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 9 0 this Lsun/security/ssl/SSLEngineOutputRecord;
0 9 1 srcs [Ljava/nio/ByteBuffer;
0 9 2 srcsOffset I
0 9 3 srcsLength I
0 9 4 dsts [Ljava/nio/ByteBuffer;
0 9 5 dstsOffset I
0 9 6 dstsLength I
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
srcs
srcsOffset
srcsLength
dsts
dstsOffset
dstsLength
private sun.security.ssl.Ciphertext encode(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer);
descriptor: ([Ljava/nio/ByteBuffer;IILjava/nio/ByteBuffer;)Lsun/security/ssl/Ciphertext;
flags: (0x0002) ACC_PRIVATE
Code:
stack=7, locals=21, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.writeCipher:Lsun/security/ssl/SSLCipher$SSLWriteCipher;
getfield sun.security.ssl.SSLCipher$SSLWriteCipher.authenticator:Lsun/security/ssl/Authenticator;
invokevirtual sun.security.ssl.Authenticator.seqNumOverflow:()Z
ifeq 5
1: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 4
ldc "ssl"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 4
2: ldc "sequence number extremely close to overflow (2^64-1 packets). Closing connection."
iconst_0
anewarray java.lang.Object
3: invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
4: StackMap locals:
StackMap stack:
new javax.net.ssl.SSLHandshakeException
dup
ldc "sequence number overflow"
invokespecial javax.net.ssl.SSLHandshakeException.<init>:(Ljava/lang/String;)V
athrow
5: StackMap locals:
StackMap stack:
aload 0
aload 4
invokevirtual sun.security.ssl.SSLEngineOutputRecord.acquireCiphertext:(Ljava/nio/ByteBuffer;)Lsun/security/ssl/Ciphertext;
astore 5
start local 5 6: aload 5
ifnull 8
7: aload 5
areturn
8: StackMap locals: sun.security.ssl.Ciphertext
StackMap stack:
aload 1
ifnull 9
aload 1
arraylength
ifne 10
9: StackMap locals:
StackMap stack:
aconst_null
areturn
10: StackMap locals:
StackMap stack:
iconst_0
istore 6
start local 6 11: iload 2
istore 7
start local 7 12: goto 15
13: StackMap locals: int int
StackMap stack:
iload 6
aload 1
iload 7
aaload
invokevirtual java.nio.ByteBuffer.remaining:()I
iadd
istore 6
14: iinc 7 1
StackMap locals:
StackMap stack:
15: iload 7
iload 2
iload 3
iadd
if_icmplt 13
end local 7 16: iload 6
ifne 18
17: aconst_null
areturn
18: StackMap locals:
StackMap stack:
aload 4
invokevirtual java.nio.ByteBuffer.limit:()I
istore 7
start local 7 19: iconst_1
istore 8
start local 8 20: sipush 16709
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.packetSize:I
invokestatic java.lang.Math.min:(II)I
istore 9
start local 9 21: iconst_1
istore 10
start local 10 22: lconst_0
lstore 11
start local 11 23: goto 82
24: StackMap locals: sun.security.ssl.SSLEngineOutputRecord java.nio.ByteBuffer[] int int java.nio.ByteBuffer sun.security.ssl.Ciphertext int int int int int long
StackMap stack:
iload 8
ifeq 29
aload 0
invokevirtual sun.security.ssl.SSLEngineOutputRecord.needToSplitPayload:()Z
ifeq 29
25: iconst_1
istore 10
26: iconst_1
istore 13
start local 13 27: iconst_0
istore 8
28: goto 38
end local 13 29: StackMap locals:
StackMap stack:
iconst_0
istore 10
30: iload 9
ifle 36
31: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.writeCipher:Lsun/security/ssl/SSLCipher$SSLWriteCipher;
32: iload 9
iconst_5
33: invokevirtual sun.security.ssl.SSLCipher$SSLWriteCipher.calculateFragmentSize:(II)I
istore 13
start local 13 34: iload 13
sipush 16384
invokestatic java.lang.Math.min:(II)I
istore 13
35: goto 37
end local 13 36: StackMap locals:
StackMap stack:
sipush 16384
istore 13
start local 13 37: StackMap locals: int
StackMap stack:
aload 0
iload 13
invokevirtual sun.security.ssl.SSLEngineOutputRecord.calculateFragmentSize:(I)I
istore 13
38: StackMap locals:
StackMap stack:
aload 4
invokevirtual java.nio.ByteBuffer.position:()I
istore 14
start local 14 39: iload 14
iconst_5
iadd
40: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.writeCipher:Lsun/security/ssl/SSLCipher$SSLWriteCipher;
invokevirtual sun.security.ssl.SSLCipher$SSLWriteCipher.getExplicitNonceSize:()I
41: iadd
istore 15
start local 15 42: aload 4
iload 15
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
43: iload 13
aload 4
invokevirtual java.nio.ByteBuffer.remaining:()I
invokestatic java.lang.Math.min:(II)I
istore 16
start local 16 44: iconst_0
istore 13
45: iload 2
iload 3
iadd
istore 17
start local 17 46: iload 2
istore 18
start local 18 47: goto 59
48: StackMap locals: sun.security.ssl.SSLEngineOutputRecord java.nio.ByteBuffer[] int int java.nio.ByteBuffer sun.security.ssl.Ciphertext int int int int int long int int int int int int
StackMap stack:
aload 1
iload 18
aaload
invokevirtual java.nio.ByteBuffer.remaining:()I
iload 16
invokestatic java.lang.Math.min:(II)I
istore 19
start local 19 49: aload 1
iload 18
aaload
invokevirtual java.nio.ByteBuffer.limit:()I
istore 20
start local 20 50: aload 1
iload 18
aaload
aload 1
iload 18
aaload
invokevirtual java.nio.ByteBuffer.position:()I
iload 19
iadd
invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/ByteBuffer;
pop
51: aload 4
aload 1
iload 18
aaload
invokevirtual java.nio.ByteBuffer.put:(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
pop
52: aload 1
iload 18
aaload
iload 20
invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/ByteBuffer;
pop
53: iload 16
iload 19
isub
istore 16
54: iload 13
iload 19
iadd
istore 13
55: iload 16
ifle 58
56: iinc 2 1
57: iinc 3 -1
end local 20 end local 19 58: StackMap locals:
StackMap stack:
iinc 18 1
StackMap locals:
StackMap stack:
59: iload 18
iload 17
if_icmpge 60
iload 16
ifgt 48
end local 18 60: StackMap locals:
StackMap stack:
aload 4
aload 4
invokevirtual java.nio.ByteBuffer.position:()I
invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/ByteBuffer;
pop
61: aload 4
iload 15
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
62: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 68
ldc "record"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 68
63: new java.lang.StringBuilder
dup
ldc "WRITE: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.protocolVersion:Lsun/security/ssl/ProtocolVersion;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
ldc " "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
64: getstatic sun.security.ssl.ContentType.APPLICATION_DATA:Lsun/security/ssl/ContentType;
getfield sun.security.ssl.ContentType.name:Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
65: ldc ", length = "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 4
invokevirtual java.nio.ByteBuffer.remaining:()I
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
66: invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
iconst_0
anewarray java.lang.Object
67: invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
68: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.writeCipher:Lsun/security/ssl/SSLCipher$SSLWriteCipher;
69: getstatic sun.security.ssl.ContentType.APPLICATION_DATA:Lsun/security/ssl/ContentType;
getfield sun.security.ssl.ContentType.id:B
aload 4
70: iload 14
iload 7
iconst_5
71: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.protocolVersion:Lsun/security/ssl/ProtocolVersion;
72: invokestatic sun.security.ssl.SSLEngineOutputRecord.encrypt:(Lsun/security/ssl/SSLCipher$SSLWriteCipher;BLjava/nio/ByteBuffer;IIILsun/security/ssl/ProtocolVersion;)J
lstore 11
73: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 78
ldc "packet"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 78
74: aload 4
invokevirtual java.nio.ByteBuffer.duplicate:()Ljava/nio/ByteBuffer;
astore 18
start local 18 75: aload 18
aload 18
invokevirtual java.nio.ByteBuffer.position:()I
invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/ByteBuffer;
pop
76: aload 18
iload 14
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
77: ldc "Raw write"
iconst_1
anewarray java.lang.Object
dup
iconst_0
aload 18
aastore
invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
end local 18 78: StackMap locals:
StackMap stack:
iload 9
aload 4
invokevirtual java.nio.ByteBuffer.position:()I
iload 14
isub
isub
istore 9
79: aload 4
iload 7
invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/ByteBuffer;
pop
80: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.isFirstAppOutputRecord:Z
ifeq 82
81: aload 0
iconst_0
putfield sun.security.ssl.SSLEngineOutputRecord.isFirstAppOutputRecord:Z
end local 17 end local 16 end local 15 end local 14 end local 13 82: StackMap locals: sun.security.ssl.SSLEngineOutputRecord java.nio.ByteBuffer[] int int java.nio.ByteBuffer sun.security.ssl.Ciphertext int int int int int long
StackMap stack:
iload 10
ifne 24
83: new sun.security.ssl.Ciphertext
dup
getstatic sun.security.ssl.ContentType.APPLICATION_DATA:Lsun/security/ssl/ContentType;
getfield sun.security.ssl.ContentType.id:B
84: getstatic sun.security.ssl.SSLHandshake.NOT_APPLICABLE:Lsun/security/ssl/SSLHandshake;
getfield sun.security.ssl.SSLHandshake.id:B
lload 11
85: invokespecial sun.security.ssl.Ciphertext.<init>:(BBJ)V
areturn
end local 11 end local 10 end local 9 end local 8 end local 7 end local 6 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 86 0 this Lsun/security/ssl/SSLEngineOutputRecord;
0 86 1 sources [Ljava/nio/ByteBuffer;
0 86 2 offset I
0 86 3 length I
0 86 4 destination Ljava/nio/ByteBuffer;
6 86 5 ct Lsun/security/ssl/Ciphertext;
11 86 6 srcsRemains I
12 16 7 i I
19 86 7 dstLim I
20 86 8 isFirstRecordOfThePayload Z
21 86 9 packetLeftSize I
22 86 10 needMorePayload Z
23 86 11 recordSN J
27 29 13 fragLen I
34 36 13 fragLen I
37 82 13 fragLen I
39 82 14 dstPos I
42 82 15 dstContent I
44 82 16 remains I
46 82 17 srcsLen I
47 60 18 i I
49 58 19 amount I
50 58 20 srcLimit I
75 78 18 temporary Ljava/nio/ByteBuffer;
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
sources
offset
length
destination
private sun.security.ssl.Ciphertext acquireCiphertext(java.nio.ByteBuffer);
descriptor: (Ljava/nio/ByteBuffer;)Lsun/security/ssl/Ciphertext;
flags: (0x0002) ACC_PRIVATE
Code:
stack=6, locals=2, args_size=2
start local 0 start local 1 0: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.isTalkingToV2:Z
ifeq 8
1: aload 1
getstatic sun.security.ssl.SSLRecord.v2NoCipher:[B
invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
pop
2: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 4
ldc "packet"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 4
3: ldc "Raw write"
iconst_1
anewarray java.lang.Object
dup
iconst_0
getstatic sun.security.ssl.SSLRecord.v2NoCipher:[B
aastore
invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
4: StackMap locals:
StackMap stack:
aload 0
iconst_0
putfield sun.security.ssl.SSLEngineOutputRecord.isTalkingToV2:Z
5: new sun.security.ssl.Ciphertext
dup
getstatic sun.security.ssl.ContentType.ALERT:Lsun/security/ssl/ContentType;
getfield sun.security.ssl.ContentType.id:B
6: getstatic sun.security.ssl.SSLHandshake.NOT_APPLICABLE:Lsun/security/ssl/SSLHandshake;
getfield sun.security.ssl.SSLHandshake.id:B
ldc -1
7: invokespecial sun.security.ssl.Ciphertext.<init>:(BBJ)V
areturn
8: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
ifnull 22
9: getstatic sun.security.ssl.SSLLogger.isOn:Z
ifeq 17
10: ldc "record"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 15
11: new java.lang.StringBuilder
dup
invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
invokevirtual java.lang.Thread.getName:()Ljava/lang/String;
invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
12: ldc ", WRITE: SSLv2 ClientHello message"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
13: ldc ", length = "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
invokevirtual java.nio.ByteBuffer.remaining:()I
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
14: invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
iconst_0
anewarray java.lang.Object
invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
15: StackMap locals:
StackMap stack:
ldc "packet"
invokestatic sun.security.ssl.SSLLogger.isOn:(Ljava/lang/String;)Z
ifeq 17
16: ldc "Raw write"
iconst_1
anewarray java.lang.Object
dup
iconst_0
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
aastore
invokestatic sun.security.ssl.SSLLogger.fine:(Ljava/lang/String;[Ljava/lang/Object;)V
17: StackMap locals:
StackMap stack:
aload 1
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
invokevirtual java.nio.ByteBuffer.put:(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
pop
18: aload 0
aconst_null
putfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
19: new sun.security.ssl.Ciphertext
dup
getstatic sun.security.ssl.ContentType.HANDSHAKE:Lsun/security/ssl/ContentType;
getfield sun.security.ssl.ContentType.id:B
20: getstatic sun.security.ssl.SSLHandshake.CLIENT_HELLO:Lsun/security/ssl/SSLHandshake;
getfield sun.security.ssl.SSLHandshake.id:B
ldc -1
21: invokespecial sun.security.ssl.Ciphertext.<init>:(BBJ)V
areturn
22: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
ifnull 24
23: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
aload 1
invokevirtual sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment.acquireCiphertext:(Ljava/nio/ByteBuffer;)Lsun/security/ssl/Ciphertext;
areturn
24: StackMap locals:
StackMap stack:
aconst_null
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 25 0 this Lsun/security/ssl/SSLEngineOutputRecord;
0 25 1 destination Ljava/nio/ByteBuffer;
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
destination
boolean isEmpty();
descriptor: ()Z
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.isTalkingToV2:Z
ifne 3
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.v2ClientHello:Ljava/nio/ByteBuffer;
ifnonnull 3
1: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
ifnull 2
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.fragmenter:Lsun/security/ssl/SSLEngineOutputRecord$HandshakeFragment;
invokevirtual sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment.isEmpty:()Z
ifeq 3
2: StackMap locals:
StackMap stack:
iconst_1
ireturn
StackMap locals:
StackMap stack:
3: iconst_0
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lsun/security/ssl/SSLEngineOutputRecord;
boolean needToSplitPayload();
descriptor: ()Z
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.protocolVersion:Lsun/security/ssl/ProtocolVersion;
invokevirtual sun.security.ssl.ProtocolVersion.useTLS11PlusSpec:()Z
ifne 4
1: aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.writeCipher:Lsun/security/ssl/SSLCipher$SSLWriteCipher;
invokevirtual sun.security.ssl.SSLCipher$SSLWriteCipher.isCBCMode:()Z
ifeq 4
aload 0
getfield sun.security.ssl.SSLEngineOutputRecord.isFirstAppOutputRecord:Z
ifne 4
2: getstatic sun.security.ssl.Record.enableCBCProtection:Z
ifeq 4
3: iconst_1
ireturn
StackMap locals:
StackMap stack:
4: iconst_0
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lsun/security/ssl/SSLEngineOutputRecord;
}
SourceFile: "SSLEngineOutputRecord.java"
NestMembers:
sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment sun.security.ssl.SSLEngineOutputRecord$HandshakeMemo sun.security.ssl.SSLEngineOutputRecord$RecordMemo
InnerClasses:
abstract SSLWriteCipher = sun.security.ssl.SSLCipher$SSLWriteCipher of sun.security.ssl.SSLCipher
final HandshakeFragment = sun.security.ssl.SSLEngineOutputRecord$HandshakeFragment of sun.security.ssl.SSLEngineOutputRecord
private HandshakeMemo = sun.security.ssl.SSLEngineOutputRecord$HandshakeMemo of sun.security.ssl.SSLEngineOutputRecord
private RecordMemo = sun.security.ssl.SSLEngineOutputRecord$RecordMemo of sun.security.ssl.SSLEngineOutputRecord