123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960 |
- .class Lokhttp3/internal/http2/Huffman;
- .super Ljava/lang/Object;
- .source ""
- # annotations
- .annotation system Ldalvik/annotation/MemberClasses;
- value = {
- Lokhttp3/internal/http2/Huffman$Node;
- }
- .end annotation
- # static fields
- .field private static final CODES:[I
- .field private static final CODE_LENGTHS:[B
- .field private static final INSTANCE:Lokhttp3/internal/http2/Huffman;
- # instance fields
- .field private final root:Lokhttp3/internal/http2/Huffman$Node;
- # direct methods
- .method static constructor <clinit>()V
- .locals 2
- const/16 v0, 0x100
- new-array v1, v0, [I
- fill-array-data v1, :array_0
- sput-object v1, Lokhttp3/internal/http2/Huffman;->CODES:[I
- new-array v0, v0, [B
- fill-array-data v0, :array_1
- sput-object v0, Lokhttp3/internal/http2/Huffman;->CODE_LENGTHS:[B
- new-instance v0, Lokhttp3/internal/http2/Huffman;
- invoke-direct {v0}, Lokhttp3/internal/http2/Huffman;-><init>()V
- sput-object v0, Lokhttp3/internal/http2/Huffman;->INSTANCE:Lokhttp3/internal/http2/Huffman;
- return-void
- :array_0
- .array-data 4
- 0x1ff8
- 0x7fffd8
- 0xfffffe2
- 0xfffffe3
- 0xfffffe4
- 0xfffffe5
- 0xfffffe6
- 0xfffffe7
- 0xfffffe8
- 0xffffea
- 0x3ffffffc # 1.9999995f
- 0xfffffe9
- 0xfffffea
- 0x3ffffffd # 1.9999996f
- 0xfffffeb
- 0xfffffec
- 0xfffffed
- 0xfffffee
- 0xfffffef
- 0xffffff0
- 0xffffff1
- 0xffffff2
- 0x3ffffffe # 1.9999998f
- 0xffffff3
- 0xffffff4
- 0xffffff5
- 0xffffff6
- 0xffffff7
- 0xffffff8
- 0xffffff9
- 0xffffffa
- 0xffffffb
- 0x14
- 0x3f8
- 0x3f9
- 0xffa
- 0x1ff9
- 0x15
- 0xf8
- 0x7fa
- 0x3fa
- 0x3fb
- 0xf9
- 0x7fb
- 0xfa
- 0x16
- 0x17
- 0x18
- 0x0
- 0x1
- 0x2
- 0x19
- 0x1a
- 0x1b
- 0x1c
- 0x1d
- 0x1e
- 0x1f
- 0x5c
- 0xfb
- 0x7ffc
- 0x20
- 0xffb
- 0x3fc
- 0x1ffa
- 0x21
- 0x5d
- 0x5e
- 0x5f
- 0x60
- 0x61
- 0x62
- 0x63
- 0x64
- 0x65
- 0x66
- 0x67
- 0x68
- 0x69
- 0x6a
- 0x6b
- 0x6c
- 0x6d
- 0x6e
- 0x6f
- 0x70
- 0x71
- 0x72
- 0xfc
- 0x73
- 0xfd
- 0x1ffb
- 0x7fff0
- 0x1ffc
- 0x3ffc
- 0x22
- 0x7ffd
- 0x3
- 0x23
- 0x4
- 0x24
- 0x5
- 0x25
- 0x26
- 0x27
- 0x6
- 0x74
- 0x75
- 0x28
- 0x29
- 0x2a
- 0x7
- 0x2b
- 0x76
- 0x2c
- 0x8
- 0x9
- 0x2d
- 0x77
- 0x78
- 0x79
- 0x7a
- 0x7b
- 0x7ffe
- 0x7fc
- 0x3ffd
- 0x1ffd
- 0xffffffc
- 0xfffe6
- 0x3fffd2
- 0xfffe7
- 0xfffe8
- 0x3fffd3
- 0x3fffd4
- 0x3fffd5
- 0x7fffd9
- 0x3fffd6
- 0x7fffda
- 0x7fffdb
- 0x7fffdc
- 0x7fffdd
- 0x7fffde
- 0xffffeb
- 0x7fffdf
- 0xffffec
- 0xffffed
- 0x3fffd7
- 0x7fffe0
- 0xffffee
- 0x7fffe1
- 0x7fffe2
- 0x7fffe3
- 0x7fffe4
- 0x1fffdc
- 0x3fffd8
- 0x7fffe5
- 0x3fffd9
- 0x7fffe6
- 0x7fffe7
- 0xffffef
- 0x3fffda
- 0x1fffdd
- 0xfffe9
- 0x3fffdb
- 0x3fffdc
- 0x7fffe8
- 0x7fffe9
- 0x1fffde
- 0x7fffea
- 0x3fffdd
- 0x3fffde
- 0xfffff0
- 0x1fffdf
- 0x3fffdf
- 0x7fffeb
- 0x7fffec
- 0x1fffe0
- 0x1fffe1
- 0x3fffe0
- 0x1fffe2
- 0x7fffed
- 0x3fffe1
- 0x7fffee
- 0x7fffef
- 0xfffea
- 0x3fffe2
- 0x3fffe3
- 0x3fffe4
- 0x7ffff0
- 0x3fffe5
- 0x3fffe6
- 0x7ffff1
- 0x3ffffe0
- 0x3ffffe1
- 0xfffeb
- 0x7fff1
- 0x3fffe7
- 0x7ffff2
- 0x3fffe8
- 0x1ffffec
- 0x3ffffe2
- 0x3ffffe3
- 0x3ffffe4
- 0x7ffffde
- 0x7ffffdf
- 0x3ffffe5
- 0xfffff1
- 0x1ffffed
- 0x7fff2
- 0x1fffe3
- 0x3ffffe6
- 0x7ffffe0
- 0x7ffffe1
- 0x3ffffe7
- 0x7ffffe2
- 0xfffff2
- 0x1fffe4
- 0x1fffe5
- 0x3ffffe8
- 0x3ffffe9
- 0xffffffd
- 0x7ffffe3
- 0x7ffffe4
- 0x7ffffe5
- 0xfffec
- 0xfffff3
- 0xfffed
- 0x1fffe6
- 0x3fffe9
- 0x1fffe7
- 0x1fffe8
- 0x7ffff3
- 0x3fffea
- 0x3fffeb
- 0x1ffffee
- 0x1ffffef
- 0xfffff4
- 0xfffff5
- 0x3ffffea
- 0x7ffff4
- 0x3ffffeb
- 0x7ffffe6
- 0x3ffffec
- 0x3ffffed
- 0x7ffffe7
- 0x7ffffe8
- 0x7ffffe9
- 0x7ffffea
- 0x7ffffeb
- 0xffffffe
- 0x7ffffec
- 0x7ffffed
- 0x7ffffee
- 0x7ffffef
- 0x7fffff0
- 0x3ffffee
- .end array-data
- :array_1
- .array-data 1
- 0xdt
- 0x17t
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x18t
- 0x1et
- 0x1ct
- 0x1ct
- 0x1et
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1et
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x1ct
- 0x6t
- 0xat
- 0xat
- 0xct
- 0xdt
- 0x6t
- 0x8t
- 0xbt
- 0xat
- 0xat
- 0x8t
- 0xbt
- 0x8t
- 0x6t
- 0x6t
- 0x6t
- 0x5t
- 0x5t
- 0x5t
- 0x6t
- 0x6t
- 0x6t
- 0x6t
- 0x6t
- 0x6t
- 0x6t
- 0x7t
- 0x8t
- 0xft
- 0x6t
- 0xct
- 0xat
- 0xdt
- 0x6t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x8t
- 0x7t
- 0x8t
- 0xdt
- 0x13t
- 0xdt
- 0xet
- 0x6t
- 0xft
- 0x5t
- 0x6t
- 0x5t
- 0x6t
- 0x5t
- 0x6t
- 0x6t
- 0x6t
- 0x5t
- 0x7t
- 0x7t
- 0x6t
- 0x6t
- 0x6t
- 0x5t
- 0x6t
- 0x7t
- 0x6t
- 0x5t
- 0x5t
- 0x6t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0x7t
- 0xft
- 0xbt
- 0xet
- 0xdt
- 0x1ct
- 0x14t
- 0x16t
- 0x14t
- 0x14t
- 0x16t
- 0x16t
- 0x16t
- 0x17t
- 0x16t
- 0x17t
- 0x17t
- 0x17t
- 0x17t
- 0x17t
- 0x18t
- 0x17t
- 0x18t
- 0x18t
- 0x16t
- 0x17t
- 0x18t
- 0x17t
- 0x17t
- 0x17t
- 0x17t
- 0x15t
- 0x16t
- 0x17t
- 0x16t
- 0x17t
- 0x17t
- 0x18t
- 0x16t
- 0x15t
- 0x14t
- 0x16t
- 0x16t
- 0x17t
- 0x17t
- 0x15t
- 0x17t
- 0x16t
- 0x16t
- 0x18t
- 0x15t
- 0x16t
- 0x17t
- 0x17t
- 0x15t
- 0x15t
- 0x16t
- 0x15t
- 0x17t
- 0x16t
- 0x17t
- 0x17t
- 0x14t
- 0x16t
- 0x16t
- 0x16t
- 0x17t
- 0x16t
- 0x16t
- 0x17t
- 0x1at
- 0x1at
- 0x14t
- 0x13t
- 0x16t
- 0x17t
- 0x16t
- 0x19t
- 0x1at
- 0x1at
- 0x1at
- 0x1bt
- 0x1bt
- 0x1at
- 0x18t
- 0x19t
- 0x13t
- 0x15t
- 0x1at
- 0x1bt
- 0x1bt
- 0x1at
- 0x1bt
- 0x18t
- 0x15t
- 0x15t
- 0x1at
- 0x1at
- 0x1ct
- 0x1bt
- 0x1bt
- 0x1bt
- 0x14t
- 0x18t
- 0x14t
- 0x15t
- 0x16t
- 0x15t
- 0x15t
- 0x17t
- 0x16t
- 0x16t
- 0x19t
- 0x19t
- 0x18t
- 0x18t
- 0x1at
- 0x17t
- 0x1at
- 0x1bt
- 0x1at
- 0x1at
- 0x1bt
- 0x1bt
- 0x1bt
- 0x1bt
- 0x1bt
- 0x1ct
- 0x1bt
- 0x1bt
- 0x1bt
- 0x1bt
- 0x1bt
- 0x1at
- .end array-data
- .end method
- .method private constructor <init>()V
- .locals 1
- invoke-direct {p0}, Ljava/lang/Object;-><init>()V
- new-instance v0, Lokhttp3/internal/http2/Huffman$Node;
- invoke-direct {v0}, Lokhttp3/internal/http2/Huffman$Node;-><init>()V
- iput-object v0, p0, Lokhttp3/internal/http2/Huffman;->root:Lokhttp3/internal/http2/Huffman$Node;
- invoke-direct {p0}, Lokhttp3/internal/http2/Huffman;->buildTree()V
- return-void
- .end method
- .method private addCode(IIB)V
- .locals 4
- new-instance v0, Lokhttp3/internal/http2/Huffman$Node;
- invoke-direct {v0, p1, p3}, Lokhttp3/internal/http2/Huffman$Node;-><init>(II)V
- iget-object p1, p0, Lokhttp3/internal/http2/Huffman;->root:Lokhttp3/internal/http2/Huffman$Node;
- :goto_0
- const/16 v1, 0x8
- if-le p3, v1, :cond_2
- add-int/lit8 p3, p3, -0x8
- int-to-byte p3, p3
- ushr-int v1, p2, p3
- and-int/lit16 v1, v1, 0xff
- iget-object v2, p1, Lokhttp3/internal/http2/Huffman$Node;->children:[Lokhttp3/internal/http2/Huffman$Node;
- if-eqz v2, :cond_1
- aget-object v3, v2, v1
- if-nez v3, :cond_0
- new-instance v3, Lokhttp3/internal/http2/Huffman$Node;
- invoke-direct {v3}, Lokhttp3/internal/http2/Huffman$Node;-><init>()V
- aput-object v3, v2, v1
- :cond_0
- iget-object p1, p1, Lokhttp3/internal/http2/Huffman$Node;->children:[Lokhttp3/internal/http2/Huffman$Node;
- aget-object p1, p1, v1
- goto :goto_0
- :cond_1
- new-instance p1, Ljava/lang/IllegalStateException;
- const-string p2, "invalid dictionary: prefix not unique"
- invoke-direct {p1, p2}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
- throw p1
- :cond_2
- sub-int/2addr v1, p3
- shl-int/2addr p2, v1
- and-int/lit16 p2, p2, 0xff
- const/4 p3, 0x1
- shl-int/2addr p3, v1
- move v1, p2
- :goto_1
- add-int v2, p2, p3
- if-ge v1, v2, :cond_3
- iget-object v2, p1, Lokhttp3/internal/http2/Huffman$Node;->children:[Lokhttp3/internal/http2/Huffman$Node;
- aput-object v0, v2, v1
- add-int/lit8 v1, v1, 0x1
- goto :goto_1
- :cond_3
- return-void
- .end method
- .method private buildTree()V
- .locals 3
- const/4 v0, 0x0
- :goto_0
- sget-object v1, Lokhttp3/internal/http2/Huffman;->CODE_LENGTHS:[B
- array-length v2, v1
- if-ge v0, v2, :cond_0
- sget-object v2, Lokhttp3/internal/http2/Huffman;->CODES:[I
- aget v2, v2, v0
- aget-byte v1, v1, v0
- invoke-direct {p0, v0, v2, v1}, Lokhttp3/internal/http2/Huffman;->addCode(IIB)V
- add-int/lit8 v0, v0, 0x1
- goto :goto_0
- :cond_0
- return-void
- .end method
- .method public static get()Lokhttp3/internal/http2/Huffman;
- .locals 1
- sget-object v0, Lokhttp3/internal/http2/Huffman;->INSTANCE:Lokhttp3/internal/http2/Huffman;
- return-object v0
- .end method
- # virtual methods
- .method decode([B)[B
- .locals 7
- new-instance v0, Ljava/io/ByteArrayOutputStream;
- invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;-><init>()V
- iget-object v1, p0, Lokhttp3/internal/http2/Huffman;->root:Lokhttp3/internal/http2/Huffman$Node;
- const/4 v2, 0x0
- move-object v4, v1
- const/4 v1, 0x0
- const/4 v3, 0x0
- :goto_0
- array-length v5, p1
- const/16 v6, 0x8
- if-ge v2, v5, :cond_2
- aget-byte v5, p1, v2
- and-int/lit16 v5, v5, 0xff
- shl-int/lit8 v1, v1, 0x8
- or-int/2addr v1, v5
- add-int/lit8 v3, v3, 0x8
- :goto_1
- if-lt v3, v6, :cond_1
- add-int/lit8 v5, v3, -0x8
- ushr-int v5, v1, v5
- and-int/lit16 v5, v5, 0xff
- iget-object v4, v4, Lokhttp3/internal/http2/Huffman$Node;->children:[Lokhttp3/internal/http2/Huffman$Node;
- aget-object v4, v4, v5
- iget-object v5, v4, Lokhttp3/internal/http2/Huffman$Node;->children:[Lokhttp3/internal/http2/Huffman$Node;
- if-nez v5, :cond_0
- iget v5, v4, Lokhttp3/internal/http2/Huffman$Node;->symbol:I
- invoke-virtual {v0, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V
- iget v4, v4, Lokhttp3/internal/http2/Huffman$Node;->terminalBits:I
- sub-int/2addr v3, v4
- iget-object v4, p0, Lokhttp3/internal/http2/Huffman;->root:Lokhttp3/internal/http2/Huffman$Node;
- goto :goto_1
- :cond_0
- add-int/lit8 v3, v3, -0x8
- goto :goto_1
- :cond_1
- add-int/lit8 v2, v2, 0x1
- goto :goto_0
- :cond_2
- :goto_2
- if-lez v3, :cond_4
- rsub-int/lit8 p1, v3, 0x8
- shl-int p1, v1, p1
- and-int/lit16 p1, p1, 0xff
- iget-object v2, v4, Lokhttp3/internal/http2/Huffman$Node;->children:[Lokhttp3/internal/http2/Huffman$Node;
- aget-object p1, v2, p1
- iget-object v2, p1, Lokhttp3/internal/http2/Huffman$Node;->children:[Lokhttp3/internal/http2/Huffman$Node;
- if-nez v2, :cond_4
- iget v2, p1, Lokhttp3/internal/http2/Huffman$Node;->terminalBits:I
- if-le v2, v3, :cond_3
- goto :goto_3
- :cond_3
- iget v2, p1, Lokhttp3/internal/http2/Huffman$Node;->symbol:I
- invoke-virtual {v0, v2}, Ljava/io/ByteArrayOutputStream;->write(I)V
- iget p1, p1, Lokhttp3/internal/http2/Huffman$Node;->terminalBits:I
- sub-int/2addr v3, p1
- iget-object v4, p0, Lokhttp3/internal/http2/Huffman;->root:Lokhttp3/internal/http2/Huffman$Node;
- goto :goto_2
- :cond_4
- :goto_3
- invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
- move-result-object p1
- return-object p1
- .end method
- .method encode(Lokio/ByteString;Lokio/BufferedSink;)V
- .locals 8
- .annotation system Ldalvik/annotation/Throws;
- value = {
- Ljava/io/IOException;
- }
- .end annotation
- const/4 v0, 0x0
- const-wide/16 v1, 0x0
- move-wide v2, v1
- const/4 v1, 0x0
- :goto_0
- invoke-virtual {p1}, Lokio/ByteString;->size()I
- move-result v4
- const/16 v5, 0x8
- const/16 v6, 0xff
- if-ge v0, v4, :cond_1
- invoke-virtual {p1, v0}, Lokio/ByteString;->getByte(I)B
- move-result v4
- and-int/2addr v4, v6
- sget-object v6, Lokhttp3/internal/http2/Huffman;->CODES:[I
- aget v6, v6, v4
- sget-object v7, Lokhttp3/internal/http2/Huffman;->CODE_LENGTHS:[B
- aget-byte v4, v7, v4
- shl-long/2addr v2, v4
- int-to-long v6, v6
- or-long/2addr v2, v6
- add-int/2addr v1, v4
- :goto_1
- if-lt v1, v5, :cond_0
- add-int/lit8 v1, v1, -0x8
- shr-long v6, v2, v1
- long-to-int v4, v6
- invoke-interface {p2, v4}, Lokio/BufferedSink;->writeByte(I)Lokio/BufferedSink;
- goto :goto_1
- :cond_0
- add-int/lit8 v0, v0, 0x1
- goto :goto_0
- :cond_1
- if-lez v1, :cond_2
- sub-int/2addr v5, v1
- shl-long/2addr v2, v5
- ushr-int p1, v6, v1
- int-to-long v0, p1
- or-long/2addr v0, v2
- long-to-int p1, v0
- invoke-interface {p2, p1}, Lokio/BufferedSink;->writeByte(I)Lokio/BufferedSink;
- :cond_2
- return-void
- .end method
- .method encodedLength(Lokio/ByteString;)I
- .locals 5
- const-wide/16 v0, 0x0
- const/4 v2, 0x0
- :goto_0
- invoke-virtual {p1}, Lokio/ByteString;->size()I
- move-result v3
- if-ge v2, v3, :cond_0
- invoke-virtual {p1, v2}, Lokio/ByteString;->getByte(I)B
- move-result v3
- and-int/lit16 v3, v3, 0xff
- sget-object v4, Lokhttp3/internal/http2/Huffman;->CODE_LENGTHS:[B
- aget-byte v3, v4, v3
- int-to-long v3, v3
- add-long/2addr v0, v3
- add-int/lit8 v2, v2, 0x1
- goto :goto_0
- :cond_0
- const-wide/16 v2, 0x7
- add-long/2addr v0, v2
- const/4 p1, 0x3
- shr-long/2addr v0, p1
- long-to-int p1, v0
- return p1
- .end method
|