HttpProxySessionHandler.smali

.class public Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;
.super Ljava/lang/Object;
.source "HttpProxySessionHandler.java"


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler$BufferOverflowException;
    }
.end annotation


# static fields
.field private static final DEBUG:Z

.field private static final HTTP_CHECK_BUFFER_SIZE:I = 0x4

.field private static final HTTP_CHECK_TIMEOUT:J = 0xbb8L

.field private static final TAG:Ljava/lang/String; = "QbSdk"


# instance fields
.field private mContext:Landroid/content/Context;

.field private mIsFirstBulk:Z

.field private mIsFirstReceivedBulk:Z

.field private mIsProxy:Z

.field private mIsProxyConfigured:Z

.field private mIsSafeVpnProxy:Z

.field private mProxyAddress:Ljava/net/InetSocketAddress;

.field private mReportInfo:Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;

.field private mSpeedyHeaders:[B


# direct methods
.method static constructor <clinit>()V
    .registers 1

    .prologue
    .line 52
    sget-boolean v0, Lcom/quickbird/sdk/QuickBird;->SDK_DEBUG:Z

    sput-boolean v0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    return-void
.end method

.method public constructor <init>(Ljava/lang/String;Landroid/content/Context;Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;)V
    .registers 8
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/UnsupportedEncodingException;
        }
    .end annotation

    .prologue
    const/4 v3, 0x0

    const/4 v2, 0x1

    .line 70
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 72
    iput-object p2, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mContext:Landroid/content/Context;

    .line 73
    iput-object p3, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mReportInfo:Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;

    .line 75
    iput-boolean v3, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxyConfigured:Z

    .line 76
    iget-object v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mContext:Landroid/content/Context;

    invoke-static {v0}, Lcom/quickbird/mini/utils/ProxyUtils;->isSafeVpnProxy(Landroid/content/Context;)Z

    move-result v0

    .line 77
    if-eqz v0, :cond_30

    .line 78
    iput-boolean v2, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxyConfigured:Z

    .line 86
    :cond_15
    :goto_15
    iget-boolean v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxyConfigured:Z

    if-eqz v1, :cond_47

    .line 87
    invoke-static {p2}, Lcom/quickbird/sdk/internal/UserManager;->getInstance(Landroid/content/Context;)Lcom/quickbird/sdk/internal/UserManager;

    move-result-object v1

    invoke-virtual {v1, p1, v0}, Lcom/quickbird/sdk/internal/UserManager;->getProxyHeader(Ljava/lang/String;Z)[B

    move-result-object v0

    iput-object v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mSpeedyHeaders:[B

    .line 89
    iget-object v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mSpeedyHeaders:[B

    array-length v0, v0

    if-nez v0, :cond_41

    .line 90
    new-instance v0, Ljava/io/UnsupportedEncodingException;

    const-string v1, "Encoding Proxy Header error!"

    invoke-direct {v0, v1}, Ljava/io/UnsupportedEncodingException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 80
    :cond_30
    invoke-static {p2}, Lcom/quickbird/sdk/internal/UserManager;->getInstance(Landroid/content/Context;)Lcom/quickbird/sdk/internal/UserManager;

    move-result-object v1

    invoke-virtual {v1}, Lcom/quickbird/sdk/internal/UserManager;->getProxyAddress()Ljava/net/InetSocketAddress;

    move-result-object v1

    iput-object v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mProxyAddress:Ljava/net/InetSocketAddress;

    .line 81
    iget-object v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mProxyAddress:Ljava/net/InetSocketAddress;

    if-eqz v1, :cond_15

    .line 82
    iput-boolean v2, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxyConfigured:Z

    goto :goto_15

    .line 93
    :cond_41
    iput-boolean v3, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxy:Z

    .line 95
    iput-boolean v2, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsFirstBulk:Z

    .line 97
    iput-boolean v2, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsFirstReceivedBulk:Z

    .line 100
    :cond_47
    return-void
.end method

.method private static copyFromInputs([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)I
    .registers 9

    .prologue
    const/4 v1, 0x0

    .line 104
    .line 107
    array-length v0, p0

    if-nez v0, :cond_5

    .line 133
    :goto_4
    return p2

    .line 110
    :cond_5
    aget-object v0, p0, v1

    move v2, v1

    .line 112
    :cond_8
    :goto_8
    array-length v3, p0

    if-ge v1, v3, :cond_3d

    if-lez p2, :cond_3d

    .line 113
    add-int/lit8 v1, v1, 0x1

    .line 114
    invoke-virtual {v0}, Ljava/nio/ByteBuffer;->hasRemaining()Z

    move-result v3

    if-nez v3, :cond_1b

    array-length v3, p0

    if-ge v1, v3, :cond_1b

    .line 115
    aget-object v0, p0, v1

    goto :goto_8

    .line 119
    :cond_1b
    invoke-virtual {v0}, Ljava/nio/ByteBuffer;->remaining()I

    move-result v3

    invoke-static {p2, v3}, Ljava/lang/Math;->min(II)I

    move-result v3

    .line 120
    invoke-virtual {v0}, Ljava/nio/ByteBuffer;->limit()I

    move-result v4

    .line 121
    invoke-virtual {v0}, Ljava/nio/ByteBuffer;->position()I

    move-result v5

    add-int/2addr v5, v3

    .line 122
    invoke-virtual {v0, v5}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;

    .line 124
    invoke-virtual {p1, v0}, Ljava/nio/ByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;

    .line 125
    invoke-virtual {v0, v4}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;

    .line 126
    sub-int/2addr p2, v3

    .line 127
    add-int/2addr v2, v3

    .line 129
    array-length v3, p0

    if-ge v1, v3, :cond_8

    .line 130
    aget-object v0, p0, v1

    goto :goto_8

    :cond_3d
    move p2, v2

    .line 133
    goto :goto_4
.end method

.method private decodeInput(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)V
    .registers 8
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler$BufferOverflowException;
        }
    .end annotation

    .prologue
    const/4 v2, 0x1

    .line 138
    invoke-virtual {p3}, Ljava/nio/CharBuffer;->clear()Ljava/nio/Buffer;

    .line 140
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->hasRemaining()Z

    move-result v0

    if-eqz v0, :cond_5f

    .line 142
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->remaining()I

    move-result v0

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I

    move-result v1

    add-int/2addr v0, v1

    .line 143
    invoke-virtual {p3}, Ljava/nio/CharBuffer;->capacity()I

    move-result v1

    if-ge v1, v0, :cond_37

    .line 144
    const/16 v1, 0x3f38

    if-ge v0, v1, :cond_21

    .line 145
    invoke-static {v0}, Ljava/nio/CharBuffer;->allocate(I)Ljava/nio/CharBuffer;

    move-result-object p3

    .line 156
    :cond_21
    :goto_21
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->mark()Ljava/nio/Buffer;

    .line 157
    invoke-static {p1, p3, v2}, Lcom/quickbird/mini/utils/ProxyUtils;->decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;

    move-result-object v0

    .line 158
    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->reset()Ljava/nio/Buffer;

    .line 159
    sget-object v1, Ljava/nio/charset/CoderResult;->UNDERFLOW:Ljava/nio/charset/CoderResult;

    if-eq v0, v1, :cond_4c

    .line 160
    new-instance v0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler$BufferOverflowException;

    const-string v1, "asdfasdf"

    invoke-direct {v0, p0, v1}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler$BufferOverflowException;-><init>(Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;Ljava/lang/String;)V

    throw v0

    .line 148
    :cond_37
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->mark()Ljava/nio/Buffer;

    .line 149
    invoke-static {p4, p3, v2}, Lcom/quickbird/mini/utils/ProxyUtils;->decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;

    move-result-object v0

    .line 150
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->reset()Ljava/nio/Buffer;

    .line 151
    sget-object v1, Ljava/nio/charset/CoderResult;->UNDERFLOW:Ljava/nio/charset/CoderResult;

    if-ne v0, v1, :cond_21

    .line 152
    invoke-static {p1, p3, v2}, Lcom/quickbird/mini/utils/ProxyUtils;->decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;

    .line 153
    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->reset()Ljava/nio/Buffer;

    goto :goto_21

    .line 163
    :cond_4c
    invoke-static {p1, p3, v2}, Lcom/quickbird/mini/utils/ProxyUtils;->decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;

    move-result-object v0

    .line 164
    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->reset()Ljava/nio/Buffer;

    .line 165
    sget-object v1, Ljava/nio/charset/CoderResult;->UNDERFLOW:Ljava/nio/charset/CoderResult;

    if-eq v0, v1, :cond_65

    .line 166
    new-instance v0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler$BufferOverflowException;

    const-string v1, "FFFDDD"

    invoke-direct {v0, p0, v1}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler$BufferOverflowException;-><init>(Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;Ljava/lang/String;)V

    throw v0

    .line 171
    :cond_5f
    invoke-static {p1, p3, v2}, Lcom/quickbird/mini/utils/ProxyUtils;->decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;

    .line 172
    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->reset()Ljava/nio/Buffer;

    .line 174
    :cond_65
    return-void
.end method

.method private isProxySupportProtocol(Ljava/nio/channels/SocketChannel;Ljava/nio/ByteBuffer;)Z
    .registers 8

    .prologue
    const/4 v1, 0x0

    .line 246
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;

    .line 248
    invoke-direct {p0, p1, p2}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->readSocketChannelData(Ljava/nio/channels/SocketChannel;Ljava/nio/ByteBuffer;)Z

    move-result v0

    if-eqz v0, :cond_cd

    .line 249
    iget-object v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mContext:Landroid/content/Context;

    invoke-static {v0}, Lcom/quickbird/mini/vpn/vpn/VpnServiceManager;->getInstance(Landroid/content/Context;)Lcom/quickbird/mini/vpn/vpn/VpnServiceManager;

    move-result-object v3

    .line 250
    invoke-virtual {v3}, Lcom/quickbird/mini/vpn/vpn/VpnServiceManager;->isSafeVpnOpened()Z

    move-result v0

    if-eqz v0, :cond_8d

    iget-object v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mContext:Landroid/content/Context;

    invoke-static {v0}, Lcom/quickbird/sdk/utils/QBNetworkUtils;->isWifiNetworkType(Landroid/content/Context;)Z

    move-result v0

    if-eqz v0, :cond_8d

    .line 252
    new-instance v0, Ljava/io/StringReader;

    new-instance v2, Ljava/lang/String;

    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->array()[B

    move-result-object v4

    invoke-direct {v2, v4}, Ljava/lang/String;-><init>([B)V

    invoke-direct {v0, v2}, Ljava/io/StringReader;-><init>(Ljava/lang/String;)V

    .line 253
    new-instance v2, Ljava/io/BufferedReader;

    invoke-direct {v2, v0}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V

    .line 256
    :try_start_31
    invoke-virtual {v2}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;

    move-result-object v0

    if-eqz v0, :cond_8d

    .line 257
    const-string v2, "HTTP/1.1"

    invoke-virtual {v0, v2}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v2

    .line 258
    if-eqz v2, :cond_51

    array-length v4, v2

    if-lez v4, :cond_51

    .line 259
    const/4 v4, 0x0

    aget-object v4, v2, v4

    invoke-virtual {v4}, Ljava/lang/String;->trim()Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v3, v4}, Lcom/quickbird/mini/vpn/vpn/VpnServiceManager;->skipUrl(Ljava/lang/String;)Z

    move-result v4

    if-eqz v4, :cond_6b

    move v0, v1

    .line 304
    :goto_50
    return v0

    .line 263
    :cond_51
    const-string v2, "HTTP/1.0"

    invoke-virtual {v0, v2}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v2

    .line 264
    if-eqz v2, :cond_6b

    array-length v4, v2

    if-lez v4, :cond_6b

    .line 265
    const/4 v4, 0x0

    aget-object v4, v2, v4

    invoke-virtual {v4}, Ljava/lang/String;->trim()Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v3, v4}, Lcom/quickbird/mini/vpn/vpn/VpnServiceManager;->skipUrl(Ljava/lang/String;)Z

    move-result v4

    if-eqz v4, :cond_6b

    move v0, v1

    .line 266
    goto :goto_50

    .line 270
    :cond_6b
    if-eqz v2, :cond_73

    array-length v4, v2

    if-lez v4, :cond_73

    .line 271
    const/4 v0, 0x0

    aget-object v0, v2, v0

    .line 273
    :cond_73
    const-string v2, "\\?"

    invoke-virtual {v0, v2}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v0

    .line 274
    if-eqz v0, :cond_8d

    array-length v2, v0

    if-lez v2, :cond_8d

    const/4 v2, 0x0

    aget-object v0, v0, v2

    invoke-virtual {v3, v0}, Lcom/quickbird/mini/vpn/vpn/VpnServiceManager;->skipUrl(Ljava/lang/String;)Z
    :try_end_84
    .catch Ljava/io/IOException; {:try_start_31 .. :try_end_84} :catch_89

    move-result v0

    if-eqz v0, :cond_8d

    move v0, v1

    .line 275
    goto :goto_50

    .line 278
    :catch_89
    move-exception v0

    .line 279
    invoke-virtual {v0}, Ljava/io/IOException;->printStackTrace()V

    .line 283
    :cond_8d
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->position()I

    move-result v2

    .line 284
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;

    .line 285
    const/4 v0, 0x4

    invoke-virtual {p2, v0}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;

    .line 286
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->mark()Ljava/nio/Buffer;

    .line 289
    invoke-static {}, Lcom/quickbird/mini/utils/ProxyUtils;->getHttpVerbs()Ljava/util/List;

    move-result-object v0

    .line 290
    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v3

    :cond_a3
    invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_c1

    invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Ljava/nio/ByteBuffer;

    .line 291
    invoke-virtual {p2, v0}, Ljava/nio/ByteBuffer;->compareTo(Ljava/nio/ByteBuffer;)I

    move-result v0

    if-nez v0, :cond_a3

    .line 293
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->capacity()I

    move-result v0

    invoke-virtual {p2, v0}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;

    .line 294
    invoke-virtual {p2, v2}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    .line 295
    const/4 v0, 0x1

    goto :goto_50

    .line 298
    :cond_c1
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->capacity()I

    move-result v0

    invoke-virtual {p2, v0}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;

    .line 299
    invoke-virtual {p2, v2}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    move v0, v1

    .line 301
    goto :goto_50

    .line 303
    :cond_cd
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;

    move v0, v1

    .line 304
    goto/16 :goto_50
.end method

.method private matchProxyConditions(Ljava/net/InetSocketAddress;)Z
    .registers 5

    .prologue
    const/4 v0, 0x0

    .line 344
    if-nez p1, :cond_4

    .line 369
    :cond_3
    :goto_3
    return v0

    .line 349
    :cond_4
    invoke-virtual {p1}, Ljava/net/InetSocketAddress;->getPort()I

    move-result v1

    invoke-static {v1}, Lcom/quickbird/mini/utils/ProxyUtils;->isHttpProxyPort(I)Z

    move-result v1

    if-eqz v1, :cond_3

    .line 353
    invoke-virtual {p1}, Ljava/net/InetSocketAddress;->getAddress()Ljava/net/InetAddress;

    move-result-object v1

    .line 354
    if-eqz v1, :cond_3

    .line 359
    invoke-virtual {v1}, Ljava/net/InetAddress;->isSiteLocalAddress()Z

    move-result v2

    if-nez v2, :cond_3

    .line 364
    invoke-virtual {v1}, Ljava/net/InetAddress;->getHostAddress()Ljava/lang/String;

    move-result-object v1

    .line 365
    if-eqz v1, :cond_3

    invoke-static {v1}, Lcom/quickbird/mini/utils/ProxyUtils;->isLocalHostAddress(Ljava/lang/String;)Z

    move-result v1

    if-nez v1, :cond_3

    .line 369
    const/4 v0, 0x1

    goto :goto_3
.end method

.method private proxifyHttpHeaders(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Z
    .registers 15

    .prologue
    .line 179
    const-string v1, ""

    .line 180
    const/4 v0, 0x0

    .line 181
    const/4 v2, 0x2

    new-array v2, v2, [Ljava/nio/ByteBuffer;

    .line 182
    const/4 v3, 0x0

    aput-object p2, v2, v3

    .line 183
    const/4 v3, 0x1

    aput-object p1, v2, v3

    .line 184
    invoke-static {p3}, Lcom/quickbird/mini/utils/ProxyUtils;->getRequestHeaderMatcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;

    move-result-object v3

    .line 186
    :goto_10
    invoke-virtual {v3}, Ljava/util/regex/Matcher;->find()Z

    move-result v4

    if-eqz v4, :cond_75

    .line 187
    const/4 v4, 0x1

    invoke-virtual {v3, v4}, Ljava/util/regex/Matcher;->start(I)I

    move-result v4

    .line 190
    const/4 v5, 0x2

    :try_start_1c
    invoke-virtual {v3, v5}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;

    move-result-object v5

    invoke-static {}, Lcom/quickbird/mini/utils/ProxyUtils;->getProxyCharsetName()Ljava/lang/String;

    move-result-object v6

    invoke-virtual {v5, v6}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B
    :try_end_27
    .catch Ljava/io/UnsupportedEncodingException; {:try_start_1c .. :try_end_27} :catch_6c

    move-result-object v5

    .line 196
    invoke-virtual {v3}, Ljava/util/regex/Matcher;->end()I

    move-result v6

    .line 197
    sub-int/2addr v4, v0

    .line 198
    invoke-static {v2, p4, v4}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->copyFromInputs([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)I

    .line 199
    add-int/2addr v4, v0

    .line 201
    :try_start_31
    new-instance v0, Ljava/lang/String;

    const/4 v7, 0x1

    invoke-virtual {v3, v7}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;

    move-result-object v7

    invoke-static {}, Lcom/quickbird/mini/utils/ProxyUtils;->getProxyCharsetName()Ljava/lang/String;

    move-result-object v8

    invoke-virtual {v7, v8}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B

    move-result-object v7

    invoke-direct {v0, v7}, Ljava/lang/String;-><init>([B)V
    :try_end_43
    .catch Ljava/io/UnsupportedEncodingException; {:try_start_31 .. :try_end_43} :catch_6f

    .line 206
    :goto_43
    const-string v1, "http://"

    invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v1

    if-nez v1, :cond_5d

    const-string v1, "HTTP://"

    invoke-virtual {v0, v1}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v1

    if-nez v1, :cond_5d

    .line 207
    invoke-static {}, Lcom/quickbird/mini/utils/ProxyUtils;->getHttpProxyPrefix()[B

    move-result-object v1

    invoke-virtual {p4, v1}, Ljava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;

    .line 208
    invoke-virtual {p4, v5}, Ljava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;

    .line 211
    :cond_5d
    sub-int v1, v6, v4

    .line 212
    invoke-static {v2, p4, v1}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->copyFromInputs([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)I

    .line 213
    add-int/2addr v1, v4

    .line 214
    iget-object v4, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mSpeedyHeaders:[B

    invoke-virtual {p4, v4}, Ljava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;

    move v9, v1

    move-object v1, v0

    move v0, v9

    .line 216
    goto :goto_10

    .line 191
    :catch_6c
    move-exception v0

    .line 192
    const/4 v0, 0x0

    .line 237
    :goto_6e
    return v0

    .line 202
    :catch_6f
    move-exception v0

    .line 204
    invoke-virtual {v0}, Ljava/io/UnsupportedEncodingException;->printStackTrace()V

    move-object v0, v1

    goto :goto_43

    .line 217
    :cond_75
    invoke-static {p3}, Lcom/quickbird/mini/utils/ProxyUtils;->getRequestModeMatcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;

    move-result-object v1

    .line 218
    invoke-virtual {v1, v0}, Ljava/util/regex/Matcher;->find(I)Z

    move-result v3

    if-eqz v3, :cond_a3

    .line 219
    invoke-virtual {v1}, Ljava/util/regex/Matcher;->start()I

    move-result v1

    sub-int/2addr v1, v0

    .line 220
    invoke-static {v2, p4, v1}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->copyFromInputs([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)I

    .line 221
    add-int/2addr v0, v1

    .line 222
    invoke-virtual {p3}, Ljava/nio/CharBuffer;->limit()I

    move-result v1

    sub-int v0, v1, v0

    .line 223
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->capacity()I

    move-result v1

    if-ge v1, v0, :cond_98

    .line 224
    invoke-static {v0}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;

    move-result-object p2

    .line 226
    :cond_98
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;

    .line 227
    invoke-static {v2, p2, v0}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->copyFromInputs([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)I

    .line 228
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;

    .line 229
    const/4 v0, 0x1

    goto :goto_6e

    .line 231
    :cond_a3
    invoke-virtual {p3}, Ljava/nio/CharBuffer;->limit()I

    move-result v1

    sub-int/2addr v1, v0

    .line 232
    invoke-static {v2, p4, v1}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->copyFromInputs([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)I

    .line 233
    add-int/2addr v0, v1

    .line 234
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->capacity()I

    move-result v0

    if-lez v0, :cond_b6

    .line 235
    const/4 v0, 0x0

    invoke-static {v0}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;

    .line 237
    :cond_b6
    const/4 v0, 0x1

    goto :goto_6e
.end method

.method private readSocketChannelData(Ljava/nio/channels/SocketChannel;Ljava/nio/ByteBuffer;)Z
    .registers 9

    .prologue
    const/4 v2, 0x0

    const/4 v0, 0x1

    const/4 v1, 0x0

    .line 309
    .line 311
    :try_start_3
    invoke-static {}, Ljava/nio/channels/Selector;->open()Ljava/nio/channels/Selector;
    :try_end_6
    .catch Ljava/io/IOException; {:try_start_3 .. :try_end_6} :catch_3e
    .catchall {:try_start_3 .. :try_end_6} :catchall_48

    move-result-object v2

    .line 312
    const/4 v3, 0x0

    :try_start_8
    invoke-virtual {p1, v3}, Ljava/nio/channels/SocketChannel;->configureBlocking(Z)Ljava/nio/channels/SelectableChannel;

    .line 313
    const/4 v3, 0x1

    const/4 v4, 0x0

    invoke-virtual {p1, v2, v3, v4}, Ljava/nio/channels/SocketChannel;->register(Ljava/nio/channels/Selector;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;

    move-result-object v3

    .line 315
    const-wide/16 v4, 0xbb8

    invoke-virtual {v2, v4, v5}, Ljava/nio/channels/Selector;->select(J)I

    move-result v4

    if-eqz v4, :cond_37

    .line 316
    invoke-virtual {v2}, Ljava/nio/channels/Selector;->selectedKeys()Ljava/util/Set;

    move-result-object v4

    .line 317
    invoke-interface {v4, v3}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z

    move-result v3

    if-eqz v3, :cond_37

    move v3, v1

    .line 320
    :goto_24
    invoke-virtual {p1, p2}, Ljava/nio/channels/SocketChannel;->read(Ljava/nio/ByteBuffer;)I

    move-result v4

    if-lez v4, :cond_2c

    .line 321
    add-int/2addr v3, v4

    goto :goto_24

    .line 323
    :cond_2c
    if-lez v3, :cond_37

    .line 324
    invoke-virtual {v2}, Ljava/nio/channels/Selector;->close()V
    :try_end_31
    .catch Ljava/io/IOException; {:try_start_8 .. :try_end_31} :catch_55
    .catchall {:try_start_8 .. :try_end_31} :catchall_48

    .line 332
    if-eqz v2, :cond_36

    .line 334
    :try_start_33
    invoke-virtual {v2}, Ljava/nio/channels/Selector;->close()V
    :try_end_36
    .catch Ljava/io/IOException; {:try_start_33 .. :try_end_36} :catch_4f

    .line 340
    :cond_36
    :goto_36
    return v0

    .line 332
    :cond_37
    if-eqz v2, :cond_3c

    .line 334
    :try_start_39
    invoke-virtual {v2}, Ljava/nio/channels/Selector;->close()V
    :try_end_3c
    .catch Ljava/io/IOException; {:try_start_39 .. :try_end_3c} :catch_51

    :cond_3c
    :goto_3c
    move v0, v1

    .line 340
    goto :goto_36

    .line 329
    :catch_3e
    move-exception v0

    move-object v0, v2

    .line 332
    :goto_40
    if-eqz v0, :cond_3c

    .line 334
    :try_start_42
    invoke-virtual {v0}, Ljava/nio/channels/Selector;->close()V
    :try_end_45
    .catch Ljava/io/IOException; {:try_start_42 .. :try_end_45} :catch_46

    goto :goto_3c

    .line 335
    :catch_46
    move-exception v0

    goto :goto_3c

    .line 332
    :catchall_48
    move-exception v0

    if-eqz v2, :cond_4e

    .line 334
    :try_start_4b
    invoke-virtual {v2}, Ljava/nio/channels/Selector;->close()V
    :try_end_4e
    .catch Ljava/io/IOException; {:try_start_4b .. :try_end_4e} :catch_53

    .line 337
    :cond_4e
    :goto_4e
    throw v0

    .line 335
    :catch_4f
    move-exception v1

    goto :goto_36

    :catch_51
    move-exception v0

    goto :goto_3c

    :catch_53
    move-exception v1

    goto :goto_4e

    .line 329
    :catch_55
    move-exception v0

    move-object v0, v2

    goto :goto_40
.end method


# virtual methods
.method public decodeRespondGrayList(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
    .registers 8

    .prologue
    const/4 v1, 0x0

    .line 379
    iget-boolean v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxyConfigured:Z

    if-nez v0, :cond_6

    .line 414
    :cond_5
    :goto_5
    return-object p1

    .line 382
    :cond_6
    iget-boolean v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxy:Z

    if-eqz v0, :cond_5

    iget-boolean v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsSafeVpnProxy:Z

    if-eqz v0, :cond_5

    .line 385
    iget-boolean v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsFirstReceivedBulk:Z

    if-eqz v0, :cond_5

    .line 389
    iput-boolean v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsFirstReceivedBulk:Z

    .line 392
    :try_start_14
    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->capacity()I

    move-result v0

    const/16 v1, 0x400

    invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I

    move-result v0

    .line 393
    new-instance v1, Ljava/lang/String;

    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->array()[B

    move-result-object v2

    const/4 v3, 0x0

    invoke-direct {v1, v2, v3, v0}, Ljava/lang/String;-><init>([BII)V

    .line 394
    const-string v0, "\r\n\r\n"

    invoke-virtual {v1, v0}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I

    move-result v0

    .line 395
    if-lez v0, :cond_5

    .line 399
    const/4 v2, 0x0

    invoke-virtual {v1, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v0

    .line 401
    iget-object v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mReportInfo:Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;

    invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J

    move-result-wide v2

    iput-wide v2, v1, Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;->parseGrayNameTime:J

    .line 404
    invoke-static {v0}, Lcom/quickbird/mini/utils/ProxyUtils;->isHttpRespondHeader(Ljava/lang/CharSequence;)Z

    move-result v1

    if-eqz v1, :cond_48

    .line 405
    iget-object v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mContext:Landroid/content/Context;

    invoke-static {v1, v0}, Lcom/quickbird/mini/utils/ProxyUtils;->matcherQbGrayRespondHeader(Landroid/content/Context;Ljava/lang/CharSequence;)V

    .line 408
    :cond_48
    iget-object v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mReportInfo:Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;

    invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J

    move-result-wide v2

    iget-object v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mReportInfo:Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;

    iget-wide v4, v1, Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;->parseGrayNameTime:J

    sub-long/2addr v2, v4

    iput-wide v2, v0, Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;->parseGrayNameTime:J

    .line 409
    iget-object v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mReportInfo:Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;

    const/4 v1, 0x1

    iput v1, v0, Lcom/quickbird/sdk/utils/ProxyReportMgr$ProxyReportInfo;->parseGrayNameCount:I
    :try_end_5a
    .catch Ljava/lang/Exception; {:try_start_14 .. :try_end_5a} :catch_5b

    goto :goto_5

    .line 410
    :catch_5b
    move-exception v0

    .line 411
    sget-boolean v1, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v1, :cond_5

    invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V

    goto :goto_5
.end method

.method public isProxy()Z
    .registers 2

    .prologue
    .line 550
    iget-boolean v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxyConfigured:Z

    if-eqz v0, :cond_a

    iget-boolean v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxy:Z

    if-eqz v0, :cond_a

    const/4 v0, 0x1

    :goto_9
    return v0

    :cond_a
    const/4 v0, 0x0

    goto :goto_9
.end method

.method public isSafeVpnProxy()Z
    .registers 2

    .prologue
    .line 554
    iget-boolean v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxyConfigured:Z

    if-eqz v0, :cond_a

    iget-boolean v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsSafeVpnProxy:Z

    if-eqz v0, :cond_a

    const/4 v0, 0x1

    :goto_9
    return v0

    :cond_a
    const/4 v0, 0x0

    goto :goto_9
.end method

.method public onNewConnection(Landroid/content/Context;Ljava/lang/String;Ljava/net/InetSocketAddress;Ljava/nio/channels/SocketChannel;Ljava/nio/ByteBuffer;)Ljava/net/InetSocketAddress;
    .registers 11

    .prologue
    const/4 v4, 0x1

    .line 421
    const-string v0, ""

    .line 422
    sget-boolean v1, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v1, :cond_30

    .line 423
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v1, ":"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {p4}, Ljava/nio/channels/SocketChannel;->socket()Ljava/net/Socket;

    move-result-object v1

    invoke-virtual {v1}, Ljava/net/Socket;->getPort()I

    move-result v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v1, " - "

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    .line 426
    :cond_30
    invoke-static {p1}, Lcom/quickbird/mini/utils/ProxyUtils;->isSafeVpnProxy(Landroid/content/Context;)Z

    move-result v1

    if-eqz v1, :cond_7f

    .line 427
    sget-boolean v0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v0, :cond_41

    .line 428
    const-string v0, "QbSdk"

    const-string v1, "Safe vpn proxy is opened."

    invoke-static {v0, v1}, Lcom/quickbird/sdk/utils/QBLogger;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 430
    :cond_41
    invoke-virtual {p3}, Ljava/net/InetSocketAddress;->getPort()I

    move-result v0

    .line 431
    invoke-static {v0}, Lcom/quickbird/mini/utils/ProxyUtils;->isHttpProxyPort(I)Z

    move-result v0

    if-nez v0, :cond_4c

    .line 507
    :cond_4b
    :goto_4b
    return-object p3

    .line 434
    :cond_4c
    invoke-static {p1}, Lcom/quickbird/mini/vpn/vpn/VpnServiceManager;->getInstance(Landroid/content/Context;)Lcom/quickbird/mini/vpn/vpn/VpnServiceManager;

    move-result-object v0

    .line 435
    invoke-virtual {v0, p2}, Lcom/quickbird/mini/vpn/vpn/VpnServiceManager;->isSafeProxy(Ljava/lang/String;)Z

    move-result v0

    if-eqz v0, :cond_4b

    .line 436
    invoke-direct {p0, p4, p5}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->isProxySupportProtocol(Ljava/nio/channels/SocketChannel;Ljava/nio/ByteBuffer;)Z

    move-result v0

    if-eqz v0, :cond_4b

    .line 437
    sget-boolean v0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v0, :cond_78

    const-string v0, "QbSdk"

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "Through save vpn proxy : "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Lcom/quickbird/sdk/utils/QBLogger;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 438
    :cond_78
    iput-boolean v4, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsSafeVpnProxy:Z

    .line 439
    invoke-static {}, Lcom/quickbird/mini/utils/ProxyUtils;->getSafeVpnProxyAddress()Ljava/net/InetSocketAddress;

    move-result-object p3

    goto :goto_4b

    .line 445
    :cond_7f
    iget-boolean v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxyConfigured:Z

    if-nez v1, :cond_a0

    .line 446
    sget-boolean v1, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v1, :cond_4b

    .line 447
    const-string v1, "QbSdk"

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "App passed(vpn unregister) : "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Lcom/quickbird/sdk/utils/QBLogger;->d(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_4b

    .line 452
    :cond_a0
    invoke-static {p1}, Lcom/quickbird/mini/vpn/proxy/HttpProxyRules;->getInstance(Landroid/content/Context;)Lcom/quickbird/mini/vpn/proxy/HttpProxyRules;

    move-result-object v1

    .line 455
    if-eqz v1, :cond_cf

    const/4 v2, 0x0

    invoke-virtual {v1, v2, p2}, Lcom/quickbird/mini/vpn/proxy/HttpProxyRules;->matchRule(ILjava/lang/String;)Z

    move-result v2

    if-eqz v2, :cond_cf

    .line 456
    sget-boolean v1, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v1, :cond_c9

    .line 457
    const-string v1, "QbSdk"

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "App is in blacklist. Blocked : "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Lcom/quickbird/sdk/utils/QBLogger;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 459
    :cond_c9
    invoke-static {}, Lcom/quickbird/mini/utils/ProxyUtils;->getBlockAddress()Ljava/net/InetSocketAddress;

    move-result-object p3

    goto/16 :goto_4b

    .line 463
    :cond_cf
    invoke-static {}, Lcom/quickbird/mini/vpn/vpn/LocalVpnService;->isVpnPaused()Z

    move-result v2

    if-eqz v2, :cond_f3

    .line 464
    sget-boolean v1, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v1, :cond_4b

    .line 465
    const-string v1, "QbSdk"

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "App passed (vpn paused) : "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Lcom/quickbird/sdk/utils/QBLogger;->d(Ljava/lang/String;Ljava/lang/String;)V

    goto/16 :goto_4b

    .line 471
    :cond_f3
    if-eqz v1, :cond_119

    invoke-virtual {v1, v4, p2}, Lcom/quickbird/mini/vpn/proxy/HttpProxyRules;->matchRule(ILjava/lang/String;)Z

    move-result v2

    if-nez v2, :cond_119

    .line 472
    sget-boolean v1, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v1, :cond_4b

    .line 473
    const-string v1, "QbSdk"

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "Apn passed (app not in whitelist) : "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Lcom/quickbird/sdk/utils/QBLogger;->d(Ljava/lang/String;Ljava/lang/String;)V

    goto/16 :goto_4b

    .line 479
    :cond_119
    if-eqz v1, :cond_140

    const/4 v2, 0x2

    invoke-virtual {v1, v2, p2}, Lcom/quickbird/mini/vpn/proxy/HttpProxyRules;->matchRule(ILjava/lang/String;)Z

    move-result v1

    if-eqz v1, :cond_140

    .line 480
    sget-boolean v1, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v1, :cond_4b

    .line 481
    const-string v1, "QbSdk"

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "App passed. (app is in graylist) : "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Lcom/quickbird/sdk/utils/QBLogger;->d(Ljava/lang/String;Ljava/lang/String;)V

    goto/16 :goto_4b

    .line 487
    :cond_140
    invoke-direct {p0, p3}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->matchProxyConditions(Ljava/net/InetSocketAddress;)Z

    move-result v1

    if-eqz v1, :cond_189

    .line 488
    invoke-direct {p0, p4, p5}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->isProxySupportProtocol(Ljava/nio/channels/SocketChannel;Ljava/nio/ByteBuffer;)Z

    move-result v1

    if-eqz v1, :cond_189

    .line 489
    iput-boolean v4, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxy:Z

    .line 491
    sget-boolean v1, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v1, :cond_176

    .line 492
    const-string v1, "QbSdk"

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "App through VPN : "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, " -> "

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    iget-object v2, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mProxyAddress:Ljava/net/InetSocketAddress;

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Lcom/quickbird/sdk/utils/QBLogger;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 496
    :cond_176
    invoke-static {p1}, Lcom/quickbird/sdk/utils/QBStatsReporter;->getInstance(Landroid/content/Context;)Lcom/quickbird/sdk/utils/QBStatsReporter;

    move-result-object v0

    const-string v1, "qbsdk"

    const-string v2, "vcot"

    invoke-static {v4}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v3

    invoke-virtual {v0, v1, v2, v3}, Lcom/quickbird/sdk/utils/QBStatsReporter;->reportEvent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Number;)V

    .line 500
    iget-object p3, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mProxyAddress:Ljava/net/InetSocketAddress;

    goto/16 :goto_4b

    .line 503
    :cond_189
    sget-boolean v1, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->DEBUG:Z

    if-eqz v1, :cond_4b

    .line 504
    const-string v1, "QbSdk"

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "App passed (not http) : "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v1, v0}, Lcom/quickbird/sdk/utils/QBLogger;->d(Ljava/lang/String;Ljava/lang/String;)V

    goto/16 :goto_4b
.end method

.method public onOutgoingBulk(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
    .registers 8

    .prologue
    const/4 v2, 0x0

    .line 512
    iget-boolean v0, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxyConfigured:Z

    if-eqz v0, :cond_52

    .line 513
    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I

    move-result v0

    .line 514
    iget-boolean v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsProxy:Z

    if-nez v1, :cond_11

    iget-boolean v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsSafeVpnProxy:Z

    if-eqz v1, :cond_33

    .line 515
    :cond_11
    invoke-virtual {p1}, Ljava/nio/ByteBuffer;->mark()Ljava/nio/Buffer;

    .line 516
    invoke-virtual {p4}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;

    .line 518
    :try_start_17
    invoke-direct {p0, p1, p2, p3, p4}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->decodeInput(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)V
    :try_end_1a
    .catch Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler$BufferOverflowException; {:try_start_17 .. :try_end_1a} :catch_54

    .line 521
    :goto_1a
    invoke-virtual {p3}, Ljava/nio/CharBuffer;->flip()Ljava/nio/Buffer;

    .line 522
    invoke-direct {p0, p1, p2, p3, p4}, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->proxifyHttpHeaders(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Z

    move-result v1

    .line 523
    invoke-virtual {p1, v0}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;

    move-result-object v0

    invoke-virtual {v0}, Ljava/nio/Buffer;->reset()Ljava/nio/Buffer;

    .line 524
    if-eqz v1, :cond_52

    .line 525
    iput-boolean v2, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsFirstBulk:Z

    .line 526
    invoke-virtual {p4}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;

    .line 527
    invoke-virtual {p3}, Ljava/nio/CharBuffer;->clear()Ljava/nio/Buffer;

    .line 545
    :goto_32
    return-object p4

    .line 532
    :cond_33
    iget-boolean v1, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsFirstBulk:Z

    if-eqz v1, :cond_3a

    .line 533
    invoke-virtual {p3, v2}, Ljava/nio/CharBuffer;->position(I)Ljava/nio/Buffer;

    .line 535
    :cond_3a
    invoke-virtual {p3}, Ljava/nio/CharBuffer;->clear()Ljava/nio/Buffer;

    .line 536
    invoke-virtual {p4}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;

    .line 537
    invoke-virtual {p1, v0}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;

    move-result-object v0

    invoke-virtual {v0}, Ljava/nio/Buffer;->reset()Ljava/nio/Buffer;

    .line 538
    iput-boolean v2, p0, Lcom/quickbird/mini/vpn/proxy/HttpProxySessionHandler;->mIsFirstBulk:Z

    .line 539
    invoke-virtual {p2}, Ljava/nio/ByteBuffer;->hasRemaining()Z

    move-result v0

    if-eqz v0, :cond_52

    .line 540
    invoke-static {v2}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;

    :cond_52
    move-object p4, p1

    .line 545
    goto :goto_32

    .line 519
    :catch_54
    move-exception v1

    goto :goto_1a
.end method