CThread.smali

.class public Lcom/imo/android/imoim/network/CThread;
.super Ljava/lang/Object;
.source "SourceFile"

# interfaces
.implements Lcom/imo/android/imoim/network/Connection$ErrorListener;
.implements Lcom/imo/android/imoim/network/MessageListener;
.implements Lcom/imo/android/imoim/network/SocketHandler;
.implements Ljava/lang/Runnable;


# annotations
.annotation system Ldalvik/annotation/Signature;
    value = {
        "<T:",
        "Ljava/lang/Object;",
        ">",
        "Ljava/lang/Object;",
        "Lcom/imo/android/imoim/network/Connection$ErrorListener;",
        "Lcom/imo/android/imoim/network/MessageListener;",
        "Lcom/imo/android/imoim/network/SocketHandler;",
        "Ljava/lang/Runnable;"
    }
.end annotation


# static fields
.field private static final EACCES:I = 0xd

.field static final EAGAIN:I = 0xb

.field private static final EINTR:I = 0x4

.field private static final ENOENT:I = 0x2

.field private static final ENOTSOCK:I = 0x58

.field private static final EPERM:I = 0x1

.field private static final EPOLLERR:I = 0x8

.field private static final EPOLLET:I = -0x80000000

.field private static final EPOLLHUP:I = 0x10

.field private static final EPOLLIN:I = 0x1

.field private static final EPOLLMSG:I = 0x400

.field private static final EPOLLNTLNK:I = 0x800

.field private static final EPOLLOUT:I = 0x4

.field private static final EPOLLPRI:I = 0x2

.field private static final EPOLLRDBAND:I = 0x80

.field private static final EPOLLRDNORM:I = 0x40

.field private static final EPOLLWRBAND:I = 0x200

.field private static final EPOLLWRNORM:I = 0x100

.field private static final MAX_EVENTS:I = 0x40

.field private static final READ_SIZE:I = 0x100000

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

.field private static final WRITE_SIZE:I = 0x7d000


# instance fields
.field private final actions:Ljava/util/concurrent/ConcurrentLinkedQueue;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/concurrent/ConcurrentLinkedQueue<",
            "Lcom/imo/android/imoim/network/Action;",
            ">;"
        }
    .end annotation
.end field

.field private final buff:[B

.field private final connections:Ljava/util/concurrent/ConcurrentHashMap;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/concurrent/ConcurrentHashMap<",
            "Ljava/lang/Integer;",
            "Lcom/imo/android/imoim/network/Connection;",
            ">;"
        }
    .end annotation
.end field

