public class io.undertow.protocols.http2.HpackEncoder
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: io.undertow.protocols.http2.HpackEncoder
super_class: java.lang.Object
{
private static final java.util.Set<io.undertow.util.HttpString> SKIP;
descriptor: Ljava/util/Set;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
Signature: Ljava/util/Set<Lio/undertow/util/HttpString;>;
public static final io.undertow.protocols.http2.HpackEncoder$HpackHeaderFunction ;
descriptor: Lio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
private long ;
descriptor: J
flags: (0x0002) ACC_PRIVATE
private boolean firstPass;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
private io.undertow.util.HeaderMap ;
descriptor: Lio/undertow/util/HeaderMap;
flags: (0x0002) ACC_PRIVATE
private int entryPositionCounter;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private int ;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private int ;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private static final java.util.Map<io.undertow.util.HttpString, io.undertow.protocols.http2.HpackEncoder$TableEntry[]> ENCODING_STATIC_TABLE;
descriptor: Ljava/util/Map;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
Signature: Ljava/util/Map<Lio/undertow/util/HttpString;[Lio/undertow/protocols/http2/HpackEncoder$TableEntry;>;
private final java.util.Deque<io.undertow.protocols.http2.HpackEncoder$TableEntry> evictionQueue;
descriptor: Ljava/util/Deque;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Ljava/util/Deque<Lio/undertow/protocols/http2/HpackEncoder$TableEntry;>;
private final java.util.Map<io.undertow.util.HttpString, java.util.List<io.undertow.protocols.http2.HpackEncoder$TableEntry>> dynamicTable;
descriptor: Ljava/util/Map;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Ljava/util/Map<Lio/undertow/util/HttpString;Ljava/util/List<Lio/undertow/protocols/http2/HpackEncoder$TableEntry;>;>;
private byte[] overflowData;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private int overflowPos;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private int overflowLength;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private int maxTableSize;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private int currentTableSize;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private final io.undertow.protocols.http2.HpackEncoder$HpackHeaderFunction ;
descriptor: Lio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=10, locals=5, args_size=0
0: new java.util.HashSet
dup
invokespecial java.util.HashSet.<init>:()V
astore 0
start local 0 1: aload 0
getstatic io.undertow.util.Headers.CONNECTION:Lio/undertow/util/HttpString;
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
pop
2: aload 0
getstatic io.undertow.util.Headers.TRANSFER_ENCODING:Lio/undertow/util/HttpString;
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
pop
3: aload 0
getstatic io.undertow.util.Headers.KEEP_ALIVE:Lio/undertow/util/HttpString;
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
pop
4: aload 0
getstatic io.undertow.util.Headers.UPGRADE:Lio/undertow/util/HttpString;
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
pop
5: aload 0
invokestatic java.util.Collections.unmodifiableSet:(Ljava/util/Set;)Ljava/util/Set;
putstatic io.undertow.protocols.http2.HpackEncoder.SKIP:Ljava/util/Set;
end local 0 6: new io.undertow.protocols.http2.HpackEncoder$1
dup
invokespecial io.undertow.protocols.http2.HpackEncoder$1.<init>:()V
putstatic io.undertow.protocols.http2.HpackEncoder.DEFAULT_HEADER_FUNCTION:Lio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;
7: new java.util.HashMap
dup
invokespecial java.util.HashMap.<init>:()V
astore 0
start local 0 8: iconst_1
istore 1
start local 1 9: goto 20
10: StackMap locals: java.util.Map int
StackMap stack:
getstatic io.undertow.protocols.http2.Hpack.STATIC_TABLE:[Lio/undertow/protocols/http2/Hpack$HeaderField;
iload 1
aaload
astore 2
start local 2 11: aload 0
aload 2
getfield io.undertow.protocols.http2.Hpack$HeaderField.name:Lio/undertow/util/HttpString;
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast io.undertow.protocols.http2.HpackEncoder$TableEntry[]
astore 3
start local 3 12: aload 3
ifnonnull 15
13: aload 0
aload 2
getfield io.undertow.protocols.http2.Hpack$HeaderField.name:Lio/undertow/util/HttpString;
iconst_1
anewarray io.undertow.protocols.http2.HpackEncoder$TableEntry
dup
iconst_0
new io.undertow.protocols.http2.HpackEncoder$TableEntry
dup
aload 2
getfield io.undertow.protocols.http2.Hpack$HeaderField.name:Lio/undertow/util/HttpString;
aload 2
getfield io.undertow.protocols.http2.Hpack$HeaderField.value:Ljava/lang/String;
iload 1
invokespecial io.undertow.protocols.http2.HpackEncoder$TableEntry.<init>:(Lio/undertow/util/HttpString;Ljava/lang/String;I)V
aastore
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
14: goto 19
15: StackMap locals: io.undertow.protocols.http2.Hpack$HeaderField io.undertow.protocols.http2.HpackEncoder$TableEntry[]
StackMap stack:
aload 3
arraylength
iconst_1
iadd
anewarray io.undertow.protocols.http2.HpackEncoder$TableEntry
astore 4
start local 4 16: aload 3
iconst_0
aload 4
iconst_0
aload 3
arraylength
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
17: aload 4
aload 3
arraylength
new io.undertow.protocols.http2.HpackEncoder$TableEntry
dup
aload 2
getfield io.undertow.protocols.http2.Hpack$HeaderField.name:Lio/undertow/util/HttpString;
aload 2
getfield io.undertow.protocols.http2.Hpack$HeaderField.value:Ljava/lang/String;
iload 1
invokespecial io.undertow.protocols.http2.HpackEncoder$TableEntry.<init>:(Lio/undertow/util/HttpString;Ljava/lang/String;I)V
aastore
18: aload 0
aload 2
getfield io.undertow.protocols.http2.Hpack$HeaderField.name:Lio/undertow/util/HttpString;
aload 4
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
end local 4 end local 3 end local 2 19: StackMap locals:
StackMap stack:
iinc 1 1
StackMap locals:
StackMap stack:
20: iload 1
getstatic io.undertow.protocols.http2.Hpack.STATIC_TABLE:[Lio/undertow/protocols/http2/Hpack$HeaderField;
arraylength
if_icmplt 10
end local 1 21: aload 0
invokestatic java.util.Collections.unmodifiableMap:(Ljava/util/Map;)Ljava/util/Map;
putstatic io.undertow.protocols.http2.HpackEncoder.ENCODING_STATIC_TABLE:Ljava/util/Map;
end local 0 22: return
LocalVariableTable:
Start End Slot Name Signature
1 6 0 set Ljava/util/Set<Lio/undertow/util/HttpString;>;
8 22 0 map Ljava/util/Map<Lio/undertow/util/HttpString;[Lio/undertow/protocols/http2/HpackEncoder$TableEntry;>;
9 21 1 i I
11 19 2 m Lio/undertow/protocols/http2/Hpack$HeaderField;
12 19 3 existing [Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
16 19 4 newEntry [Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
public void (int, io.undertow.protocols.http2.HpackEncoder$HpackHeaderFunction);
descriptor: (ILio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
ldc -1
putfield io.undertow.protocols.http2.HpackEncoder.headersIterator:J
2: aload 0
iconst_1
putfield io.undertow.protocols.http2.HpackEncoder.firstPass:Z
3: aload 0
iconst_m1
putfield io.undertow.protocols.http2.HpackEncoder.newMaxHeaderSize:I
4: aload 0
iconst_m1
putfield io.undertow.protocols.http2.HpackEncoder.minNewMaxHeaderSize:I
5: aload 0
new java.util.ArrayDeque
dup
invokespecial java.util.ArrayDeque.<init>:()V
putfield io.undertow.protocols.http2.HpackEncoder.evictionQueue:Ljava/util/Deque;
6: aload 0
new java.util.HashMap
dup
invokespecial java.util.HashMap.<init>:()V
putfield io.undertow.protocols.http2.HpackEncoder.dynamicTable:Ljava/util/Map;
7: aload 0
iload 1
putfield io.undertow.protocols.http2.HpackEncoder.maxTableSize:I
8: aload 0
aload 2
putfield io.undertow.protocols.http2.HpackEncoder.hpackHeaderFunction:Lio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;
9: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 10 1 maxTableSize I
0 10 2 headerFunction Lio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;
MethodParameters:
Name Flags
maxTableSize
headerFunction
public void <init>(int);
descriptor: (I)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
iload 1
getstatic io.undertow.protocols.http2.HpackEncoder.DEFAULT_HEADER_FUNCTION:Lio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;
invokespecial io.undertow.protocols.http2.HpackEncoder.<init>:(ILio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 2 1 maxTableSize I
MethodParameters:
Name Flags
maxTableSize
public io.undertow.protocols.http2.HpackEncoder$State (io.undertow.util.HeaderMap, java.nio.ByteBuffer);
descriptor: (Lio/undertow/util/HeaderMap;Ljava/nio/ByteBuffer;)Lio/undertow/protocols/http2/HpackEncoder$State;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=15, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.overflowData:[B
ifnull 10
1: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.overflowPos:I
istore 3
start local 3 2: goto 8
3: StackMap locals: int
StackMap stack:
aload 2
invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
ifne 6
4: aload 0
iload 3
putfield io.undertow.protocols.http2.HpackEncoder.overflowPos:I
5: getstatic io.undertow.protocols.http2.HpackEncoder$State.OVERFLOW:Lio/undertow/protocols/http2/HpackEncoder$State;
areturn
6: StackMap locals:
StackMap stack:
aload 2
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.overflowData:[B
iload 3
baload
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
7: iinc 3 1
StackMap locals:
StackMap stack:
8: iload 3
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.overflowLength:I
if_icmplt 3
end local 3 9: aload 0
aconst_null
putfield io.undertow.protocols.http2.HpackEncoder.overflowData:[B
10: StackMap locals:
StackMap stack:
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.headersIterator:J
lstore 3
start local 3 11: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.headersIterator:J
ldc -1
lcmp
ifne 16
12: aload 0
aload 2
invokevirtual io.undertow.protocols.http2.HpackEncoder.handleTableSizeChange:(Ljava/nio/ByteBuffer;)V
13: aload 1
invokevirtual io.undertow.util.HeaderMap.fastIterate:()J
lstore 3
14: aload 0
aload 1
putfield io.undertow.protocols.http2.HpackEncoder.currentHeaders:Lio/undertow/util/HeaderMap;
15: goto 88
16: StackMap locals: long
StackMap stack:
aload 1
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.currentHeaders:Lio/undertow/util/HeaderMap;
if_acmpeq 88
17: new java.lang.IllegalStateException
dup
invokespecial java.lang.IllegalStateException.<init>:()V
athrow
18: StackMap locals:
StackMap stack:
aload 1
lload 3
invokevirtual io.undertow.util.HeaderMap.fiCurrent:(J)Lio/undertow/util/HeaderValues;
astore 5
start local 5 19: iconst_0
istore 6
start local 6 20: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.firstPass:Z
ifeq 24
21: aload 5
invokevirtual io.undertow.util.HeaderValues.getHeaderName:()Lio/undertow/util/HttpString;
iconst_0
invokevirtual io.undertow.util.HttpString.byteAt:(I)B
bipush 58
if_icmpeq 26
22: iconst_1
istore 6
23: goto 26
24: StackMap locals: io.undertow.util.HeaderValues int
StackMap stack:
aload 5
invokevirtual io.undertow.util.HeaderValues.getHeaderName:()Lio/undertow/util/HttpString;
iconst_0
invokevirtual io.undertow.util.HttpString.byteAt:(I)B
bipush 58
if_icmpne 26
25: iconst_1
istore 6
26: StackMap locals:
StackMap stack:
getstatic io.undertow.protocols.http2.HpackEncoder.SKIP:Ljava/util/Set;
aload 5
invokevirtual io.undertow.util.HeaderValues.getHeaderName:()Lio/undertow/util/HttpString;
invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
ifeq 28
27: iconst_1
istore 6
28: StackMap locals:
StackMap stack:
iload 6
ifne 84
29: iconst_0
istore 7
start local 7 30: goto 83
31: StackMap locals: int
StackMap stack:
aload 5
invokevirtual io.undertow.util.HeaderValues.getHeaderName:()Lio/undertow/util/HttpString;
astore 8
start local 8 32: bipush 11
aload 8
invokevirtual io.undertow.util.HttpString.length:()I
iadd
istore 9
start local 9 33: aload 5
iload 7
invokevirtual io.undertow.util.HeaderValues.get:(I)Ljava/lang/String;
astore 10
start local 10 34: iconst_0
istore 11
start local 11 35: goto 41
36: StackMap locals: io.undertow.protocols.http2.HpackEncoder io.undertow.util.HeaderMap java.nio.ByteBuffer long io.undertow.util.HeaderValues int int io.undertow.util.HttpString int java.lang.String int
StackMap stack:
aload 10
iload 11
invokevirtual java.lang.String.charAt:(I)C
istore 12
start local 12 37: iload 12
bipush 13
if_icmpeq 38
iload 12
bipush 10
if_icmpne 40
38: StackMap locals: int
StackMap stack:
aload 10
bipush 13
bipush 32
invokevirtual java.lang.String.replace:(CC)Ljava/lang/String;
bipush 10
bipush 32
invokevirtual java.lang.String.replace:(CC)Ljava/lang/String;
astore 10
39: goto 42
end local 12 40: StackMap locals:
StackMap stack:
iinc 11 1
StackMap locals:
StackMap stack:
41: iload 11
aload 10
invokevirtual java.lang.String.length:()I
if_icmplt 36
end local 11 42: StackMap locals:
StackMap stack:
aload 0
aload 8
aload 10
invokevirtual io.undertow.protocols.http2.HpackEncoder.findInTable:(Lio/undertow/util/HttpString;Ljava/lang/String;)Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
astore 11
start local 11 43: iload 9
iconst_1
aload 10
invokevirtual java.lang.String.length:()I
iadd
iadd
istore 9
44: iconst_0
istore 12
start local 12 45: aload 2
astore 13
start local 13 46: aload 13
invokevirtual java.nio.ByteBuffer.remaining:()I
iload 9
if_icmpge 50
47: iconst_1
istore 12
48: aload 0
iload 9
newarray 8
dup_x1
putfield io.undertow.protocols.http2.HpackEncoder.overflowData:[B
invokestatic java.nio.ByteBuffer.wrap:([B)Ljava/nio/ByteBuffer;
astore 13
49: aload 0
iconst_0
putfield io.undertow.protocols.http2.HpackEncoder.overflowPos:I
50: StackMap locals: io.undertow.protocols.http2.HpackEncoder$TableEntry int java.nio.ByteBuffer
StackMap stack:
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.hpackHeaderFunction:Lio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;
aload 8
aload 10
invokeinterface io.undertow.protocols.http2.HpackEncoder$HpackHeaderFunction.shouldUseIndexing:(Lio/undertow/util/HttpString;Ljava/lang/String;)Z
ifeq 51
aload 8
invokevirtual io.undertow.util.HttpString.length:()I
aload 10
invokevirtual java.lang.String.length:()I
iadd
bipush 32
iadd
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.maxTableSize:I
if_icmpge 51
iconst_1
goto 52
StackMap locals:
StackMap stack:
51: iconst_0
StackMap locals:
StackMap stack: int
52: istore 14
start local 14 53: aload 11
ifnonnull 59
iload 14
ifeq 59
54: aload 13
bipush 64
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
55: aload 0
aload 13
aload 8
invokevirtual io.undertow.protocols.http2.HpackEncoder.writeHuffmanEncodableName:(Ljava/nio/ByteBuffer;Lio/undertow/util/HttpString;)V
56: aload 0
aload 13
aload 8
aload 10
invokevirtual io.undertow.protocols.http2.HpackEncoder.writeHuffmanEncodableValue:(Ljava/nio/ByteBuffer;Lio/undertow/util/HttpString;Ljava/lang/String;)V
57: aload 0
aload 8
aload 10
invokevirtual io.undertow.protocols.http2.HpackEncoder.addToDynamicTable:(Lio/undertow/util/HttpString;Ljava/lang/String;)V
58: goto 77
StackMap locals: int
StackMap stack:
59: aload 11
ifnonnull 64
60: aload 13
bipush 16
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
61: aload 0
aload 13
aload 8
invokevirtual io.undertow.protocols.http2.HpackEncoder.writeHuffmanEncodableName:(Ljava/nio/ByteBuffer;Lio/undertow/util/HttpString;)V
62: aload 0
aload 13
aload 8
aload 10
invokevirtual io.undertow.protocols.http2.HpackEncoder.writeHuffmanEncodableValue:(Ljava/nio/ByteBuffer;Lio/undertow/util/HttpString;Ljava/lang/String;)V
63: goto 77
64: StackMap locals:
StackMap stack:
aload 10
aload 11
getfield io.undertow.protocols.http2.HpackEncoder$TableEntry.value:Ljava/lang/String;
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 68
65: aload 13
bipush -128
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
66: aload 13
aload 11
invokevirtual io.undertow.protocols.http2.HpackEncoder$TableEntry.getPosition:()I
bipush 7
invokestatic io.undertow.protocols.http2.Hpack.encodeInteger:(Ljava/nio/ByteBuffer;II)V
67: goto 77
68: StackMap locals:
StackMap stack:
iload 14
ifeq 74
69: aload 13
bipush 64
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
70: aload 13
aload 11
invokevirtual io.undertow.protocols.http2.HpackEncoder$TableEntry.getPosition:()I
bipush 6
invokestatic io.undertow.protocols.http2.Hpack.encodeInteger:(Ljava/nio/ByteBuffer;II)V
71: aload 0
aload 13
aload 8
aload 10
invokevirtual io.undertow.protocols.http2.HpackEncoder.writeHuffmanEncodableValue:(Ljava/nio/ByteBuffer;Lio/undertow/util/HttpString;Ljava/lang/String;)V
72: aload 0
aload 8
aload 10
invokevirtual io.undertow.protocols.http2.HpackEncoder.addToDynamicTable:(Lio/undertow/util/HttpString;Ljava/lang/String;)V
73: goto 77
74: StackMap locals:
StackMap stack:
aload 13
bipush 16
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
75: aload 13
aload 11
invokevirtual io.undertow.protocols.http2.HpackEncoder$TableEntry.getPosition:()I
iconst_4
invokestatic io.undertow.protocols.http2.Hpack.encodeInteger:(Ljava/nio/ByteBuffer;II)V
76: aload 0
aload 13
aload 8
aload 10
invokevirtual io.undertow.protocols.http2.HpackEncoder.writeHuffmanEncodableValue:(Ljava/nio/ByteBuffer;Lio/undertow/util/HttpString;Ljava/lang/String;)V
77: StackMap locals:
StackMap stack:
iload 12
ifeq 82
78: aload 1
lload 3
invokevirtual io.undertow.util.HeaderMap.fiNext:(J)J
lstore 3
79: aload 0
lload 3
putfield io.undertow.protocols.http2.HpackEncoder.headersIterator:J
80: aload 0
aload 13
invokevirtual java.nio.ByteBuffer.position:()I
putfield io.undertow.protocols.http2.HpackEncoder.overflowLength:I
81: getstatic io.undertow.protocols.http2.HpackEncoder$State.OVERFLOW:Lio/undertow/protocols/http2/HpackEncoder$State;
areturn
end local 14 end local 13 end local 12 end local 11 end local 10 end local 9 end local 8 82: StackMap locals: io.undertow.protocols.http2.HpackEncoder io.undertow.util.HeaderMap java.nio.ByteBuffer long io.undertow.util.HeaderValues int int
StackMap stack:
iinc 7 1
StackMap locals:
StackMap stack:
83: iload 7
aload 5
invokevirtual io.undertow.util.HeaderValues.size:()I
if_icmplt 31
end local 7 84: StackMap locals:
StackMap stack:
aload 1
lload 3
invokevirtual io.undertow.util.HeaderMap.fiNext:(J)J
lstore 3
85: lload 3
ldc -1
lcmp
ifne 88
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.firstPass:Z
ifeq 88
86: aload 0
iconst_0
putfield io.undertow.protocols.http2.HpackEncoder.firstPass:Z
87: aload 1
invokevirtual io.undertow.util.HeaderMap.fastIterate:()J
lstore 3
end local 6 end local 5 88: StackMap locals:
StackMap stack:
lload 3
ldc -1
lcmp
ifne 18
89: aload 0
ldc -1
putfield io.undertow.protocols.http2.HpackEncoder.headersIterator:J
90: aload 0
iconst_1
putfield io.undertow.protocols.http2.HpackEncoder.firstPass:Z
91: getstatic io.undertow.protocols.http2.HpackEncoder$State.COMPLETE:Lio/undertow/protocols/http2/HpackEncoder$State;
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 92 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 92 1 headers Lio/undertow/util/HeaderMap;
0 92 2 target Ljava/nio/ByteBuffer;
2 9 3 i I
11 92 3 it J
19 88 5 values Lio/undertow/util/HeaderValues;
20 88 6 skip Z
30 84 7 i I
32 82 8 headerName Lio/undertow/util/HttpString;
33 82 9 required I
34 82 10 val Ljava/lang/String;
35 42 11 v I
37 40 12 c C
43 82 11 tableEntry Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
45 82 12 overflowing Z
46 82 13 current Ljava/nio/ByteBuffer;
53 82 14 canIndex Z
MethodParameters:
Name Flags
headers
target
private void writeHuffmanEncodableName(java.nio.ByteBuffer, io.undertow.util.HttpString);
descriptor: (Ljava/nio/ByteBuffer;Lio/undertow/util/HttpString;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.hpackHeaderFunction:Lio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;
aload 2
invokeinterface io.undertow.protocols.http2.HpackEncoder$HpackHeaderFunction.shouldUseHuffman:(Lio/undertow/util/HttpString;)Z
ifeq 3
1: aload 1
aload 2
invokevirtual io.undertow.util.HttpString.toString:()Ljava/lang/String;
iconst_1
invokestatic io.undertow.protocols.http2.HPackHuffman.encode:(Ljava/nio/ByteBuffer;Ljava/lang/String;Z)Z
ifeq 3
2: return
3: StackMap locals:
StackMap stack:
aload 1
iconst_0
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
4: aload 1
aload 2
invokevirtual io.undertow.util.HttpString.length:()I
bipush 7
invokestatic io.undertow.protocols.http2.Hpack.encodeInteger:(Ljava/nio/ByteBuffer;II)V
5: iconst_0
istore 3
start local 3 6: goto 9
7: StackMap locals: int
StackMap stack:
aload 1
aload 2
iload 3
invokevirtual io.undertow.util.HttpString.byteAt:(I)B
invokestatic io.undertow.protocols.http2.Hpack.toLower:(B)B
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
8: iinc 3 1
StackMap locals:
StackMap stack:
9: iload 3
aload 2
invokevirtual io.undertow.util.HttpString.length:()I
if_icmplt 7
end local 3 10: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 11 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 11 1 target Ljava/nio/ByteBuffer;
0 11 2 headerName Lio/undertow/util/HttpString;
6 10 3 j I
MethodParameters:
Name Flags
target
headerName
private void writeHuffmanEncodableValue(java.nio.ByteBuffer, io.undertow.util.HttpString, java.lang.String);
descriptor: (Ljava/nio/ByteBuffer;Lio/undertow/util/HttpString;Ljava/lang/String;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.hpackHeaderFunction:Lio/undertow/protocols/http2/HpackEncoder$HpackHeaderFunction;
aload 2
aload 3
invokeinterface io.undertow.protocols.http2.HpackEncoder$HpackHeaderFunction.shouldUseHuffman:(Lio/undertow/util/HttpString;Ljava/lang/String;)Z
ifeq 4
1: aload 1
aload 3
iconst_0
invokestatic io.undertow.protocols.http2.HPackHuffman.encode:(Ljava/nio/ByteBuffer;Ljava/lang/String;Z)Z
ifne 5
2: aload 0
aload 1
aload 3
invokevirtual io.undertow.protocols.http2.HpackEncoder.writeValueString:(Ljava/nio/ByteBuffer;Ljava/lang/String;)V
3: goto 5
4: StackMap locals:
StackMap stack:
aload 0
aload 1
aload 3
invokevirtual io.undertow.protocols.http2.HpackEncoder.writeValueString:(Ljava/nio/ByteBuffer;Ljava/lang/String;)V
5: StackMap locals:
StackMap stack:
return
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 6 1 target Ljava/nio/ByteBuffer;
0 6 2 headerName Lio/undertow/util/HttpString;
0 6 3 val Ljava/lang/String;
MethodParameters:
Name Flags
target
headerName
val
private void writeValueString(java.nio.ByteBuffer, java.lang.String);
descriptor: (Ljava/nio/ByteBuffer;Ljava/lang/String;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 1
iconst_0
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
1: aload 1
aload 2
invokevirtual java.lang.String.length:()I
bipush 7
invokestatic io.undertow.protocols.http2.Hpack.encodeInteger:(Ljava/nio/ByteBuffer;II)V
2: iconst_0
istore 3
start local 3 3: goto 6
4: StackMap locals: int
StackMap stack:
aload 1
aload 2
iload 3
invokevirtual java.lang.String.charAt:(I)C
i2b
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
5: iinc 3 1
StackMap locals:
StackMap stack:
6: iload 3
aload 2
invokevirtual java.lang.String.length:()I
if_icmplt 4
end local 3 7: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 8 1 target Ljava/nio/ByteBuffer;
0 8 2 val Ljava/lang/String;
3 7 3 j I
MethodParameters:
Name Flags
target
val
private void addToDynamicTable(io.undertow.util.HttpString, java.lang.String);
descriptor: (Lio/undertow/util/HttpString;Ljava/lang/String;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=6, locals=6, args_size=3
start local 0 start local 1 start local 2 0: aload 0
dup
getfield io.undertow.protocols.http2.HpackEncoder.entryPositionCounter:I
dup_x1
iconst_1
iadd
putfield io.undertow.protocols.http2.HpackEncoder.entryPositionCounter:I
istore 3
start local 3 1: new io.undertow.protocols.http2.HpackEncoder$DynamicTableEntry
dup
aload 0
aload 1
aload 2
iload 3
ineg
invokespecial io.undertow.protocols.http2.HpackEncoder$DynamicTableEntry.<init>:(Lio/undertow/protocols/http2/HpackEncoder;Lio/undertow/util/HttpString;Ljava/lang/String;I)V
astore 4
start local 4 2: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.dynamicTable:Ljava/util/Map;
aload 1
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.util.List
astore 5
start local 5 3: aload 5
ifnonnull 5
4: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.dynamicTable:Ljava/util/Map;
aload 1
new java.util.ArrayList
dup
iconst_1
invokespecial java.util.ArrayList.<init>:(I)V
dup
astore 5
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
5: StackMap locals: int io.undertow.protocols.http2.HpackEncoder$DynamicTableEntry java.util.List
StackMap stack:
aload 5
aload 4
invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
pop
6: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.evictionQueue:Ljava/util/Deque;
aload 4
invokeinterface java.util.Deque.add:(Ljava/lang/Object;)Z
pop
7: aload 0
dup
getfield io.undertow.protocols.http2.HpackEncoder.currentTableSize:I
aload 4
getfield io.undertow.protocols.http2.HpackEncoder$DynamicTableEntry.size:I
iadd
putfield io.undertow.protocols.http2.HpackEncoder.currentTableSize:I
8: aload 0
invokevirtual io.undertow.protocols.http2.HpackEncoder.runEvictionIfRequired:()V
9: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.entryPositionCounter:I
ldc 2147483647
if_icmpne 11
10: aload 0
invokevirtual io.undertow.protocols.http2.HpackEncoder.preventPositionRollover:()V
11: StackMap locals:
StackMap stack:
return
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 12 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 12 1 headerName Lio/undertow/util/HttpString;
0 12 2 val Ljava/lang/String;
1 12 3 pos I
2 12 4 d Lio/undertow/protocols/http2/HpackEncoder$DynamicTableEntry;
3 12 5 existing Ljava/util/List<Lio/undertow/protocols/http2/HpackEncoder$TableEntry;>;
MethodParameters:
Name Flags
headerName
val
private void preventPositionRollover();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=5, args_size=1
start local 0 0: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.dynamicTable:Ljava/util/Map;
invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
astore 2
goto 6
StackMap locals: io.undertow.protocols.http2.HpackEncoder top java.util.Iterator
StackMap stack:
1: aload 2
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast java.util.Map$Entry
astore 1
start local 1 2: aload 1
invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
checkcast java.util.List
invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
astore 4
goto 5
StackMap locals: io.undertow.protocols.http2.HpackEncoder java.util.Map$Entry java.util.Iterator top java.util.Iterator
StackMap stack:
3: aload 4
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast io.undertow.protocols.http2.HpackEncoder$TableEntry
astore 3
start local 3 4: aload 3
aload 3
invokevirtual io.undertow.protocols.http2.HpackEncoder$TableEntry.getPosition:()I
putfield io.undertow.protocols.http2.HpackEncoder$TableEntry.position:I
end local 3 5: StackMap locals:
StackMap stack:
aload 4
invokeinterface java.util.Iterator.hasNext:()Z
ifne 3
end local 1 6: StackMap locals: io.undertow.protocols.http2.HpackEncoder top java.util.Iterator
StackMap stack:
aload 2
invokeinterface java.util.Iterator.hasNext:()Z
ifne 1
7: aload 0
iconst_0
putfield io.undertow.protocols.http2.HpackEncoder.entryPositionCounter:I
8: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lio/undertow/protocols/http2/HpackEncoder;
2 6 1 entry Ljava/util/Map$Entry<Lio/undertow/util/HttpString;Ljava/util/List<Lio/undertow/protocols/http2/HpackEncoder$TableEntry;>;>;
4 5 3 t Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
private void runEvictionIfRequired();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=3, args_size=1
start local 0 0: goto 9
1: StackMap locals:
StackMap stack:
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.evictionQueue:Ljava/util/Deque;
invokeinterface java.util.Deque.poll:()Ljava/lang/Object;
checkcast io.undertow.protocols.http2.HpackEncoder$TableEntry
astore 1
start local 1 2: aload 1
ifnonnull 4
3: return
4: StackMap locals: io.undertow.protocols.http2.HpackEncoder$TableEntry
StackMap stack:
aload 0
dup
getfield io.undertow.protocols.http2.HpackEncoder.currentTableSize:I
aload 1
getfield io.undertow.protocols.http2.HpackEncoder$TableEntry.size:I
isub
putfield io.undertow.protocols.http2.HpackEncoder.currentTableSize:I
5: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.dynamicTable:Ljava/util/Map;
aload 1
getfield io.undertow.protocols.http2.HpackEncoder$TableEntry.name:Lio/undertow/util/HttpString;
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.util.List
astore 2
start local 2 6: aload 2
aload 1
invokeinterface java.util.List.remove:(Ljava/lang/Object;)Z
pop
7: aload 2
invokeinterface java.util.List.isEmpty:()Z
ifeq 9
8: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.dynamicTable:Ljava/util/Map;
aload 1
getfield io.undertow.protocols.http2.HpackEncoder$TableEntry.name:Lio/undertow/util/HttpString;
invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
pop
end local 2 end local 1 9: StackMap locals:
StackMap stack:
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.currentTableSize:I
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.maxTableSize:I
if_icmpgt 1
10: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 11 0 this Lio/undertow/protocols/http2/HpackEncoder;
2 9 1 next Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
6 9 2 list Ljava/util/List<Lio/undertow/protocols/http2/HpackEncoder$TableEntry;>;
private io.undertow.protocols.http2.HpackEncoder$TableEntry findInTable(io.undertow.util.HttpString, java.lang.String);
descriptor: (Lio/undertow/util/HttpString;Ljava/lang/String;)Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=8, args_size=3
start local 0 start local 1 start local 2 0: getstatic io.undertow.protocols.http2.HpackEncoder.ENCODING_STATIC_TABLE:Ljava/util/Map;
aload 1
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast io.undertow.protocols.http2.HpackEncoder$TableEntry[]
astore 3
start local 3 1: aload 3
ifnull 8
2: aload 3
dup
astore 7
arraylength
istore 6
iconst_0
istore 5
goto 7
StackMap locals: io.undertow.protocols.http2.HpackEncoder io.undertow.util.HttpString java.lang.String io.undertow.protocols.http2.HpackEncoder$TableEntry[] top int int io.undertow.protocols.http2.HpackEncoder$TableEntry[]
StackMap stack:
3: aload 7
iload 5
aaload
astore 4
start local 4 4: aload 4
getfield io.undertow.protocols.http2.HpackEncoder$TableEntry.value:Ljava/lang/String;
ifnull 6
aload 4
getfield io.undertow.protocols.http2.HpackEncoder$TableEntry.value:Ljava/lang/String;
aload 2
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 6
5: aload 4
areturn
end local 4 6: StackMap locals:
StackMap stack:
iinc 5 1
StackMap locals:
StackMap stack:
7: iload 5
iload 6
if_icmplt 3
8: StackMap locals: io.undertow.protocols.http2.HpackEncoder io.undertow.util.HttpString java.lang.String io.undertow.protocols.http2.HpackEncoder$TableEntry[]
StackMap stack:
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.dynamicTable:Ljava/util/Map;
aload 1
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.util.List
astore 4
start local 4 9: aload 4
ifnull 17
10: iconst_0
istore 5
start local 5 11: goto 16
12: StackMap locals: java.util.List int
StackMap stack:
aload 4
iload 5
invokeinterface java.util.List.get:(I)Ljava/lang/Object;
checkcast io.undertow.protocols.http2.HpackEncoder$TableEntry
astore 6
start local 6 13: aload 6
getfield io.undertow.protocols.http2.HpackEncoder$TableEntry.value:Ljava/lang/String;
aload 2
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 15
14: aload 6
areturn
end local 6 15: StackMap locals:
StackMap stack:
iinc 5 1
StackMap locals:
StackMap stack:
16: iload 5
aload 4
invokeinterface java.util.List.size:()I
if_icmplt 12
end local 5 17: StackMap locals:
StackMap stack:
aload 3
ifnull 19
18: aload 3
iconst_0
aaload
areturn
19: StackMap locals:
StackMap stack:
aconst_null
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 20 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 20 1 headerName Lio/undertow/util/HttpString;
0 20 2 value Ljava/lang/String;
1 20 3 staticTable [Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
4 6 4 st Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
9 20 4 dynamic Ljava/util/List<Lio/undertow/protocols/http2/HpackEncoder$TableEntry;>;
11 17 5 i I
13 15 6 st Lio/undertow/protocols/http2/HpackEncoder$TableEntry;
MethodParameters:
Name Flags
headerName
value
public void setMaxTableSize(int);
descriptor: (I)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
iload 1
putfield io.undertow.protocols.http2.HpackEncoder.newMaxHeaderSize:I
1: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.minNewMaxHeaderSize:I
iconst_m1
if_icmpne 4
2: aload 0
iload 1
putfield io.undertow.protocols.http2.HpackEncoder.minNewMaxHeaderSize:I
3: goto 5
4: StackMap locals:
StackMap stack:
aload 0
iload 1
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.minNewMaxHeaderSize:I
invokestatic java.lang.Math.min:(II)I
putfield io.undertow.protocols.http2.HpackEncoder.minNewMaxHeaderSize:I
5: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 6 1 newSize I
MethodParameters:
Name Flags
newSize
private void handleTableSizeChange(java.nio.ByteBuffer);
descriptor: (Ljava/nio/ByteBuffer;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
getfield io.undertow.protocols.http2.HpackEncoder.newMaxHeaderSize:I
iconst_m1
if_icmpne 2
1: return
2: StackMap locals:
StackMap stack:
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.minNewMaxHeaderSize:I
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.newMaxHeaderSize:I
if_icmpeq 5
3: aload 1
bipush 32
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
4: aload 1
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.minNewMaxHeaderSize:I
iconst_5
invokestatic io.undertow.protocols.http2.Hpack.encodeInteger:(Ljava/nio/ByteBuffer;II)V
5: StackMap locals:
StackMap stack:
aload 1
bipush 32
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
6: aload 1
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.newMaxHeaderSize:I
iconst_5
invokestatic io.undertow.protocols.http2.Hpack.encodeInteger:(Ljava/nio/ByteBuffer;II)V
7: aload 0
aload 0
getfield io.undertow.protocols.http2.HpackEncoder.newMaxHeaderSize:I
putfield io.undertow.protocols.http2.HpackEncoder.maxTableSize:I
8: aload 0
invokevirtual io.undertow.protocols.http2.HpackEncoder.runEvictionIfRequired:()V
9: aload 0
iconst_m1
putfield io.undertow.protocols.http2.HpackEncoder.newMaxHeaderSize:I
10: aload 0
iconst_m1
putfield io.undertow.protocols.http2.HpackEncoder.minNewMaxHeaderSize:I
11: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 12 0 this Lio/undertow/protocols/http2/HpackEncoder;
0 12 1 target Ljava/nio/ByteBuffer;
MethodParameters:
Name Flags
target
}
SourceFile: "HpackEncoder.java"
NestMembers:
io.undertow.protocols.http2.HpackEncoder$1 io.undertow.protocols.http2.HpackEncoder$DynamicTableEntry io.undertow.protocols.http2.HpackEncoder$HpackHeaderFunction io.undertow.protocols.http2.HpackEncoder$State io.undertow.protocols.http2.HpackEncoder$TableEntry
InnerClasses:
HeaderField = io.undertow.protocols.http2.Hpack$HeaderField of io.undertow.protocols.http2.Hpack
io.undertow.protocols.http2.HpackEncoder$1
DynamicTableEntry = io.undertow.protocols.http2.HpackEncoder$DynamicTableEntry of io.undertow.protocols.http2.HpackEncoder
public abstract HpackHeaderFunction = io.undertow.protocols.http2.HpackEncoder$HpackHeaderFunction of io.undertow.protocols.http2.HpackEncoder
public final State = io.undertow.protocols.http2.HpackEncoder$State of io.undertow.protocols.http2.HpackEncoder
TableEntry = io.undertow.protocols.http2.HpackEncoder$TableEntry of io.undertow.protocols.http2.HpackEncoder
public abstract Entry = java.util.Map$Entry of java.util.Map