.field private final events:[I

.field private stream:Lcom/imo/android/imoim/network/StreamHelper;

.field theConnection:Lcom/imo/android/imoim/network/ConnectData3;

.field private final zlib:Lcom/imo/android/imoim/util/eu;


# direct methods
.method constructor <init>(Ljava/util/concurrent/ConcurrentLinkedQueue;)V
    .registers 2
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/util/concurrent/ConcurrentLinkedQueue<",
            "Lcom/imo/android/imoim/network/Action;",
            ">;)V"
        }
    .end annotation

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

    .line 74
    iput-object p1, p0, Lcom/imo/android/imoim/network/CThread;->actions:Ljava/util/concurrent/ConcurrentLinkedQueue;

    const/16 p1, 0x80

    new-array p1, p1, [I

    .line 75
    iput-object p1, p0, Lcom/imo/android/imoim/network/CThread;->events:[I

    .line 76
    new-instance p1, Ljava/util/concurrent/ConcurrentHashMap;

    invoke-direct {p1}, Ljava/util/concurrent/ConcurrentHashMap;-><init>()V

    iput-object p1, p0, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

    .line 77
    new-instance p1, Lcom/imo/android/imoim/util/eu;

    invoke-direct {p1}, Lcom/imo/android/imoim/util/eu;-><init>()V

    iput-object p1, p0, Lcom/imo/android/imoim/network/CThread;->zlib:Lcom/imo/android/imoim/util/eu;

    const/high16 p1, 0x100000

    new-array p1, p1, [B

    .line 78
    iput-object p1, p0, Lcom/imo/android/imoim/network/CThread;->buff:[B

    .line 79
    new-instance p1, Lcom/imo/android/imoim/network/StreamHelper;

    invoke-direct {p1}, Lcom/imo/android/imoim/network/StreamHelper;-><init>()V

    iput-object p1, p0, Lcom/imo/android/imoim/network/CThread;->stream:Lcom/imo/android/imoim/network/StreamHelper;

    return-void
.end method

.method private callAddWrite(I)V
    .registers 4

    .line 527
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

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

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/imo/android/imoim/network/Connection;

    if-eqz v0, :cond_11

    .line 529
    invoke-interface {v0, p1}, Lcom/imo/android/imoim/network/Connection;->callAddWrite(I)V

    :cond_11
    return-void
.end method

.method static native cancel(I)V
.end method

.method private checkError(Ljava/lang/String;IIILjava/lang/String;)Z
    .registers 11

    const/4 v0, 0x0

    if-gez p4, :cond_62

    .line 329
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v1

    const-string v2, "CThread"

    const-string v3, "checkError connect failed"

    invoke-virtual {v1, v2, v3}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    neg-int p4, p4

    .line 332
    new-instance v1, Ljava/lang/StringBuilder;

    const-string v3, "check error. "

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

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

    const-string v3, ":"

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

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

    const-string v3, ". error "

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

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

    const-string v3, " reason: "

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

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

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

    move-result-object v1

    const/16 v3, 0x65

    const/4 v4, 0x1

    if-ne p4, v3, :cond_3e

    .line 9075
    invoke-static {v2, v1}, Lcom/imo/android/imoim/util/bt;->e(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_41

    .line 9079
    :cond_3e
    invoke-static {v2, v1, v4}, Lcom/imo/android/imoim/util/bt;->a(Ljava/lang/String;Ljava/lang/String;Z)V

    .line 342
    :goto_41
    invoke-virtual {p0, p3}, Lcom/imo/android/imoim/network/CThread;->handleClose(I)I

    const/4 p3, 0x2

    new-array p3, p3, [Ljava/lang/Object;

    aput-object p5, p3, v0

    .line 344
    invoke-static {p4}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object p4

    aput-object p4, p3, v4

    const-string p4, "connect_failed_%s_%s"

    invoke-static {p4, p3}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

    move-result-object p3

    .line 346
    invoke-static {}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->get()Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;

    move-result-object p4

    invoke-virtual {p4, p1, p2, p3}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->markConnectFailed(Ljava/lang/String;ILjava/lang/String;)V

    .line 348
    sget-object p1, Lcom/imo/android/imoim/IMO;->c:Lcom/imo/android/imoim/network/Dispatcher4;

    invoke-virtual {p1, p3, v0}, Lcom/imo/android/imoim/network/Dispatcher4;->reconnectFromOtherThread(Ljava/lang/String;Z)V

    return v4

    :cond_62
    return v0
.end method

.method private closeOtherConnections(Lcom/imo/android/imoim/network/ConnectData3;)V
    .registers 7

    .line 228
    new-instance v0, Ljava/util/ArrayList;

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

    .line 229
    iget-object v1, p0, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

    invoke-virtual {v1}, Ljava/util/concurrent/ConcurrentHashMap;->keySet()Ljava/util/Set;

    move-result-object v1

    invoke-interface {v1}, Ljava/util/Set;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :cond_f
    :goto_f
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v2

    if-eqz v2, :cond_4a

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

    move-result-object v2

    check-cast v2, Ljava/lang/Integer;

    invoke-virtual {v2}, Ljava/lang/Integer;->intValue()I

    move-result v2

    .line 230
    iget v3, p1, Lcom/imo/android/imoim/network/ConnectData3;->fd:I

    if-ne v2, v3, :cond_27

    iget-boolean v3, p1, Lcom/imo/android/imoim/network/ConnectData3;->isGCM:Z

    if-eqz v3, :cond_f

    .line 231
    :cond_27
    invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v3

    invoke-virtual {v0, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    .line 232
    iget-object v3, p0, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

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

    move-result-object v2

    invoke-virtual {v3, v2}, Ljava/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lcom/imo/android/imoim/network/Connection;

    if-eqz v2, :cond_f

    .line 234
    invoke-static {}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->get()Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;

    move-result-object v3

    invoke-interface {v2}, Lcom/imo/android/imoim/network/Connection;->getConnectData()Lcom/imo/android/imoim/network/ConnectData3;

    move-result-object v2

    const-string v4, "close_others"

    invoke-virtual {v3, v2, v4}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->markDisconnect(Lcom/imo/android/imoim/network/ConnectData3;Ljava/lang/String;)V

    goto :goto_f

    .line 244
    :cond_4a
    new-instance p1, Ljava/lang/StringBuilder;

    const-string v1, "this should close "

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

    invoke-virtual {v0}, Ljava/util/ArrayList;->size()I

    move-result v1

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

    const-string v1, " connections"

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

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

    move-result-object p1

    const-string v1, "CThread"

    .line 5071
    invoke-static {v1, p1}, Lcom/imo/android/imoim/util/bt;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 246
    invoke-virtual {v0}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;

    move-result-object p1

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

    move-result v0

    if-eqz v0, :cond_94

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

    move-result-object v0

    check-cast v0, Ljava/lang/Integer;

    invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I

    move-result v0

    .line 247
    invoke-static {v0}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;

    move-result-object v2

    const-string v3, "closing fd: "

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

    move-result-object v2

    .line 6071
    invoke-static {v1, v2}, Lcom/imo/android/imoim/util/bt;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 248
    invoke-virtual {p0, v0}, Lcom/imo/android/imoim/network/CThread;->handleClose(I)I

    .line 249
    iget-object v2, p0, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

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

    move-result-object v0

    invoke-virtual {v2, v0}, Ljava/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;

    goto :goto_6a

    :cond_94
    const-string p1, "closeOtherConnections"

    .line 252
    invoke-direct {p0, p1}, Lcom/imo/android/imoim/network/CThread;->logConnectionsChange(Ljava/lang/String;)V

    return-void
.end method

.method private handleActions()V
    .registers 4

    .line 135
    :cond_0
    :goto_0
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->actions:Ljava/util/concurrent/ConcurrentLinkedQueue;

    invoke-virtual {v0}, Ljava/util/concurrent/ConcurrentLinkedQueue;->isEmpty()Z

    move-result v0

    if-nez v0, :cond_4d

    .line 136
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->actions:Ljava/util/concurrent/ConcurrentLinkedQueue;

    invoke-virtual {v0}, Ljava/util/concurrent/ConcurrentLinkedQueue;->poll()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/imo/android/imoim/network/Action;

    if-eqz v0, :cond_0

    .line 141
    iget v1, v0, Lcom/imo/android/imoim/network/Action;->type:I

    const/4 v2, 0x1

    if-ne v1, v2, :cond_1f

    .line 142
    iget-object v1, v0, Lcom/imo/android/imoim/network/Action;->ip:Lcom/imo/android/imoim/imodns/n;

    iget-object v0, v0, Lcom/imo/android/imoim/network/Action;->reason:Ljava/lang/String;

    invoke-virtual {p0, v1, v0}, Lcom/imo/android/imoim/network/CThread;->handleConnect(Lcom/imo/android/imoim/imodns/n;Ljava/lang/String;)V

    goto :goto_0

    .line 143
    :cond_1f
    iget v1, v0, Lcom/imo/android/imoim/network/Action;->type:I

    const/4 v2, 0x2

    if-ne v1, v2, :cond_2a

    .line 144
    iget-object v0, v0, Lcom/imo/android/imoim/network/Action;->baseMessage:Lcom/imo/android/imoim/util/y;

    invoke-virtual {p0, v0}, Lcom/imo/android/imoim/network/CThread;->handleSend(Lcom/imo/android/imoim/util/y;)V

    goto :goto_0

    .line 145
    :cond_2a
    iget v1, v0, Lcom/imo/android/imoim/network/Action;->type:I

    const/4 v2, 0x3

    if-ne v1, v2, :cond_35

    .line 146
    iget-object v0, v0, Lcom/imo/android/imoim/network/Action;->attach:Lcom/imo/android/imoim/network/ConnectData3;

    invoke-virtual {p0, v0}, Lcom/imo/android/imoim/network/CThread;->handleSwitch(Lcom/imo/android/imoim/network/ConnectData3;)V

    goto :goto_0

    .line 147
    :cond_35
    iget v1, v0, Lcom/imo/android/imoim/network/Action;->type:I

    const/4 v2, 0x4

    if-ne v1, v2, :cond_42

    .line 148
    iget v1, v0, Lcom/imo/android/imoim/network/Action;->event:I

    iget v0, v0, Lcom/imo/android/imoim/network/Action;->delayMs:I

    invoke-virtual {p0, v1, v0}, Lcom/imo/android/imoim/network/CThread;->handleScheduleAlarm(II)V

    goto :goto_0

    .line 149
    :cond_42
    iget v1, v0, Lcom/imo/android/imoim/network/Action;->type:I

    const/4 v2, 0x5

    if-ne v1, v2, :cond_0

    .line 150
    iget v0, v0, Lcom/imo/android/imoim/network/Action;->event:I

    invoke-virtual {p0, v0}, Lcom/imo/android/imoim/network/CThread;->handleCancelAlarm(I)V

    goto :goto_0

    :cond_4d
    return-void
.end method

.method private handleEvents(I)V
    .registers 7

    const/4 v0, 0x0

    :goto_1
    if-ge v0, p1, :cond_6c

    .line 160
    iget-object v1, p0, Lcom/imo/android/imoim/network/CThread;->events:[I

    mul-int/lit8 v2, v0, 0x2

    aget v3, v1, v2

    const/4 v4, 0x1

    add-int/2addr v2, v4

    .line 161
    aget v1, v1, v2

    .line 163
    iget-object v2, p0, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

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

    move-result-object v3

    invoke-virtual {v2, v3}, Ljava/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lcom/imo/android/imoim/network/Connection;

    if-eqz v2, :cond_69

    .line 164
    invoke-interface {v2}, Lcom/imo/android/imoim/network/Connection;->isClosed()Z

    move-result v3

    if-nez v3, :cond_69

    and-int/lit8 v3, v1, 0x1

    if-lez v3, :cond_2a

    .line 177
    iget-object v3, p0, Lcom/imo/android/imoim/network/CThread;->buff:[B

    invoke-interface {v2, v3}, Lcom/imo/android/imoim/network/Connection;->handleRead([B)V

    .line 180
    :cond_2a
    invoke-interface {v2}, Lcom/imo/android/imoim/network/Connection;->isClosed()Z

    move-result v3

    if-nez v3, :cond_69

    and-int/lit8 v3, v1, 0x8

    if-lez v3, :cond_3a

    const-string v1, "epollerr"

    .line 185
    invoke-interface {v2, v1}, Lcom/imo/android/imoim/network/Connection;->handleError(Ljava/lang/String;)V

    goto :goto_69

    :cond_3a
    and-int/lit8 v3, v1, 0x10

    if-lez v3, :cond_44

    const-string v1, "epollhup"

    .line 190
    invoke-interface {v2, v1}, Lcom/imo/android/imoim/network/Connection;->handleError(Ljava/lang/String;)V

    goto :goto_69

    :cond_44
    and-int/lit8 v1, v1, 0x4

    if-lez v1, :cond_69

    .line 195
    invoke-interface {v2}, Lcom/imo/android/imoim/network/Connection;->handleWrite()V

    .line 197
    invoke-interface {v2}, Lcom/imo/android/imoim/network/Connection;->remainWriteBuffer()Z

    move-result v1

    if-eqz v1, :cond_69

    .line 198
    iget-object v1, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    if-nez v1, :cond_64

    const-string v1, "theConnection is null when trying to write"

    const-string v2, "CThread"

    .line 3079
    invoke-static {v2, v1, v4}, Lcom/imo/android/imoim/util/bt;->a(Ljava/lang/String;Ljava/lang/String;Z)V

    .line 200
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v3

    invoke-virtual {v3, v2, v1}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_69

    .line 202
    :cond_64
    iget v1, v1, Lcom/imo/android/imoim/network/ConnectData3;->fd:I

    invoke-direct {p0, v1}, Lcom/imo/android/imoim/network/CThread;->callAddWrite(I)V

    :cond_69
    :goto_69
    add-int/lit8 v0, v0, 0x1

    goto :goto_1

    :cond_6c
    return-void
.end method

.method private handleGotNameChannel(Lcom/imo/android/imoim/network/ConnectData3;)V
    .registers 5

    .line 210
    iget-boolean v0, p1, Lcom/imo/android/imoim/network/ConnectData3;->gotNameChannel:Z

    const/4 v1, 0x1

    if-eqz v0, :cond_14

    const-string p1, "Got another name_channel"

    const-string v0, "CThread"

    .line 4079
    invoke-static {v0, p1, v1}, Lcom/imo/android/imoim/util/bt;->a(Ljava/lang/String;Ljava/lang/String;Z)V

    .line 212
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v1

    invoke-virtual {v1, v0, p1}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    return-void

    .line 216
    :cond_14
    iput-boolean v1, p1, Lcom/imo/android/imoim/network/ConnectData3;->gotNameChannel:Z

    .line 222
    invoke-static {}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->get()Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;

    move-result-object v0

    iget-object v1, p1, Lcom/imo/android/imoim/network/ConnectData3;->ip:Ljava/lang/String;

    iget v2, p1, Lcom/imo/android/imoim/network/ConnectData3;->port:I

    invoke-virtual {v0, v1, v2}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->markGetChannelName(Ljava/lang/String;I)V

    .line 224
    sget-object v0, Lcom/imo/android/imoim/IMO;->c:Lcom/imo/android/imoim/network/Dispatcher4;

    const/4 v1, 0x0

    const-string v2, "tcp"

    invoke-virtual {v0, v2, v1, p1}, Lcom/imo/android/imoim/network/Dispatcher4;->senderStarted(Ljava/lang/String;ZLcom/imo/android/imoim/network/ConnectData3;)V

    return-void
.end method

.method private logConnectionsChange(Ljava/lang/String;)V
    .registers 2

    return-void
.end method

.method static native schedule(II)V
.end method


# virtual methods
.method public native addwrite(I)I
.end method

.method public native close(I)I
.end method

.method native connect(ILjava/lang/String;IZ)I
.end method

.method native createsocket(Z)I
.end method

.method native disablenagle(I)I
.end method

.method native epolladd(I)I
.end method

.method public handleAddWrite(I)I
    .registers 4

    .line 509
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v1, 0x15

    if-ge v0, v1, :cond_10

    .line 511
    :try_start_6
    invoke-virtual {p0, p1}, Lcom/imo/android/imoim/network/CThread;->addwrite(I)I

    move-result p1
    :try_end_a
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_6 .. :try_end_a} :catch_b

    goto :goto_14

    .line 514
    :catch_b
    :try_start_b
    invoke-virtual {p0, p1}, Lcom/imo/android/imoim/network/CThread;->addwrite(I)I

    move-result p1
    :try_end_f
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_b .. :try_end_f} :catch_10

    goto :goto_14

    .line 520
    :catch_10
    :cond_10
    invoke-virtual {p0, p1}, Lcom/imo/android/imoim/network/CThread;->addwrite(I)I

    move-result p1

    :goto_14
    return p1
.end method

.method handleCancelAlarm(I)V
    .registers 4

    .line 419
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v1, 0x15

    if-ge v0, v1, :cond_12

    .line 421
    :try_start_6
    invoke-static {p1}, Lcom/imo/android/imoim/network/CThread;->cancel(I)V
    :try_end_9
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_6 .. :try_end_9} :catch_a

    return-void

    .line 424
    :catch_a
    :try_start_a
    invoke-static {p1}, Lcom/imo/android/imoim/network/CThread;->cancel(I)V
    :try_end_d
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_a .. :try_end_d} :catch_e

    return-void

    .line 426
    :catch_e
    invoke-static {p1}, Lcom/imo/android/imoim/network/CThread;->cancel(I)V

    return-void

    .line 430
    :cond_12
    invoke-static {p1}, Lcom/imo/android/imoim/network/CThread;->cancel(I)V

    return-void
.end method

.method public handleClose(I)I
    .registers 4

    .line 486
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v1, 0x15

    if-ge v0, v1, :cond_10

    .line 488
    :try_start_6
    invoke-virtual {p0, p1}, Lcom/imo/android/imoim/network/CThread;->close(I)I

    move-result p1
    :try_end_a
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_6 .. :try_end_a} :catch_b

    goto :goto_14

    .line 491
    :catch_b
    :try_start_b
    invoke-virtual {p0, p1}, Lcom/imo/android/imoim/network/CThread;->close(I)I

    move-result p1
    :try_end_f
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_b .. :try_end_f} :catch_10

    goto :goto_14

    .line 497
    :catch_10
    :cond_10
    invoke-virtual {p0, p1}, Lcom/imo/android/imoim/network/CThread;->close(I)I

    move-result p1

    :goto_14
    return p1
.end method

.method handleConnect(Lcom/imo/android/imoim/imodns/n;Ljava/lang/String;)V
    .registers 21

    move-object/from16 v6, p0

    move-object/from16 v0, p1

    move-object/from16 v11, p2

    .line 256
    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "handleConnect "

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

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

    const-string v2, " size: "

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

    iget-object v2, v6, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

    invoke-virtual {v2}, Ljava/util/concurrent/ConcurrentHashMap;->size()I

    move-result v2

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

    const-string v2, " ip="

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

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

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

    move-result-object v1

    const-string v15, "CThread"

    .line 7071
    invoke-static {v15, v1}, Lcom/imo/android/imoim/util/bt;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 257
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v1

    new-instance v2, Ljava/lang/StringBuilder;

    const-string v3, "handleConnect reason="

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

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

    const-string v3, " connections size: "

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

    iget-object v3, v6, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

    invoke-virtual {v3}, Ljava/util/concurrent/ConcurrentHashMap;->size()I

    move-result v3

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

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

    move-result-object v2

    invoke-virtual {v1, v15, v2}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    .line 8048
    iget-object v14, v0, Lcom/imo/android/imoim/imodns/n;->a:Ljava/lang/String;

    .line 8052
    iget-object v1, v0, Lcom/imo/android/imoim/imodns/n;->b:Ljava/lang/Integer;

    .line 264
    invoke-virtual {v1}, Ljava/lang/Integer;->intValue()I

    move-result v13

    .line 8074
    iget-object v12, v0, Lcom/imo/android/imoim/imodns/n;->d:Lcom/imo/android/imoim/imodns/UnblockConfig;

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

    const-string v1, "connecting on "

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

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

    const-string v1, ":"

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

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

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

    move-result-object v0

    .line 9071
    invoke-static {v15, v0}, Lcom/imo/android/imoim/util/bt;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 271
    invoke-static {v14, v13}, Lcom/imo/android/imoim/techinfocollector/a/h;->a(Ljava/lang/String;I)V

    const/4 v10, 0x0

    .line 272
    invoke-virtual {v6, v10}, Lcom/imo/android/imoim/network/CThread;->createsocket(Z)I

    move-result v9

    const-string v5, "create_socket"

    move-object/from16 v0, p0

    move-object v1, v14

    move v2, v13

    move v3, v9

    move v4, v9

    .line 273
    invoke-direct/range {v0 .. v5}, Lcom/imo/android/imoim/network/CThread;->checkError(Ljava/lang/String;IIILjava/lang/String;)Z

    move-result v0

    if-eqz v0, :cond_94

    .line 274
    invoke-static {v14, v13}, Lcom/imo/android/imoim/techinfocollector/a/h;->b(Ljava/lang/String;I)V

    .line 275
    sget-object v0, Lcom/imo/android/imoim/IMO;->N:Lcom/imo/android/imoim/imodns/g;

    invoke-virtual {v0, v14}, Lcom/imo/android/imoim/imodns/g;->c(Ljava/lang/String;)V

    return-void

    .line 279
    :cond_94
    invoke-virtual {v6, v9}, Lcom/imo/android/imoim/network/CThread;->disablenagle(I)I

    move-result v4

    const-string v5, "disable_nagle"

    move-object/from16 v0, p0

    move-object v1, v14

    move v2, v13

    move v3, v9

    .line 280
    invoke-direct/range {v0 .. v5}, Lcom/imo/android/imoim/network/CThread;->checkError(Ljava/lang/String;IIILjava/lang/String;)Z

    move-result v0

    if-eqz v0, :cond_ae

    .line 281
    invoke-static {v14, v13}, Lcom/imo/android/imoim/techinfocollector/a/h;->b(Ljava/lang/String;I)V

    .line 282
    sget-object v0, Lcom/imo/android/imoim/IMO;->N:Lcom/imo/android/imoim/imodns/g;

    invoke-virtual {v0, v14}, Lcom/imo/android/imoim/imodns/g;->c(Ljava/lang/String;)V

    return-void

    .line 286
    :cond_ae
    invoke-virtual {v6, v9, v14, v13, v10}, Lcom/imo/android/imoim/network/CThread;->connect(ILjava/lang/String;IZ)I

    move-result v4

    const-string v5, "connect"

    move-object/from16 v0, p0

    move-object v1, v14

    move v2, v13

    move v3, v9

    .line 287
    invoke-direct/range {v0 .. v5}, Lcom/imo/android/imoim/network/CThread;->checkError(Ljava/lang/String;IIILjava/lang/String;)Z

    move-result v0

    if-eqz v0, :cond_c8

    .line 288
    invoke-static {v14, v13}, Lcom/imo/android/imoim/techinfocollector/a/h;->b(Ljava/lang/String;I)V

    .line 289
    sget-object v0, Lcom/imo/android/imoim/IMO;->N:Lcom/imo/android/imoim/imodns/g;

    invoke-virtual {v0, v14}, Lcom/imo/android/imoim/imodns/g;->c(Ljava/lang/String;)V

    return-void

    .line 293
    :cond_c8
    invoke-virtual {v6, v9}, Lcom/imo/android/imoim/network/CThread;->epolladd(I)I

    move-result v4

    const-string v5, "epoll_add"

    move-object/from16 v0, p0

    move-object v1, v14

    move v2, v13

    move v3, v9

    .line 294
    invoke-direct/range {v0 .. v5}, Lcom/imo/android/imoim/network/CThread;->checkError(Ljava/lang/String;IIILjava/lang/String;)Z

    move-result v0

    if-eqz v0, :cond_e2

    .line 295
    invoke-static {v14, v13}, Lcom/imo/android/imoim/techinfocollector/a/h;->b(Ljava/lang/String;I)V

    .line 296
    sget-object v0, Lcom/imo/android/imoim/IMO;->N:Lcom/imo/android/imoim/imodns/g;

    invoke-virtual {v0, v14}, Lcom/imo/android/imoim/imodns/g;->c(Ljava/lang/String;)V

    return-void

    :cond_e2
    if-nez v12, :cond_e7

    const-string v0, "tcp"

    goto :goto_eb

    .line 300
    :cond_e7
    invoke-virtual {v12}, Lcom/imo/android/imoim/imodns/UnblockConfig;->getConnectDataType()Ljava/lang/String;

    move-result-object v0

    :goto_eb
    move-object v8, v0

    .line 303
    new-instance v0, Lcom/imo/android/imoim/network/ConnectData3;

    const/4 v1, 0x0

    const-wide/32 v2, 0x2bf20

    move-object v7, v0

    move v4, v9

    move-object v9, v14

    const/4 v5, 0x0

    move v10, v13

    move-object/from16 v11, p2

    move-object/from16 p1, v12

    move v12, v4

    move/from16 p2, v13

    move v13, v1

    move-object v1, v14

    move-object/from16 v14, p1

    move-object/from16 v17, v15

    move-wide v15, v2

    invoke-direct/range {v7 .. v16}, Lcom/imo/android/imoim/network/ConnectData3;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IZLcom/imo/android/imoim/imodns/UnblockConfig;J)V

    move-object/from16 v2, p1

    if-eqz v2, :cond_119

    .line 305
    iget-boolean v2, v2, Lcom/imo/android/imoim/imodns/UnblockConfig;->isTls:Z

    if-nez v2, :cond_111

    goto :goto_119

    .line 308
    :cond_111
    new-instance v2, Lcom/imo/android/imoim/network/TlsConnection;

    iget-object v3, v6, Lcom/imo/android/imoim/network/CThread;->zlib:Lcom/imo/android/imoim/util/eu;

    invoke-direct {v2, v0, v3, v6}, Lcom/imo/android/imoim/network/TlsConnection;-><init>(Lcom/imo/android/imoim/network/ConnectData3;Lcom/imo/android/imoim/util/eu;Lcom/imo/android/imoim/network/SocketHandler;)V

    goto :goto_122

    .line 306
    :cond_119
    :goto_119
    new-instance v2, Lcom/imo/android/imoim/network/NormalConnection;

    iget-object v3, v6, Lcom/imo/android/imoim/network/CThread;->stream:Lcom/imo/android/imoim/network/StreamHelper;

    iget-object v7, v6, Lcom/imo/android/imoim/network/CThread;->zlib:Lcom/imo/android/imoim/util/eu;

    invoke-direct {v2, v0, v3, v7, v6}, Lcom/imo/android/imoim/network/NormalConnection;-><init>(Lcom/imo/android/imoim/network/ConnectData3;Lcom/imo/android/imoim/network/StreamHelper;Lcom/imo/android/imoim/util/eu;Lcom/imo/android/imoim/network/SocketHandler;)V

    .line 311
    :goto_122
    invoke-interface {v2, v6}, Lcom/imo/android/imoim/network/Connection;->setMessageListener(Lcom/imo/android/imoim/network/MessageListener;)V

    .line 312
    invoke-interface {v2, v6}, Lcom/imo/android/imoim/network/Connection;->setErrorListener(Lcom/imo/android/imoim/network/Connection$ErrorListener;)V

    .line 313
    iget-object v0, v6, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

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

    move-result-object v3

    invoke-virtual {v0, v3, v2}, Ljava/util/concurrent/ConcurrentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 315
    invoke-static {v4}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;

    move-result-object v0

    const-string v2, "connect-"

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

    move-result-object v0

    invoke-direct {v6, v0}, Lcom/imo/android/imoim/network/CThread;->logConnectionsChange(Ljava/lang/String;)V

    .line 317
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v0

    const/4 v2, 0x3

    new-array v2, v2, [Ljava/lang/Object;

    aput-object v1, v2, v5

    const/4 v3, 0x1

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

    move-result-object v5

    aput-object v5, v2, v3

    const/4 v3, 0x2

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

    move-result-object v4

    aput-object v4, v2, v3

    const-string v3, "connected %s:%s fd=%s"

    invoke-static {v3, v2}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v2

    move-object/from16 v3, v17

    invoke-virtual {v0, v3, v2}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    move/from16 v0, p2

    .line 318
    invoke-static {v1, v0}, Lcom/imo/android/imoim/techinfocollector/a/h;->c(Ljava/lang/String;I)V

    .line 320
    invoke-static {}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->get()Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;

    move-result-object v2

    invoke-virtual {v2, v1, v0}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->markTcpConnectSuc(Ljava/lang/String;I)V

    return-void
.end method

.method public handleRead(I[B)I
    .registers 5

    .line 440
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v1, 0x15

    if-ge v0, v1, :cond_10

    .line 442
    :try_start_6
    invoke-virtual {p0, p1, p2}, Lcom/imo/android/imoim/network/CThread;->read(I[B)I

    move-result p1
    :try_end_a
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_6 .. :try_end_a} :catch_b

    goto :goto_14

    .line 445
    :catch_b
    :try_start_b
    invoke-virtual {p0, p1, p2}, Lcom/imo/android/imoim/network/CThread;->read(I[B)I

    move-result p1
    :try_end_f
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_b .. :try_end_f} :catch_10

    goto :goto_14

    .line 451
    :catch_10
    :cond_10
    invoke-virtual {p0, p1, p2}, Lcom/imo/android/imoim/network/CThread;->read(I[B)I

    move-result p1

    :goto_14
    return p1
.end method

.method handleScheduleAlarm(II)V
    .registers 5

    .line 401
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v1, 0x15

    if-ge v0, v1, :cond_12

    .line 403
    :try_start_6
    invoke-static {p1, p2}, Lcom/imo/android/imoim/network/CThread;->schedule(II)V
    :try_end_9
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_6 .. :try_end_9} :catch_a

    return-void

    .line 406
    :catch_a
    :try_start_a
    invoke-static {p1, p2}, Lcom/imo/android/imoim/network/CThread;->schedule(II)V
    :try_end_d
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_a .. :try_end_d} :catch_e

    return-void

    .line 408
    :catch_e
    invoke-static {p1, p2}, Lcom/imo/android/imoim/network/CThread;->schedule(II)V

    return-void

    .line 412
    :cond_12
    invoke-static {p1, p2}, Lcom/imo/android/imoim/network/CThread;->schedule(II)V

    return-void
.end method

.method handleSend(Lcom/imo/android/imoim/util/y;)V
    .registers 4

    .line 356
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    if-nez v0, :cond_13

    const-string p1, "handleSend theConnection is null"

    const-string v0, "CThread"

    .line 10071
    invoke-static {v0, p1}, Lcom/imo/android/imoim/util/bt;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 358
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v1

    invoke-virtual {v1, v0, p1}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    return-void

    .line 361
    :cond_13
    iget-boolean v0, v0, Lcom/imo/android/imoim/network/ConnectData3;->hasSendFirstMsg:Z

    if-nez v0, :cond_22

    iget-boolean v0, p1, Lcom/imo/android/imoim/util/y;->i:Z

    if-nez v0, :cond_22

    const/4 v0, 0x1

    .line 362
    iput-boolean v0, p1, Lcom/imo/android/imoim/util/y;->i:Z

    const/4 v0, 0x0

    .line 363
    invoke-virtual {p1, v0}, Lcom/imo/android/imoim/util/y;->a(Z)[B

    .line 365
    :cond_22
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    invoke-virtual {v0}, Lcom/imo/android/imoim/network/ConnectData3;->markHasSendFirstMessage()V

    .line 366
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    iget-object v0, v0, Lcom/imo/android/imoim/network/ConnectData3;->queue:Ljava/util/concurrent/ConcurrentLinkedQueue;

    invoke-virtual {v0, p1}, Ljava/util/concurrent/ConcurrentLinkedQueue;->offer(Ljava/lang/Object;)Z

    .line 367
    iget-object p1, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    iget p1, p1, Lcom/imo/android/imoim/network/ConnectData3;->fd:I

    invoke-direct {p0, p1}, Lcom/imo/android/imoim/network/CThread;->callAddWrite(I)V

    return-void
.end method

.method handleSwitch(Lcom/imo/android/imoim/network/ConnectData3;)V
    .registers 9

    .line 372
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

    iget v1, p1, Lcom/imo/android/imoim/network/ConnectData3;->fd:I

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

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/util/concurrent/ConcurrentHashMap;->containsKey(Ljava/lang/Object;)Z

    move-result v0

    const/4 v1, 0x0

    const/4 v2, 0x1

    if-nez v0, :cond_17

    iget-boolean v0, p1, Lcom/imo/android/imoim/network/ConnectData3;->isGCM:Z

    if-eqz v0, :cond_15

    goto :goto_17

    :cond_15
    const/4 v0, 0x0

    goto :goto_18

    :cond_17
    :goto_17
    const/4 v0, 0x1

    :goto_18
    if-nez v0, :cond_1b

    return-void

    .line 377
    :cond_1b
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v0

    new-instance v3, Ljava/lang/StringBuilder;

    const-string v4, "handleSwitch attach.isGcm="

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

    iget-boolean v4, p1, Lcom/imo/android/imoim/network/ConnectData3;->isGCM:Z

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

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

    move-result-object v3

    const-string v4, "CThread"

    invoke-virtual {v0, v4, v3}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    .line 378
    invoke-direct {p0, p1}, Lcom/imo/android/imoim/network/CThread;->closeOtherConnections(Lcom/imo/android/imoim/network/ConnectData3;)V

    .line 380
    iget-boolean v0, p1, Lcom/imo/android/imoim/network/ConnectData3;->isGCM:Z

    const/4 v3, -0x1

    if-eqz v0, :cond_57

    const/4 v0, 0x0

    .line 381
    iput-object v0, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    .line 382
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v0

    const-string v1, "theConnection is null"

    invoke-virtual {v0, v4, v1}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    .line 383
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v0

    invoke-virtual {v0, p1}, Lcom/imo/android/imoim/network/NetworkLogger;->setTheConnection(Lcom/imo/android/imoim/network/ConnectData3;)V

    .line 384
    invoke-static {}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->get()Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;

    move-result-object v0

    invoke-virtual {v0, v3}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->setTcpConnectState(I)V

    goto :goto_9f

    .line 386
    :cond_57
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

    iget v5, p1, Lcom/imo/android/imoim/network/ConnectData3;->fd:I

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

    move-result-object v5

    invoke-virtual {v0, v5}, Ljava/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/imo/android/imoim/network/Connection;

    if-eqz v0, :cond_6d

    .line 388
    invoke-interface {v0}, Lcom/imo/android/imoim/network/Connection;->getConnectData()Lcom/imo/android/imoim/network/ConnectData3;

    move-result-object v0

    iput-object v0, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    .line 390
    :cond_6d
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v0

    const/4 v5, 0x3

    new-array v5, v5, [Ljava/lang/Object;

    iget-object v6, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    iget-object v6, v6, Lcom/imo/android/imoim/network/ConnectData3;->ip:Ljava/lang/String;

    aput-object v6, v5, v1

    iget-object v1, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    iget v1, v1, Lcom/imo/android/imoim/network/ConnectData3;->port:I

    .line 391
    invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v1

    aput-object v1, v5, v2

    const/4 v1, 0x2

    iget-object v2, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    iget v2, v2, Lcom/imo/android/imoim/network/ConnectData3;->fd:I

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

    move-result-object v2

    aput-object v2, v5, v1

    const-string v1, "theConnection: %s:%s fd=%s"

    invoke-static {v1, v5}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v1

    .line 390
    invoke-virtual {v0, v4, v1}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    .line 392
    invoke-static {}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->get()Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;

    move-result-object v0

    invoke-virtual {v0, v3}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->setGCMConnectState(I)V

    .line 395
    :goto_9f
    new-instance v0, Ljava/lang/StringBuilder;

    const-string v1, "handleSwitch-"

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

    iget p1, p1, Lcom/imo/android/imoim/network/ConnectData3;->fd:I

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

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

    move-result-object p1

    invoke-direct {p0, p1}, Lcom/imo/android/imoim/network/CThread;->logConnectionsChange(Ljava/lang/String;)V

    return-void
.end method

.method public handleWrite(I[BII)I
    .registers 7

    .line 463
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v1, 0x15

    if-ge v0, v1, :cond_10

    .line 465
    :try_start_6
    invoke-virtual {p0, p1, p2, p3, p4}, Lcom/imo/android/imoim/network/CThread;->write(I[BII)I

    move-result p1
    :try_end_a
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_6 .. :try_end_a} :catch_b

    goto :goto_14

    .line 468
    :catch_b
    :try_start_b
    invoke-virtual {p0, p1, p2, p3, p4}, Lcom/imo/android/imoim/network/CThread;->write(I[BII)I

    move-result p1
    :try_end_f
    .catch Ljava/lang/UnsatisfiedLinkError; {:try_start_b .. :try_end_f} :catch_10

    goto :goto_14

    .line 474
    :catch_10
    :cond_10
    invoke-virtual {p0, p1, p2, p3, p4}, Lcom/imo/android/imoim/network/CThread;->write(I[BII)I

    move-result p1

    :goto_14
    return p1
.end method

.method hasValidConnection()Z
    .registers 2

    .line 83
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    if-eqz v0, :cond_6

    const/4 v0, 0x1

    return v0

    :cond_6
    const/4 v0, 0x0

    return v0
.end method

.method native init(ZLjava/lang/String;Z)I
.end method

.method init_epoll()I
    .registers 4

    .line 92
    invoke-static {}, Lcom/imo/android/imoim/util/bb;->a()Ljava/lang/String;

    move-result-object v0

    const/4 v1, 0x0

    .line 93
    invoke-virtual {p0, v1, v0, v1}, Lcom/imo/android/imoim/network/CThread;->init(ZLjava/lang/String;Z)I

    move-result v0

    .line 94
    invoke-static {v0}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;

    move-result-object v1

    const-string v2, "init returned "

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

    move-result-object v1

    const-string v2, "CThread"

    .line 1071
    invoke-static {v2, v1}, Lcom/imo/android/imoim/util/bt;->d(Ljava/lang/String;Ljava/lang/String;)V

    return v0
.end method

.method native loop([I)I
.end method

.method public onError(IILjava/lang/String;)V
    .registers 10

    .line 535
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->connections:Ljava/util/concurrent/ConcurrentHashMap;

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

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/imo/android/imoim/network/Connection;

    .line 536
    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "close fd: "

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

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

    const-string v2, " ret: "

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

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

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

    move-result-object v1

    const-string v3, "CThread"

    .line 11071
    invoke-static {v3, v1}, Lcom/imo/android/imoim/util/bt;->d(Ljava/lang/String;Ljava/lang/String;)V

    .line 537
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object v1

    new-instance v4, Ljava/lang/StringBuilder;

    const-string v5, "connection Error, close fd: "

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

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

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

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

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

    move-result-object p2

    invoke-virtual {v1, v3, p2}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    if-eqz v0, :cond_5a

    .line 539
    invoke-interface {v0}, Lcom/imo/android/imoim/network/Connection;->getIp()Ljava/lang/String;

    move-result-object p2

    invoke-interface {v0}, Lcom/imo/android/imoim/network/Connection;->getPort()I

    move-result v1

    invoke-static {p2, v1}, Lcom/imo/android/imoim/techinfocollector/a/h;->b(Ljava/lang/String;I)V

    .line 540
    invoke-static {}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->get()Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;

    move-result-object p2

    invoke-interface {v0}, Lcom/imo/android/imoim/network/Connection;->getConnectData()Lcom/imo/android/imoim/network/ConnectData3;

    move-result-object v0

    invoke-virtual {p2, v0, p3}, Lcom/imo/android/imoim/network/stat/connect/ConnectStatHelper;->markDisconnect(Lcom/imo/android/imoim/network/ConnectData3;Ljava/lang/String;)V

    .line 545
    :cond_5a
    iget-object p2, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    const/4 v0, 0x0

    const/4 v1, 0x0

    if-eqz p2, :cond_9c

    .line 546
    iget p2, p2, Lcom/imo/android/imoim/network/ConnectData3;->fd:I

    if-ne p2, p1, :cond_ab

    .line 547
    invoke-static {}, Lcom/imo/android/imoim/network/stat/connect/FrontConnStatsHelper2;->get()Lcom/imo/android/imoim/network/stat/connect/FrontConnStatsHelper2;

    move-result-object p2

    iget-object v2, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    invoke-virtual {v2}, Lcom/imo/android/imoim/network/ConnectData3;->getType()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {p2, v2}, Lcom/imo/android/imoim/network/stat/connect/FrontConnStatsHelper2;->markDisConnect(Ljava/lang/String;)V

    .line 550
    iput-object v1, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    .line 551
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object p2

    const-string v2, "theConnection is null"

    invoke-virtual {p2, v3, v2}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    .line 552
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object p2

    invoke-virtual {p2, v1}, Lcom/imo/android/imoim/network/NetworkLogger;->setTheConnection(Lcom/imo/android/imoim/network/ConnectData3;)V

    .line 553
    invoke-static {p3}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object p2

    const-string p3, "connection_closed"

    invoke-virtual {p3, p2}, Ljava/lang/String;->concat(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v1

    .line 554
    sget-object p2, Lcom/imo/android/imoim/IMO;->c:Lcom/imo/android/imoim/network/Dispatcher4;

    invoke-virtual {p2, v1, v0}, Lcom/imo/android/imoim/network/Dispatcher4;->reconnectFromOtherThread(Ljava/lang/String;Z)V

    .line 555
    invoke-static {}, Lcom/imo/android/imoim/network/stat/connect/FrontConnStatHelper;->get()Lcom/imo/android/imoim/network/stat/connect/FrontConnStatHelper;

    move-result-object p2

    const-string p3, "none"

    invoke-virtual {p2, p3}, Lcom/imo/android/imoim/network/stat/connect/FrontConnStatHelper;->setConnectState(Ljava/lang/String;)V

    goto :goto_ab

    .line 559
    :cond_9c
    invoke-static {p3}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object p2

    const-string p3, "connection_closed2_"

    invoke-virtual {p3, p2}, Ljava/lang/String;->concat(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v1

    .line 560
    sget-object p2, Lcom/imo/android/imoim/IMO;->c:Lcom/imo/android/imoim/network/Dispatcher4;

    invoke-virtual {p2, v1, v0}, Lcom/imo/android/imoim/network/Dispatcher4;->reconnectFromOtherThread(Ljava/lang/String;Z)V

    .line 563
    :cond_ab
    :goto_ab
    iget-object p2, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    sput-object p2, Lcom/imo/android/imoim/techinfocollector/a/h;->c:Lcom/imo/android/imoim/network/ConnectData3;

    .line 565
    new-instance p2, Ljava/lang/StringBuilder;

    const-string p3, "onError-"

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

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

    const-string p1, "-"

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

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

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

    move-result-object p1

    invoke-direct {p0, p1}, Lcom/imo/android/imoim/network/CThread;->logConnectionsChange(Ljava/lang/String;)V

    return-void
.end method

.method public onReceiveMessage(Lcom/imo/android/imoim/network/ConnectData3;Ljava/lang/String;JJ)V
    .registers 15
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/lang/Exception;
        }
    .end annotation

    .line 570
    new-instance v2, Lorg/json/JSONObject;

    invoke-direct {v2, p2}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V

    const-string v0, "method"

    .line 571
    invoke-virtual {v2, v0}, Lorg/json/JSONObject;->getString(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    const-string v1, "name_channel"

    .line 572
    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_3d

    .line 573
    invoke-static {}, Lcom/imo/android/imoim/network/NetworkLogger;->getInstance()Lcom/imo/android/imoim/network/NetworkLogger;

    move-result-object p3

    invoke-static {p2}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object p2

    const-string p4, "got name channel "

    invoke-virtual {p4, p2}, Ljava/lang/String;->concat(Ljava/lang/String;)Ljava/lang/String;

    move-result-object p2

    const-string p4, "CThread"

    invoke-virtual {p3, p4, p2}, Lcom/imo/android/imoim/network/NetworkLogger;->log(Ljava/lang/String;Ljava/lang/String;)V

    const-string p2, "data"

    .line 11119
    invoke-virtual {v2, p2}, Lorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;

    move-result-object p2

    if-eqz p2, :cond_39

    .line 576
    sget-object p3, Lcom/imo/android/imoim/av/filter/g;->c:Lcom/imo/android/imoim/av/filter/g;

    const-string p4, "ts_nano"

    invoke-virtual {p2, p4}, Lorg/json/JSONObject;->optLong(Ljava/lang/String;)J

    move-result-wide p4

    invoke-virtual {p3, p4, p5}, Lcom/imo/android/imoim/av/filter/g;->a(J)V

    .line 578
    :cond_39
    invoke-direct {p0, p1}, Lcom/imo/android/imoim/network/CThread;->handleGotNameChannel(Lcom/imo/android/imoim/network/ConnectData3;)V

    return-void

    .line 580
    :cond_3d
    sget-object v0, Lcom/imo/android/imoim/IMO;->c:Lcom/imo/android/imoim/network/Dispatcher4;

    invoke-virtual {p1}, Lcom/imo/android/imoim/network/ConnectData3;->getType()Ljava/lang/String;

    move-result-object v1

    const/4 v3, 0x0

    move-wide v4, p3

    move-wide v6, p5

    invoke-virtual/range {v0 .. v7}, Lcom/imo/android/imoim/network/Dispatcher4;->onMessageFromOtherThread(Ljava/lang/String;Lorg/json/JSONObject;ZJJ)V

    return-void
.end method

.method public native read(I[B)I
.end method

.method public run()V
    .registers 6

    .line 102
    invoke-direct {p0}, Lcom/imo/android/imoim/network/CThread;->handleActions()V

    .line 105
    :goto_3
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->events:[I

    invoke-virtual {p0, v0}, Lcom/imo/android/imoim/network/CThread;->loop([I)I

    move-result v0

    if-gez v0, :cond_44

    neg-int v1, v0

    const/4 v2, 0x4

    if-eq v1, v2, :cond_47

    const-string v2, "CThread"

    const/4 v3, 0x1

    if-eq v1, v3, :cond_36

    const/16 v4, 0xd

    if-eq v1, v4, :cond_36

    const/4 v4, 0x2

    if-ne v1, v4, :cond_1c

    goto :goto_36

    :cond_1c
    const/16 v4, 0xb

    if-ne v1, v4, :cond_26

    const-string v0, "got EAGAIN"

    .line 2079
    invoke-static {v2, v0, v3}, Lcom/imo/android/imoim/util/bt;->a(Ljava/lang/String;Ljava/lang/String;Z)V

    goto :goto_47

    .line 120
    :cond_26
    new-instance v1, Ljava/lang/RuntimeException;

    invoke-static {v0}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;

    move-result-object v0

    const-string v2, "numEvents is "

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

    move-result-object v0

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

    throw v1

    .line 114
    :cond_36
    :goto_36
    invoke-static {v1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;

    move-result-object v0

    const-string v1, "got err "

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

    move-result-object v0

    .line 1079
    invoke-static {v2, v0, v3}, Lcom/imo/android/imoim/util/bt;->a(Ljava/lang/String;Ljava/lang/String;Z)V

    return-void

    .line 126
    :cond_44
    invoke-direct {p0, v0}, Lcom/imo/android/imoim/network/CThread;->handleEvents(I)V

    .line 129
    :cond_47
    :goto_47
    invoke-direct {p0}, Lcom/imo/android/imoim/network/CThread;->handleActions()V

    goto :goto_3
.end method

.method shouldSetHeaders()Z
    .registers 2

    .line 87
    iget-object v0, p0, Lcom/imo/android/imoim/network/CThread;->theConnection:Lcom/imo/android/imoim/network/ConnectData3;

    if-eqz v0, :cond_a

    .line 88
    iget-boolean v0, v0, Lcom/imo/android/imoim/network/ConnectData3;->hasSendFirstMsg:Z

    if-nez v0, :cond_a

    const/4 v0, 0x1

    return v0

    :cond_a
    const/4 v0, 0x0

    return v0
.end method

.method public native write(I[BII)I
.end method