.class public Lorg/java_websocket/WebSocketImpl; .super Ljava/lang/Object; .source "WebSocketImpl.java" # interfaces .implements Lorg/java_websocket/WebSocket; # static fields .field static final synthetic $assertionsDisabled:Z .field public static DEBUG:Z .field public static RCVBUF:I .field public static final defaultdraftlist:Ljava/util/List; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/List", "<", "Lorg/java_websocket/drafts/Draft;", ">;" } .end annotation .end field # instance fields .field public channel:Ljava/nio/channels/ByteChannel; .field private closecode:Ljava/lang/Integer; .field private closedremotely:Ljava/lang/Boolean; .field private closemessage:Ljava/lang/String; .field private current_continuous_frame_opcode:Lorg/java_websocket/framing/Framedata$Opcode; .field private draft:Lorg/java_websocket/drafts/Draft; .field private volatile flushandclosestate:Z .field private handshakerequest:Lorg/java_websocket/handshake/ClientHandshake; .field public final inQueue:Ljava/util/concurrent/BlockingQueue; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/concurrent/BlockingQueue", "<", "Ljava/nio/ByteBuffer;", ">;" } .end annotation .end field .field public key:Ljava/nio/channels/SelectionKey; .field private knownDrafts:Ljava/util/List; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/List", "<", "Lorg/java_websocket/drafts/Draft;", ">;" } .end annotation .end field .field public final outQueue:Ljava/util/concurrent/BlockingQueue; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/concurrent/BlockingQueue", "<", "Ljava/nio/ByteBuffer;", ">;" } .end annotation .end field .field private readystate:Lorg/java_websocket/WebSocket$READYSTATE; .field private resourceDescriptor:Ljava/lang/String; .field private role:Lorg/java_websocket/WebSocket$Role; .field private tmpHandshakeBytes:Ljava/nio/ByteBuffer; .field public volatile workerThread:Lorg/java_websocket/server/WebSocketServer$WebSocketWorker; .field private final wsl:Lorg/java_websocket/WebSocketListener; # direct methods .method static constructor ()V .locals 3 .prologue const/4 v1, 0x0 .line 44 const-class v0, Lorg/java_websocket/WebSocketImpl; invoke-virtual {v0}, Ljava/lang/Class;->desiredAssertionStatus()Z move-result v0 if-nez v0, :cond_0 const/4 v0, 0x1 :goto_0 sput-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z .line 46 new-instance v0, Ljava/util/ArrayList; const/4 v2, 0x4 invoke-direct {v0, v2}, Ljava/util/ArrayList;->(I)V sput-object v0, Lorg/java_websocket/WebSocketImpl;->defaultdraftlist:Ljava/util/List; .line 47 const/16 v0, 0x4000 sput v0, Lorg/java_websocket/WebSocketImpl;->RCVBUF:I .line 48 sput-boolean v1, Lorg/java_websocket/WebSocketImpl;->DEBUG:Z .line 51 sget-object v0, Lorg/java_websocket/WebSocketImpl;->defaultdraftlist:Ljava/util/List; new-instance v1, Lorg/java_websocket/drafts/Draft_17; invoke-direct {v1}, Lorg/java_websocket/drafts/Draft_17;->()V invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z .line 52 sget-object v0, Lorg/java_websocket/WebSocketImpl;->defaultdraftlist:Ljava/util/List; new-instance v1, Lorg/java_websocket/drafts/Draft_10; invoke-direct {v1}, Lorg/java_websocket/drafts/Draft_10;->()V invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z .line 53 sget-object v0, Lorg/java_websocket/WebSocketImpl;->defaultdraftlist:Ljava/util/List; new-instance v1, Lorg/java_websocket/drafts/Draft_76; invoke-direct {v1}, Lorg/java_websocket/drafts/Draft_76;->()V invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z .line 54 sget-object v0, Lorg/java_websocket/WebSocketImpl;->defaultdraftlist:Ljava/util/List; new-instance v1, Lorg/java_websocket/drafts/Draft_75; invoke-direct {v1}, Lorg/java_websocket/drafts/Draft_75;->()V invoke-interface {v0, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z .line 55 return-void :cond_0 move v0, v1 .line 44 goto :goto_0 .end method .method public constructor (Lorg/java_websocket/WebSocketListener;Ljava/util/List;)V .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lorg/java_websocket/WebSocketListener;", "Ljava/util/List", "<", "Lorg/java_websocket/drafts/Draft;", ">;)V" } .end annotation .prologue .line 111 const/4 v0, 0x0 check-cast v0, Lorg/java_websocket/drafts/Draft; invoke-direct {p0, p1, v0}, Lorg/java_websocket/WebSocketImpl;->(Lorg/java_websocket/WebSocketListener;Lorg/java_websocket/drafts/Draft;)V .line 112 sget-object v0, Lorg/java_websocket/WebSocket$Role;->SERVER:Lorg/java_websocket/WebSocket$Role; iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; .line 114 if-eqz p2, :cond_0 invoke-interface {p2}, Ljava/util/List;->isEmpty()Z move-result v0 if-eqz v0, :cond_1 .line 115 :cond_0 sget-object v0, Lorg/java_websocket/WebSocketImpl;->defaultdraftlist:Ljava/util/List; iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->knownDrafts:Ljava/util/List; .line 119 :goto_0 return-void .line 117 :cond_1 iput-object p2, p0, Lorg/java_websocket/WebSocketImpl;->knownDrafts:Ljava/util/List; goto :goto_0 .end method .method public constructor (Lorg/java_websocket/WebSocketListener;Ljava/util/List;Ljava/net/Socket;)V .locals 0 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lorg/java_websocket/WebSocketListener;", "Ljava/util/List", "<", "Lorg/java_websocket/drafts/Draft;", ">;", "Ljava/net/Socket;", ")V" } .end annotation .annotation runtime Ljava/lang/Deprecated; .end annotation .prologue .line 144 invoke-direct {p0, p1, p2}, Lorg/java_websocket/WebSocketImpl;->(Lorg/java_websocket/WebSocketListener;Ljava/util/List;)V .line 145 return-void .end method .method public constructor (Lorg/java_websocket/WebSocketListener;Lorg/java_websocket/drafts/Draft;)V .locals 3 .prologue const/4 v2, 0x0 const/4 v1, 0x0 .line 126 invoke-direct {p0}, Ljava/lang/Object;->()V .line 81 iput-boolean v2, p0, Lorg/java_websocket/WebSocketImpl;->flushandclosestate:Z .line 82 sget-object v0, Lorg/java_websocket/WebSocket$READYSTATE;->NOT_YET_CONNECTED:Lorg/java_websocket/WebSocket$READYSTATE; iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; .line 85 iput-object v1, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; .line 89 iput-object v1, p0, Lorg/java_websocket/WebSocketImpl;->current_continuous_frame_opcode:Lorg/java_websocket/framing/Framedata$Opcode; .line 94 invoke-static {v2}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer; move-result-object v0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; .line 99 iput-object v1, p0, Lorg/java_websocket/WebSocketImpl;->handshakerequest:Lorg/java_websocket/handshake/ClientHandshake; .line 101 iput-object v1, p0, Lorg/java_websocket/WebSocketImpl;->closemessage:Ljava/lang/String; .line 102 iput-object v1, p0, Lorg/java_websocket/WebSocketImpl;->closecode:Ljava/lang/Integer; .line 103 iput-object v1, p0, Lorg/java_websocket/WebSocketImpl;->closedremotely:Ljava/lang/Boolean; .line 105 iput-object v1, p0, Lorg/java_websocket/WebSocketImpl;->resourceDescriptor:Ljava/lang/String; .line 127 if-eqz p1, :cond_0 if-nez p2, :cond_1 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; sget-object v1, Lorg/java_websocket/WebSocket$Role;->SERVER:Lorg/java_websocket/WebSocket$Role; if-ne v0, v1, :cond_1 .line 128 :cond_0 new-instance v0, Ljava/lang/IllegalArgumentException; const-string v1, "parameters must not be null" invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw v0 .line 129 :cond_1 new-instance v0, Ljava/util/concurrent/LinkedBlockingQueue; invoke-direct {v0}, Ljava/util/concurrent/LinkedBlockingQueue;->()V iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->outQueue:Ljava/util/concurrent/BlockingQueue; .line 130 new-instance v0, Ljava/util/concurrent/LinkedBlockingQueue; invoke-direct {v0}, Ljava/util/concurrent/LinkedBlockingQueue;->()V iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->inQueue:Ljava/util/concurrent/BlockingQueue; .line 131 iput-object p1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; .line 132 sget-object v0, Lorg/java_websocket/WebSocket$Role;->CLIENT:Lorg/java_websocket/WebSocket$Role; iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; .line 133 if-eqz p2, :cond_2 .line 134 invoke-virtual {p2}, Lorg/java_websocket/drafts/Draft;->copyInstance()Lorg/java_websocket/drafts/Draft; move-result-object v0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; .line 135 :cond_2 return-void .end method .method public constructor (Lorg/java_websocket/WebSocketListener;Lorg/java_websocket/drafts/Draft;Ljava/net/Socket;)V .locals 0 .annotation runtime Ljava/lang/Deprecated; .end annotation .prologue .line 139 invoke-direct {p0, p1, p2}, Lorg/java_websocket/WebSocketImpl;->(Lorg/java_websocket/WebSocketListener;Lorg/java_websocket/drafts/Draft;)V .line 140 return-void .end method .method private close(ILjava/lang/String;Z)V .locals 5 .prologue const/16 v4, 0x3ee const/4 v3, -0x3 const/4 v2, 0x0 .line 398 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->CLOSING:Lorg/java_websocket/WebSocket$READYSTATE; if-eq v0, v1, :cond_1 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->CLOSED:Lorg/java_websocket/WebSocket$READYSTATE; if-eq v0, v1, :cond_1 .line 399 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->OPEN:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v0, v1, :cond_6 .line 400 if-ne p1, v4, :cond_2 .line 401 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v0, :cond_0 if-eqz p3, :cond_0 new-instance v0, Ljava/lang/AssertionError; invoke-direct {v0}, Ljava/lang/AssertionError;->()V throw v0 .line 402 :cond_0 sget-object v0, Lorg/java_websocket/WebSocket$READYSTATE;->CLOSING:Lorg/java_websocket/WebSocket$READYSTATE; iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; .line 403 invoke-virtual {p0, p1, p2, v2}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V .line 434 :cond_1 :goto_0 return-void .line 406 :cond_2 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0}, Lorg/java_websocket/drafts/Draft;->getCloseHandshakeType()Lorg/java_websocket/drafts/Draft$CloseHandshakeType; move-result-object v0 sget-object v1, Lorg/java_websocket/drafts/Draft$CloseHandshakeType;->NONE:Lorg/java_websocket/drafts/Draft$CloseHandshakeType; if-eq v0, v1, :cond_4 .line 408 if-nez p3, :cond_3 .line 410 :try_start_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0, p0, p1, p2}, Lorg/java_websocket/WebSocketListener;->onWebsocketCloseInitiated(Lorg/java_websocket/WebSocket;ILjava/lang/String;)V :try_end_0 .catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_0} :catch_0 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_0 .. :try_end_0} :catch_1 .line 415 :cond_3 :goto_1 :try_start_1 new-instance v0, Lorg/java_websocket/framing/CloseFrameBuilder; invoke-direct {v0, p1, p2}, Lorg/java_websocket/framing/CloseFrameBuilder;->(ILjava/lang/String;)V invoke-virtual {p0, v0}, Lorg/java_websocket/WebSocketImpl;->sendFrame(Lorg/java_websocket/framing/Framedata;)V :try_end_1 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_1 .. :try_end_1} :catch_1 .line 421 :cond_4 :goto_2 invoke-virtual {p0, p1, p2, p3}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V .line 428 :goto_3 const/16 v0, 0x3ea if-ne p1, v0, :cond_5 .line 429 invoke-virtual {p0, p1, p2, p3}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V .line 430 :cond_5 sget-object v0, Lorg/java_websocket/WebSocket$READYSTATE;->CLOSING:Lorg/java_websocket/WebSocket$READYSTATE; iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; .line 431 const/4 v0, 0x0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; goto :goto_0 .line 411 :catch_0 move-exception v0 .line 412 :try_start_2 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V :try_end_2 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_2 .. :try_end_2} :catch_1 goto :goto_1 .line 416 :catch_1 move-exception v0 .line 417 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V .line 418 const-string v0, "generated frame is invalid" invoke-virtual {p0, v4, v0, v2}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V goto :goto_2 .line 422 :cond_6 if-ne p1, v3, :cond_8 .line 423 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v0, :cond_7 if-nez p3, :cond_7 new-instance v0, Ljava/lang/AssertionError; invoke-direct {v0}, Ljava/lang/AssertionError;->()V throw v0 .line 424 :cond_7 const/4 v0, 0x1 invoke-virtual {p0, v3, p2, v0}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V goto :goto_3 .line 426 :cond_8 const/4 v0, -0x1 invoke-virtual {p0, v0, p2, v2}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V goto :goto_3 .end method .method private decodeFrames(Ljava/nio/ByteBuffer;)V .locals 5 .prologue .line 322 :try_start_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0, p1}, Lorg/java_websocket/drafts/Draft;->translateFrame(Ljava/nio/ByteBuffer;)Ljava/util/List; move-result-object v0 .line 323 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v3 :goto_0 invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_1 invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Lorg/java_websocket/framing/Framedata; .line 324 sget-boolean v1, Lorg/java_websocket/WebSocketImpl;->DEBUG:Z if-eqz v1, :cond_0 .line 325 sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream; new-instance v2, Ljava/lang/StringBuilder; invoke-direct {v2}, Ljava/lang/StringBuilder;->()V const-string v4, "matched frame: " invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V .line 326 :cond_0 invoke-interface {v0}, Lorg/java_websocket/framing/Framedata;->getOpcode()Lorg/java_websocket/framing/Framedata$Opcode; move-result-object v1 .line 327 invoke-interface {v0}, Lorg/java_websocket/framing/Framedata;->isFin()Z move-result v2 .line 329 sget-object v4, Lorg/java_websocket/framing/Framedata$Opcode;->CLOSING:Lorg/java_websocket/framing/Framedata$Opcode; if-ne v1, v4, :cond_4 .line 330 const/16 v2, 0x3ed .line 331 const-string v1, "" .line 332 instance-of v4, v0, Lorg/java_websocket/framing/CloseFrame; if-eqz v4, :cond_11 .line 333 check-cast v0, Lorg/java_websocket/framing/CloseFrame; .line 334 invoke-interface {v0}, Lorg/java_websocket/framing/CloseFrame;->getCloseCode()I move-result v1 .line 335 invoke-interface {v0}, Lorg/java_websocket/framing/CloseFrame;->getMessage()Ljava/lang/String; move-result-object v0 .line 337 :goto_1 iget-object v2, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v4, Lorg/java_websocket/WebSocket$READYSTATE;->CLOSING:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v2, v4, :cond_2 .line 339 const/4 v2, 0x1 invoke-virtual {p0, v1, v0, v2}, Lorg/java_websocket/WebSocketImpl;->closeConnection(ILjava/lang/String;Z)V :try_end_0 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_0 .line 390 :catch_0 move-exception v0 .line 391 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V .line 392 invoke-virtual {p0, v0}, Lorg/java_websocket/WebSocketImpl;->close(Lorg/java_websocket/exceptions/InvalidDataException;)V .line 395 :cond_1 return-void .line 342 :cond_2 :try_start_1 iget-object v2, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v2}, Lorg/java_websocket/drafts/Draft;->getCloseHandshakeType()Lorg/java_websocket/drafts/Draft$CloseHandshakeType; move-result-object v2 sget-object v4, Lorg/java_websocket/drafts/Draft$CloseHandshakeType;->TWOWAY:Lorg/java_websocket/drafts/Draft$CloseHandshakeType; if-ne v2, v4, :cond_3 .line 343 const/4 v2, 0x1 invoke-direct {p0, v1, v0, v2}, Lorg/java_websocket/WebSocketImpl;->close(ILjava/lang/String;Z)V goto :goto_0 .line 345 :cond_3 const/4 v2, 0x0 invoke-virtual {p0, v1, v0, v2}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V goto :goto_0 .line 348 :cond_4 sget-object v4, Lorg/java_websocket/framing/Framedata$Opcode;->PING:Lorg/java_websocket/framing/Framedata$Opcode; if-ne v1, v4, :cond_5 .line 349 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketPing(Lorg/java_websocket/WebSocket;Lorg/java_websocket/framing/Framedata;)V goto :goto_0 .line 351 :cond_5 sget-object v4, Lorg/java_websocket/framing/Framedata$Opcode;->PONG:Lorg/java_websocket/framing/Framedata$Opcode; if-ne v1, v4, :cond_6 .line 352 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketPong(Lorg/java_websocket/WebSocket;Lorg/java_websocket/framing/Framedata;)V goto/16 :goto_0 .line 354 :cond_6 if-eqz v2, :cond_7 sget-object v4, Lorg/java_websocket/framing/Framedata$Opcode;->CONTINUOUS:Lorg/java_websocket/framing/Framedata$Opcode; if-ne v1, v4, :cond_d .line 355 :cond_7 sget-object v4, Lorg/java_websocket/framing/Framedata$Opcode;->CONTINUOUS:Lorg/java_websocket/framing/Framedata$Opcode; if-eq v1, v4, :cond_a .line 356 iget-object v2, p0, Lorg/java_websocket/WebSocketImpl;->current_continuous_frame_opcode:Lorg/java_websocket/framing/Framedata$Opcode; if-eqz v2, :cond_8 .line 357 new-instance v0, Lorg/java_websocket/exceptions/InvalidDataException; const/16 v1, 0x3ea const-string v2, "Previous continuous frame sequence not completed." invoke-direct {v0, v1, v2}, Lorg/java_websocket/exceptions/InvalidDataException;->(ILjava/lang/String;)V throw v0 .line 358 :cond_8 iput-object v1, p0, Lorg/java_websocket/WebSocketImpl;->current_continuous_frame_opcode:Lorg/java_websocket/framing/Framedata$Opcode; :try_end_1 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_1 .. :try_end_1} :catch_0 .line 367 :cond_9 :goto_2 :try_start_2 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketMessageFragment(Lorg/java_websocket/WebSocket;Lorg/java_websocket/framing/Framedata;)V :try_end_2 .catch Ljava/lang/RuntimeException; {:try_start_2 .. :try_end_2} :catch_1 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_2 .. :try_end_2} :catch_0 goto/16 :goto_0 .line 368 :catch_1 move-exception v0 .line 369 :try_start_3 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V goto/16 :goto_0 .line 359 :cond_a if-eqz v2, :cond_c .line 360 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->current_continuous_frame_opcode:Lorg/java_websocket/framing/Framedata$Opcode; if-nez v1, :cond_b .line 361 new-instance v0, Lorg/java_websocket/exceptions/InvalidDataException; const/16 v1, 0x3ea const-string v2, "Continuous frame sequence was not started." invoke-direct {v0, v1, v2}, Lorg/java_websocket/exceptions/InvalidDataException;->(ILjava/lang/String;)V throw v0 .line 362 :cond_b const/4 v1, 0x0 iput-object v1, p0, Lorg/java_websocket/WebSocketImpl;->current_continuous_frame_opcode:Lorg/java_websocket/framing/Framedata$Opcode; goto :goto_2 .line 363 :cond_c iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->current_continuous_frame_opcode:Lorg/java_websocket/framing/Framedata$Opcode; if-nez v1, :cond_9 .line 364 new-instance v0, Lorg/java_websocket/exceptions/InvalidDataException; const/16 v1, 0x3ea const-string v2, "Continuous frame sequence was not started." invoke-direct {v0, v1, v2}, Lorg/java_websocket/exceptions/InvalidDataException;->(ILjava/lang/String;)V throw v0 .line 372 :cond_d iget-object v2, p0, Lorg/java_websocket/WebSocketImpl;->current_continuous_frame_opcode:Lorg/java_websocket/framing/Framedata$Opcode; if-eqz v2, :cond_e .line 373 new-instance v0, Lorg/java_websocket/exceptions/InvalidDataException; const/16 v1, 0x3ea const-string v2, "Continuous frame sequence not completed." invoke-direct {v0, v1, v2}, Lorg/java_websocket/exceptions/InvalidDataException;->(ILjava/lang/String;)V throw v0 .line 374 :cond_e sget-object v2, Lorg/java_websocket/framing/Framedata$Opcode;->TEXT:Lorg/java_websocket/framing/Framedata$Opcode; :try_end_3 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_3 .. :try_end_3} :catch_0 if-ne v1, v2, :cond_f .line 376 :try_start_4 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0}, Lorg/java_websocket/framing/Framedata;->getPayloadData()Ljava/nio/ByteBuffer; move-result-object v0 invoke-static {v0}, Lorg/java_websocket/util/Charsetfunctions;->stringUtf8(Ljava/nio/ByteBuffer;)Ljava/lang/String; move-result-object v0 invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketMessage(Lorg/java_websocket/WebSocket;Ljava/lang/String;)V :try_end_4 .catch Ljava/lang/RuntimeException; {:try_start_4 .. :try_end_4} :catch_2 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_4 .. :try_end_4} :catch_0 goto/16 :goto_0 .line 377 :catch_2 move-exception v0 .line 378 :try_start_5 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V goto/16 :goto_0 .line 380 :cond_f sget-object v2, Lorg/java_websocket/framing/Framedata$Opcode;->BINARY:Lorg/java_websocket/framing/Framedata$Opcode; :try_end_5 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_5 .. :try_end_5} :catch_0 if-ne v1, v2, :cond_10 .line 382 :try_start_6 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0}, Lorg/java_websocket/framing/Framedata;->getPayloadData()Ljava/nio/ByteBuffer; move-result-object v0 invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketMessage(Lorg/java_websocket/WebSocket;Ljava/nio/ByteBuffer;)V :try_end_6 .catch Ljava/lang/RuntimeException; {:try_start_6 .. :try_end_6} :catch_3 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_6 .. :try_end_6} :catch_0 goto/16 :goto_0 .line 383 :catch_3 move-exception v0 .line 384 :try_start_7 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V goto/16 :goto_0 .line 387 :cond_10 new-instance v0, Lorg/java_websocket/exceptions/InvalidDataException; const/16 v1, 0x3ea const-string v2, "non control or continious frame expected" invoke-direct {v0, v1, v2}, Lorg/java_websocket/exceptions/InvalidDataException;->(ILjava/lang/String;)V throw v0 :try_end_7 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_7 .. :try_end_7} :catch_0 :cond_11 move-object v0, v1 move v1, v2 goto/16 :goto_1 .end method .method private decodeHandshake(Ljava/nio/ByteBuffer;)Z .locals 8 .prologue const/4 v3, 0x1 const/4 v2, 0x0 .line 179 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0}, Ljava/nio/ByteBuffer;->capacity()I move-result v0 if-nez v0, :cond_0 move-object v1, p1 .line 193 :goto_0 invoke-virtual {v1}, Ljava/nio/ByteBuffer;->mark()Ljava/nio/Buffer; .line 195 :try_start_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; if-nez v0, :cond_4 .line 196 invoke-direct {p0, v1}, Lorg/java_websocket/WebSocketImpl;->isFlashEdgeCase(Ljava/nio/ByteBuffer;)Lorg/java_websocket/drafts/Draft$HandshakeState; move-result-object v0 .line 197 sget-object v4, Lorg/java_websocket/drafts/Draft$HandshakeState;->MATCHED:Lorg/java_websocket/drafts/Draft$HandshakeState; :try_end_0 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_0 .. :try_end_0} :catch_1 if-ne v0, v4, :cond_4 .line 199 :try_start_1 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0, p0}, Lorg/java_websocket/WebSocketListener;->getFlashPolicy(Lorg/java_websocket/WebSocket;)Ljava/lang/String; move-result-object v0 invoke-static {v0}, Lorg/java_websocket/util/Charsetfunctions;->utf8Bytes(Ljava/lang/String;)[B move-result-object v0 invoke-static {v0}, Ljava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer; move-result-object v0 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->write(Ljava/nio/ByteBuffer;)V .line 200 const/4 v0, -0x3 const-string v3, "" invoke-virtual {p0, v0, v3}, Lorg/java_websocket/WebSocketImpl;->close(ILjava/lang/String;)V :try_end_1 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_1 .. :try_end_1} :catch_0 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_1 .. :try_end_1} :catch_1 :goto_1 move v0, v2 .line 315 :goto_2 return v0 .line 182 :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0}, Ljava/nio/ByteBuffer;->remaining()I move-result v0 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I move-result v1 if-ge v0, v1, :cond_1 .line 183 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0}, Ljava/nio/ByteBuffer;->capacity()I move-result v0 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I move-result v1 add-int/2addr v0, v1 invoke-static {v0}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer; move-result-object v0 .line 184 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v1}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer; .line 185 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0, v1}, Ljava/nio/ByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer; .line 186 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; .line 189 :cond_1 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0, p1}, Ljava/nio/ByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer; .line 190 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer; .line 191 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; move-object v1, v0 goto :goto_0 .line 201 :catch_0 move-exception v0 .line 202 const/16 v0, 0x3ee :try_start_2 const-string v3, "remote peer closed connection before flashpolicy could be transmitted" const/4 v4, 0x1 invoke-direct {p0, v0, v3, v4}, Lorg/java_websocket/WebSocketImpl;->close(ILjava/lang/String;Z)V :try_end_2 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_2 .. :try_end_2} :catch_1 goto :goto_1 .line 297 :catch_1 move-exception v0 move-object v3, v0 .line 298 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0}, Ljava/nio/ByteBuffer;->capacity()I move-result v0 if-nez v0, :cond_10 .line 299 invoke-virtual {v1}, Ljava/nio/ByteBuffer;->reset()Ljava/nio/Buffer; .line 300 invoke-virtual {v3}, Lorg/java_websocket/exceptions/IncompleteHandshakeException;->getPreferedSize()I move-result v0 .line 301 if-nez v0, :cond_f .line 302 invoke-virtual {v1}, Ljava/nio/ByteBuffer;->capacity()I move-result v0 add-int/lit8 v0, v0, 0x10 .line 306 :cond_2 invoke-static {v0}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer; move-result-object v0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; .line 308 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0, p1}, Ljava/nio/ByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer; :cond_3 :goto_3 move v0, v2 .line 315 goto :goto_2 .line 210 :cond_4 :try_start_3 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; sget-object v4, Lorg/java_websocket/WebSocket$Role;->SERVER:Lorg/java_websocket/WebSocket$Role; if-ne v0, v4, :cond_c .line 211 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; if-nez v0, :cond_9 .line 212 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->knownDrafts:Ljava/util/List; invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v4 :cond_5 :goto_4 invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_7 invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Lorg/java_websocket/drafts/Draft; .line 213 invoke-virtual {v0}, Lorg/java_websocket/drafts/Draft;->copyInstance()Lorg/java_websocket/drafts/Draft; :try_end_3 .catch Lorg/java_websocket/exceptions/InvalidHandshakeException; {:try_start_3 .. :try_end_3} :catch_6 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_3 .. :try_end_3} :catch_1 move-result-object v5 .line 215 :try_start_4 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; invoke-virtual {v5, v0}, Lorg/java_websocket/drafts/Draft;->setParseMode(Lorg/java_websocket/WebSocket$Role;)V .line 216 invoke-virtual {v1}, Ljava/nio/ByteBuffer;->reset()Ljava/nio/Buffer; .line 217 invoke-virtual {v5, v1}, Lorg/java_websocket/drafts/Draft;->translateHandshake(Ljava/nio/ByteBuffer;)Lorg/java_websocket/handshake/Handshakedata; move-result-object v0 .line 218 instance-of v6, v0, Lorg/java_websocket/handshake/ClientHandshake; if-nez v6, :cond_6 .line 219 const/16 v0, 0x3ea const-string v5, "wrong http function" const/4 v6, 0x0 invoke-virtual {p0, v0, v5, v6}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V move v0, v2 .line 220 goto/16 :goto_2 .line 222 :cond_6 check-cast v0, Lorg/java_websocket/handshake/ClientHandshake; .line 223 invoke-virtual {v5, v0}, Lorg/java_websocket/drafts/Draft;->acceptHandshakeAsServer(Lorg/java_websocket/handshake/ClientHandshake;)Lorg/java_websocket/drafts/Draft$HandshakeState; move-result-object v6 .line 224 sget-object v7, Lorg/java_websocket/drafts/Draft$HandshakeState;->MATCHED:Lorg/java_websocket/drafts/Draft$HandshakeState; if-ne v6, v7, :cond_5 .line 225 invoke-interface {v0}, Lorg/java_websocket/handshake/ClientHandshake;->getResourceDescriptor()Ljava/lang/String; move-result-object v6 iput-object v6, p0, Lorg/java_websocket/WebSocketImpl;->resourceDescriptor:Ljava/lang/String; :try_end_4 .catch Lorg/java_websocket/exceptions/InvalidHandshakeException; {:try_start_4 .. :try_end_4} :catch_7 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_4 .. :try_end_4} :catch_1 .line 228 :try_start_5 iget-object v6, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v6, p0, v5, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketHandshakeReceivedAsServer(Lorg/java_websocket/WebSocket;Lorg/java_websocket/drafts/Draft;Lorg/java_websocket/handshake/ClientHandshake;)Lorg/java_websocket/handshake/ServerHandshakeBuilder; :try_end_5 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_5 .. :try_end_5} :catch_2 .catch Ljava/lang/RuntimeException; {:try_start_5 .. :try_end_5} :catch_3 .catch Lorg/java_websocket/exceptions/InvalidHandshakeException; {:try_start_5 .. :try_end_5} :catch_7 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_5 .. :try_end_5} :catch_1 move-result-object v6 .line 237 :try_start_6 invoke-virtual {v5, v0, v6}, Lorg/java_websocket/drafts/Draft;->postProcessHandshakeResponseAsServer(Lorg/java_websocket/handshake/ClientHandshake;Lorg/java_websocket/handshake/ServerHandshakeBuilder;)Lorg/java_websocket/handshake/HandshakeBuilder; move-result-object v6 iget-object v7, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; invoke-virtual {v5, v6, v7}, Lorg/java_websocket/drafts/Draft;->createHandshake(Lorg/java_websocket/handshake/Handshakedata;Lorg/java_websocket/WebSocket$Role;)Ljava/util/List; move-result-object v6 invoke-direct {p0, v6}, Lorg/java_websocket/WebSocketImpl;->write(Ljava/util/List;)V .line 238 iput-object v5, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; .line 239 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->open(Lorg/java_websocket/handshake/Handshakedata;)V move v0, v3 .line 240 goto/16 :goto_2 .line 229 :catch_2 move-exception v0 .line 230 invoke-virtual {v0}, Lorg/java_websocket/exceptions/InvalidDataException;->getCloseCode()I move-result v5 invoke-virtual {v0}, Lorg/java_websocket/exceptions/InvalidDataException;->getMessage()Ljava/lang/String; move-result-object v0 const/4 v6, 0x0 invoke-virtual {p0, v5, v0, v6}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V move v0, v2 .line 231 goto/16 :goto_2 .line 232 :catch_3 move-exception v0 .line 233 iget-object v5, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v5, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V .line 234 const/4 v5, -0x1 invoke-virtual {v0}, Ljava/lang/RuntimeException;->getMessage()Ljava/lang/String; move-result-object v0 const/4 v6, 0x0 invoke-virtual {p0, v5, v0, v6}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V :try_end_6 .catch Lorg/java_websocket/exceptions/InvalidHandshakeException; {:try_start_6 .. :try_end_6} :catch_7 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_6 .. :try_end_6} :catch_1 move v0, v2 .line 235 goto/16 :goto_2 .line 246 :cond_7 :try_start_7 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; if-nez v0, :cond_8 .line 247 const/16 v0, 0x3ea const-string v3, "no draft matches" invoke-virtual {p0, v0, v3}, Lorg/java_websocket/WebSocketImpl;->close(ILjava/lang/String;)V :cond_8 move v0, v2 .line 249 goto/16 :goto_2 .line 252 :cond_9 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0, v1}, Lorg/java_websocket/drafts/Draft;->translateHandshake(Ljava/nio/ByteBuffer;)Lorg/java_websocket/handshake/Handshakedata; move-result-object v0 .line 253 instance-of v4, v0, Lorg/java_websocket/handshake/ClientHandshake; if-nez v4, :cond_a .line 254 const/16 v0, 0x3ea const-string v3, "wrong http function" const/4 v4, 0x0 invoke-virtual {p0, v0, v3, v4}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V move v0, v2 .line 255 goto/16 :goto_2 .line 257 :cond_a check-cast v0, Lorg/java_websocket/handshake/ClientHandshake; .line 258 iget-object v4, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v4, v0}, Lorg/java_websocket/drafts/Draft;->acceptHandshakeAsServer(Lorg/java_websocket/handshake/ClientHandshake;)Lorg/java_websocket/drafts/Draft$HandshakeState; move-result-object v4 .line 260 sget-object v5, Lorg/java_websocket/drafts/Draft$HandshakeState;->MATCHED:Lorg/java_websocket/drafts/Draft$HandshakeState; if-ne v4, v5, :cond_b .line 261 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->open(Lorg/java_websocket/handshake/Handshakedata;)V move v0, v3 .line 262 goto/16 :goto_2 .line 264 :cond_b const/16 v0, 0x3ea const-string v3, "the handshake did finaly not match" invoke-virtual {p0, v0, v3}, Lorg/java_websocket/WebSocketImpl;->close(ILjava/lang/String;)V move v0, v2 .line 266 goto/16 :goto_2 .line 268 :cond_c iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; sget-object v4, Lorg/java_websocket/WebSocket$Role;->CLIENT:Lorg/java_websocket/WebSocket$Role; if-ne v0, v4, :cond_3 .line 269 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; iget-object v4, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; invoke-virtual {v0, v4}, Lorg/java_websocket/drafts/Draft;->setParseMode(Lorg/java_websocket/WebSocket$Role;)V .line 270 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0, v1}, Lorg/java_websocket/drafts/Draft;->translateHandshake(Ljava/nio/ByteBuffer;)Lorg/java_websocket/handshake/Handshakedata; move-result-object v0 .line 271 instance-of v4, v0, Lorg/java_websocket/handshake/ServerHandshake; if-nez v4, :cond_d .line 272 const/16 v0, 0x3ea const-string v3, "wrong http function" const/4 v4, 0x0 invoke-virtual {p0, v0, v3, v4}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V move v0, v2 .line 273 goto/16 :goto_2 .line 275 :cond_d check-cast v0, Lorg/java_websocket/handshake/ServerHandshake; .line 276 iget-object v4, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; iget-object v5, p0, Lorg/java_websocket/WebSocketImpl;->handshakerequest:Lorg/java_websocket/handshake/ClientHandshake; invoke-virtual {v4, v5, v0}, Lorg/java_websocket/drafts/Draft;->acceptHandshakeAsClient(Lorg/java_websocket/handshake/ClientHandshake;Lorg/java_websocket/handshake/ServerHandshake;)Lorg/java_websocket/drafts/Draft$HandshakeState; move-result-object v4 .line 277 sget-object v5, Lorg/java_websocket/drafts/Draft$HandshakeState;->MATCHED:Lorg/java_websocket/drafts/Draft$HandshakeState; :try_end_7 .catch Lorg/java_websocket/exceptions/InvalidHandshakeException; {:try_start_7 .. :try_end_7} :catch_6 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_7 .. :try_end_7} :catch_1 if-ne v4, v5, :cond_e .line 279 :try_start_8 iget-object v4, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; iget-object v5, p0, Lorg/java_websocket/WebSocketImpl;->handshakerequest:Lorg/java_websocket/handshake/ClientHandshake; invoke-interface {v4, p0, v5, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketHandshakeReceivedAsClient(Lorg/java_websocket/WebSocket;Lorg/java_websocket/handshake/ClientHandshake;Lorg/java_websocket/handshake/ServerHandshake;)V :try_end_8 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_8 .. :try_end_8} :catch_4 .catch Ljava/lang/RuntimeException; {:try_start_8 .. :try_end_8} :catch_5 .catch Lorg/java_websocket/exceptions/InvalidHandshakeException; {:try_start_8 .. :try_end_8} :catch_6 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_8 .. :try_end_8} :catch_1 .line 288 :try_start_9 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->open(Lorg/java_websocket/handshake/Handshakedata;)V move v0, v3 .line 289 goto/16 :goto_2 .line 280 :catch_4 move-exception v0 .line 281 invoke-virtual {v0}, Lorg/java_websocket/exceptions/InvalidDataException;->getCloseCode()I move-result v3 invoke-virtual {v0}, Lorg/java_websocket/exceptions/InvalidDataException;->getMessage()Ljava/lang/String; move-result-object v0 const/4 v4, 0x0 invoke-virtual {p0, v3, v0, v4}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V move v0, v2 .line 282 goto/16 :goto_2 .line 283 :catch_5 move-exception v0 .line 284 iget-object v3, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v3, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V .line 285 const/4 v3, -0x1 invoke-virtual {v0}, Ljava/lang/RuntimeException;->getMessage()Ljava/lang/String; move-result-object v0 const/4 v4, 0x0 invoke-virtual {p0, v3, v0, v4}, Lorg/java_websocket/WebSocketImpl;->flushAndClose(ILjava/lang/String;Z)V move v0, v2 .line 286 goto/16 :goto_2 .line 291 :cond_e const/16 v0, 0x3ea new-instance v3, Ljava/lang/StringBuilder; invoke-direct {v3}, Ljava/lang/StringBuilder;->()V const-string v4, "draft " invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 iget-object v4, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 const-string v4, " refuses handshake" invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v3 invoke-virtual {p0, v0, v3}, Lorg/java_websocket/WebSocketImpl;->close(ILjava/lang/String;)V :try_end_9 .catch Lorg/java_websocket/exceptions/InvalidHandshakeException; {:try_start_9 .. :try_end_9} :catch_6 .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_9 .. :try_end_9} :catch_1 goto/16 :goto_3 .line 294 :catch_6 move-exception v0 .line 295 :try_start_a invoke-virtual {p0, v0}, Lorg/java_websocket/WebSocketImpl;->close(Lorg/java_websocket/exceptions/InvalidDataException;)V :try_end_a .catch Lorg/java_websocket/exceptions/IncompleteHandshakeException; {:try_start_a .. :try_end_a} :catch_1 goto/16 :goto_3 .line 304 :cond_f sget-boolean v4, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v4, :cond_2 invoke-virtual {v3}, Lorg/java_websocket/exceptions/IncompleteHandshakeException;->getPreferedSize()I move-result v3 invoke-virtual {v1}, Ljava/nio/ByteBuffer;->remaining()I move-result v1 if-ge v3, v1, :cond_2 new-instance v0, Ljava/lang/AssertionError; invoke-direct {v0}, Ljava/lang/AssertionError;->()V throw v0 .line 311 :cond_10 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v1}, Ljava/nio/ByteBuffer;->limit()I move-result v1 invoke-virtual {v0, v1}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer; .line 312 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v1}, Ljava/nio/ByteBuffer;->capacity()I move-result v1 invoke-virtual {v0, v1}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer; goto/16 :goto_3 .line 242 :catch_7 move-exception v0 goto/16 :goto_4 .end method .method private isFlashEdgeCase(Ljava/nio/ByteBuffer;)Lorg/java_websocket/drafts/Draft$HandshakeState; .locals 3 .prologue .line 596 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->mark()Ljava/nio/Buffer; .line 597 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I move-result v0 sget-object v1, Lorg/java_websocket/drafts/Draft;->FLASH_POLICY_REQUEST:[B array-length v1, v1 if-le v0, v1, :cond_0 .line 598 sget-object v0, Lorg/java_websocket/drafts/Draft$HandshakeState;->NOT_MATCHED:Lorg/java_websocket/drafts/Draft$HandshakeState; .line 609 :goto_0 return-object v0 .line 599 :cond_0 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I move-result v0 sget-object v1, Lorg/java_websocket/drafts/Draft;->FLASH_POLICY_REQUEST:[B array-length v1, v1 if-ge v0, v1, :cond_1 .line 600 new-instance v0, Lorg/java_websocket/exceptions/IncompleteHandshakeException; sget-object v1, Lorg/java_websocket/drafts/Draft;->FLASH_POLICY_REQUEST:[B array-length v1, v1 invoke-direct {v0, v1}, Lorg/java_websocket/exceptions/IncompleteHandshakeException;->(I)V throw v0 .line 603 :cond_1 const/4 v0, 0x0 :goto_1 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->hasRemaining()Z move-result v1 if-eqz v1, :cond_3 .line 604 sget-object v1, Lorg/java_websocket/drafts/Draft;->FLASH_POLICY_REQUEST:[B aget-byte v1, v1, v0 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->get()B move-result v2 if-eq v1, v2, :cond_2 .line 605 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->reset()Ljava/nio/Buffer; .line 606 sget-object v0, Lorg/java_websocket/drafts/Draft$HandshakeState;->NOT_MATCHED:Lorg/java_websocket/drafts/Draft$HandshakeState; goto :goto_0 .line 603 :cond_2 add-int/lit8 v0, v0, 0x1 goto :goto_1 .line 609 :cond_3 sget-object v0, Lorg/java_websocket/drafts/Draft$HandshakeState;->MATCHED:Lorg/java_websocket/drafts/Draft$HandshakeState; goto :goto_0 .end method .method private open(Lorg/java_websocket/handshake/Handshakedata;)V .locals 3 .prologue .line 659 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->DEBUG:Z if-eqz v0, :cond_0 .line 660 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;->()V const-string v2, "open using draft: " invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v1 iget-object v2, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v2}, Ljava/lang/Object;->getClass()Ljava/lang/Class; move-result-object v2 invoke-virtual {v2}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String; move-result-object v2 invoke-virtual {v1, v2}, 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-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V .line 661 :cond_0 sget-object v0, Lorg/java_websocket/WebSocket$READYSTATE;->OPEN:Lorg/java_websocket/WebSocket$READYSTATE; iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; .line 663 :try_start_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0, p0, p1}, Lorg/java_websocket/WebSocketListener;->onWebsocketOpen(Lorg/java_websocket/WebSocket;Lorg/java_websocket/handshake/Handshakedata;)V :try_end_0 .catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_0} :catch_0 .line 667 :goto_0 return-void .line 664 :catch_0 move-exception v0 .line 665 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V goto :goto_0 .end method .method private send(Ljava/util/Collection;)V .locals 2 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/util/Collection", "<", "Lorg/java_websocket/framing/Framedata;", ">;)V" } .end annotation .prologue .line 571 invoke-virtual {p0}, Lorg/java_websocket/WebSocketImpl;->isOpen()Z move-result v0 if-nez v0, :cond_0 .line 572 new-instance v0, Lorg/java_websocket/exceptions/WebsocketNotConnectedException; invoke-direct {v0}, Lorg/java_websocket/exceptions/WebsocketNotConnectedException;->()V throw v0 .line 573 :cond_0 invoke-interface {p1}, Ljava/util/Collection;->iterator()Ljava/util/Iterator; move-result-object v1 :goto_0 invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_1 invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Lorg/java_websocket/framing/Framedata; .line 574 invoke-virtual {p0, v0}, Lorg/java_websocket/WebSocketImpl;->sendFrame(Lorg/java_websocket/framing/Framedata;)V goto :goto_0 .line 576 :cond_1 return-void .end method .method private write(Ljava/nio/ByteBuffer;)V .locals 4 .prologue .line 638 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->DEBUG:Z if-eqz v0, :cond_0 .line 639 sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream; new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V const-string v2, "write(" invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I move-result v2 invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(I)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 v2 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I move-result v0 const/16 v3, 0x3e8 if-le v0, v3, :cond_1 const-string v0, "too big to display" :goto_0 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 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V .line 641 :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->outQueue:Ljava/util/concurrent/BlockingQueue; invoke-interface {v0, p1}, Ljava/util/concurrent/BlockingQueue;->add(Ljava/lang/Object;)Z .line 649 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0, p0}, Lorg/java_websocket/WebSocketListener;->onWriteDemand(Lorg/java_websocket/WebSocket;)V .line 650 return-void .line 639 :cond_1 new-instance v0, Ljava/lang/String; invoke-virtual {p1}, Ljava/nio/ByteBuffer;->array()[B move-result-object v3 invoke-direct {v0, v3}, Ljava/lang/String;->([B)V goto :goto_0 .end method .method private write(Ljava/util/List;)V .locals 2 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/util/List", "<", "Ljava/nio/ByteBuffer;", ">;)V" } .end annotation .prologue .line 653 invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v1 :goto_0 invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_0 invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/nio/ByteBuffer; .line 654 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->write(Ljava/nio/ByteBuffer;)V goto :goto_0 .line 656 :cond_0 return-void .end method # virtual methods .method public close()V .locals 1 .prologue .line 728 const/16 v0, 0x3e8 invoke-virtual {p0, v0}, Lorg/java_websocket/WebSocketImpl;->close(I)V .line 729 return-void .end method .method public close(I)V .locals 2 .prologue .line 532 const-string v0, "" const/4 v1, 0x0 invoke-direct {p0, p1, v0, v1}, Lorg/java_websocket/WebSocketImpl;->close(ILjava/lang/String;Z)V .line 533 return-void .end method .method public close(ILjava/lang/String;)V .locals 1 .prologue .line 438 const/4 v0, 0x0 invoke-direct {p0, p1, p2, v0}, Lorg/java_websocket/WebSocketImpl;->close(ILjava/lang/String;Z)V .line 439 return-void .end method .method public close(Lorg/java_websocket/exceptions/InvalidDataException;)V .locals 3 .prologue .line 536 invoke-virtual {p1}, Lorg/java_websocket/exceptions/InvalidDataException;->getCloseCode()I move-result v0 invoke-virtual {p1}, Lorg/java_websocket/exceptions/InvalidDataException;->getMessage()Ljava/lang/String; move-result-object v1 const/4 v2, 0x0 invoke-direct {p0, v0, v1, v2}, Lorg/java_websocket/WebSocketImpl;->close(ILjava/lang/String;Z)V .line 537 return-void .end method .method public closeConnection()V .locals 3 .prologue .line 482 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->closedremotely:Ljava/lang/Boolean; if-nez v0, :cond_0 .line 483 new-instance v0, Ljava/lang/IllegalStateException; const-string v1, "this method must be used in conjuction with flushAndClose" invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw v0 .line 485 :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->closecode:Ljava/lang/Integer; invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I move-result v0 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->closemessage:Ljava/lang/String; iget-object v2, p0, Lorg/java_websocket/WebSocketImpl;->closedremotely:Ljava/lang/Boolean; invoke-virtual {v2}, Ljava/lang/Boolean;->booleanValue()Z move-result v2 invoke-virtual {p0, v0, v1, v2}, Lorg/java_websocket/WebSocketImpl;->closeConnection(ILjava/lang/String;Z)V .line 486 return-void .end method .method public closeConnection(ILjava/lang/String;)V .locals 1 .prologue .line 489 const/4 v0, 0x0 invoke-virtual {p0, p1, p2, v0}, Lorg/java_websocket/WebSocketImpl;->closeConnection(ILjava/lang/String;Z)V .line 490 return-void .end method .method protected declared-synchronized closeConnection(ILjava/lang/String;Z)V .locals 2 .prologue .line 449 monitor-enter p0 :try_start_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->CLOSED:Lorg/java_websocket/WebSocket$READYSTATE; :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 if-ne v0, v1, :cond_0 .line 475 :goto_0 monitor-exit p0 return-void .line 453 :cond_0 :try_start_1 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->key:Ljava/nio/channels/SelectionKey; if-eqz v0, :cond_1 .line 455 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->key:Ljava/nio/channels/SelectionKey; invoke-virtual {v0}, Ljava/nio/channels/SelectionKey;->cancel()V .line 457 :cond_1 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->channel:Ljava/nio/channels/ByteChannel; :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 if-eqz v0, :cond_2 .line 459 :try_start_2 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->channel:Ljava/nio/channels/ByteChannel; invoke-interface {v0}, Ljava/nio/channels/ByteChannel;->close()V :try_end_2 .catch Ljava/io/IOException; {:try_start_2 .. :try_end_2} :catch_0 .catchall {:try_start_2 .. :try_end_2} :catchall_0 .line 465 :cond_2 :goto_1 :try_start_3 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0, p0, p1, p2, p3}, Lorg/java_websocket/WebSocketListener;->onWebsocketClose(Lorg/java_websocket/WebSocket;ILjava/lang/String;Z)V :try_end_3 .catch Ljava/lang/RuntimeException; {:try_start_3 .. :try_end_3} :catch_1 .catchall {:try_start_3 .. :try_end_3} :catchall_0 .line 469 :goto_2 :try_start_4 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; if-eqz v0, :cond_3 .line 470 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0}, Lorg/java_websocket/drafts/Draft;->reset()V .line 471 :cond_3 const/4 v0, 0x0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->handshakerequest:Lorg/java_websocket/handshake/ClientHandshake; .line 473 sget-object v0, Lorg/java_websocket/WebSocket$READYSTATE;->CLOSED:Lorg/java_websocket/WebSocket$READYSTATE; iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; .line 474 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->outQueue:Ljava/util/concurrent/BlockingQueue; invoke-interface {v0}, Ljava/util/concurrent/BlockingQueue;->clear()V :try_end_4 .catchall {:try_start_4 .. :try_end_4} :catchall_0 goto :goto_0 .line 449 :catchall_0 move-exception v0 monitor-exit p0 throw v0 .line 460 :catch_0 move-exception v0 .line 461 :try_start_5 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V goto :goto_1 .line 466 :catch_1 move-exception v0 .line 467 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V :try_end_5 .catchall {:try_start_5 .. :try_end_5} :catchall_0 goto :goto_2 .end method .method protected closeConnection(IZ)V .locals 1 .prologue .line 478 const-string v0, "" invoke-virtual {p0, p1, v0, p2}, Lorg/java_websocket/WebSocketImpl;->closeConnection(ILjava/lang/String;Z)V .line 479 return-void .end method .method public decode(Ljava/nio/ByteBuffer;)V .locals 6 .prologue .line 151 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v0, :cond_0 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->hasRemaining()Z move-result v0 if-nez v0, :cond_0 new-instance v0, Ljava/lang/AssertionError; invoke-direct {v0}, Ljava/lang/AssertionError;->()V throw v0 .line 153 :cond_0 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->DEBUG:Z if-eqz v0, :cond_1 .line 154 sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream; new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V const-string v2, "process(" invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I move-result v2 invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(I)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 v2 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I move-result v0 const/16 v3, 0x3e8 if-le v0, v3, :cond_3 const-string v0, "too big to display" :goto_0 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 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V .line 156 :cond_1 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->NOT_YET_CONNECTED:Lorg/java_websocket/WebSocket$READYSTATE; if-eq v0, v1, :cond_4 .line 157 invoke-direct {p0, p1}, Lorg/java_websocket/WebSocketImpl;->decodeFrames(Ljava/nio/ByteBuffer;)V .line 170 :cond_2 :goto_1 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v0, :cond_7 invoke-virtual {p0}, Lorg/java_websocket/WebSocketImpl;->isClosing()Z move-result v0 if-nez v0, :cond_7 invoke-virtual {p0}, Lorg/java_websocket/WebSocketImpl;->isFlushAndClose()Z move-result v0 if-nez v0, :cond_7 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->hasRemaining()Z move-result v0 if-eqz v0, :cond_7 new-instance v0, Ljava/lang/AssertionError; invoke-direct {v0}, Ljava/lang/AssertionError;->()V throw v0 .line 154 :cond_3 new-instance v0, Ljava/lang/String; invoke-virtual {p1}, Ljava/nio/ByteBuffer;->array()[B move-result-object v3 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->position()I move-result v4 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I move-result v5 invoke-direct {v0, v3, v4, v5}, Ljava/lang/String;->([BII)V goto :goto_0 .line 160 :cond_4 invoke-direct {p0, p1}, Lorg/java_websocket/WebSocketImpl;->decodeHandshake(Ljava/nio/ByteBuffer;)Z move-result v0 if-eqz v0, :cond_2 .line 161 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v0, :cond_5 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0}, Ljava/nio/ByteBuffer;->hasRemaining()Z move-result v0 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->hasRemaining()Z move-result v1 if-ne v0, v1, :cond_5 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->hasRemaining()Z move-result v0 if-eqz v0, :cond_5 new-instance v0, Ljava/lang/AssertionError; invoke-direct {v0}, Ljava/lang/AssertionError;->()V throw v0 .line 163 :cond_5 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->hasRemaining()Z move-result v0 if-eqz v0, :cond_6 .line 164 invoke-direct {p0, p1}, Lorg/java_websocket/WebSocketImpl;->decodeFrames(Ljava/nio/ByteBuffer;)V goto :goto_1 .line 165 :cond_6 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-virtual {v0}, Ljava/nio/ByteBuffer;->hasRemaining()Z move-result v0 if-eqz v0, :cond_2 .line 166 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->tmpHandshakeBytes:Ljava/nio/ByteBuffer; invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->decodeFrames(Ljava/nio/ByteBuffer;)V goto :goto_1 .line 171 :cond_7 return-void .end method .method public eot()V .locals 5 .prologue const/16 v4, 0x3ee const/16 v3, 0x3e8 const/4 v2, 0x1 .line 514 invoke-virtual {p0}, Lorg/java_websocket/WebSocketImpl;->getReadyState()Lorg/java_websocket/WebSocket$READYSTATE; move-result-object v0 sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->NOT_YET_CONNECTED:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v0, v1, :cond_0 .line 515 const/4 v0, -0x1 invoke-virtual {p0, v0, v2}, Lorg/java_websocket/WebSocketImpl;->closeConnection(IZ)V .line 528 :goto_0 return-void .line 516 :cond_0 iget-boolean v0, p0, Lorg/java_websocket/WebSocketImpl;->flushandclosestate:Z if-eqz v0, :cond_1 .line 517 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->closecode:Ljava/lang/Integer; invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I move-result v0 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->closemessage:Ljava/lang/String; iget-object v2, p0, Lorg/java_websocket/WebSocketImpl;->closedremotely:Ljava/lang/Boolean; invoke-virtual {v2}, Ljava/lang/Boolean;->booleanValue()Z move-result v2 invoke-virtual {p0, v0, v1, v2}, Lorg/java_websocket/WebSocketImpl;->closeConnection(ILjava/lang/String;Z)V goto :goto_0 .line 518 :cond_1 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0}, Lorg/java_websocket/drafts/Draft;->getCloseHandshakeType()Lorg/java_websocket/drafts/Draft$CloseHandshakeType; move-result-object v0 sget-object v1, Lorg/java_websocket/drafts/Draft$CloseHandshakeType;->NONE:Lorg/java_websocket/drafts/Draft$CloseHandshakeType; if-ne v0, v1, :cond_2 .line 519 invoke-virtual {p0, v3, v2}, Lorg/java_websocket/WebSocketImpl;->closeConnection(IZ)V goto :goto_0 .line 520 :cond_2 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0}, Lorg/java_websocket/drafts/Draft;->getCloseHandshakeType()Lorg/java_websocket/drafts/Draft$CloseHandshakeType; move-result-object v0 sget-object v1, Lorg/java_websocket/drafts/Draft$CloseHandshakeType;->ONEWAY:Lorg/java_websocket/drafts/Draft$CloseHandshakeType; if-ne v0, v1, :cond_4 .line 521 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; sget-object v1, Lorg/java_websocket/WebSocket$Role;->SERVER:Lorg/java_websocket/WebSocket$Role; if-ne v0, v1, :cond_3 .line 522 invoke-virtual {p0, v4, v2}, Lorg/java_websocket/WebSocketImpl;->closeConnection(IZ)V goto :goto_0 .line 524 :cond_3 invoke-virtual {p0, v3, v2}, Lorg/java_websocket/WebSocketImpl;->closeConnection(IZ)V goto :goto_0 .line 526 :cond_4 invoke-virtual {p0, v4, v2}, Lorg/java_websocket/WebSocketImpl;->closeConnection(IZ)V goto :goto_0 .end method .method protected declared-synchronized flushAndClose(ILjava/lang/String;Z)V .locals 2 .prologue .line 493 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Lorg/java_websocket/WebSocketImpl;->flushandclosestate:Z :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 if-eqz v0, :cond_0 .line 511 :goto_0 monitor-exit p0 return-void .line 496 :cond_0 :try_start_1 invoke-static {p1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->closecode:Ljava/lang/Integer; .line 497 iput-object p2, p0, Lorg/java_websocket/WebSocketImpl;->closemessage:Ljava/lang/String; .line 498 invoke-static {p3}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean; move-result-object v0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->closedremotely:Ljava/lang/Boolean; .line 500 const/4 v0, 0x1 iput-boolean v0, p0, Lorg/java_websocket/WebSocketImpl;->flushandclosestate:Z .line 502 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0, p0}, Lorg/java_websocket/WebSocketListener;->onWriteDemand(Lorg/java_websocket/WebSocket;)V :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 .line 504 :try_start_2 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0, p0, p1, p2, p3}, Lorg/java_websocket/WebSocketListener;->onWebsocketClosing(Lorg/java_websocket/WebSocket;ILjava/lang/String;Z)V :try_end_2 .catch Ljava/lang/RuntimeException; {:try_start_2 .. :try_end_2} :catch_0 .catchall {:try_start_2 .. :try_end_2} :catchall_0 .line 508 :goto_1 :try_start_3 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; if-eqz v0, :cond_1 .line 509 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0}, Lorg/java_websocket/drafts/Draft;->reset()V .line 510 :cond_1 const/4 v0, 0x0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->handshakerequest:Lorg/java_websocket/handshake/ClientHandshake; :try_end_3 .catchall {:try_start_3 .. :try_end_3} :catchall_0 goto :goto_0 .line 493 :catchall_0 move-exception v0 monitor-exit p0 throw v0 .line 505 :catch_0 move-exception v0 .line 506 :try_start_4 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V :try_end_4 .catchall {:try_start_4 .. :try_end_4} :catchall_0 goto :goto_1 .end method .method public getDraft()Lorg/java_websocket/drafts/Draft; .locals 1 .prologue .line 723 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; return-object v0 .end method .method public getLocalSocketAddress()Ljava/net/InetSocketAddress; .locals 1 .prologue .line 718 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0, p0}, Lorg/java_websocket/WebSocketListener;->getLocalSocketAddress(Lorg/java_websocket/WebSocket;)Ljava/net/InetSocketAddress; move-result-object v0 return-object v0 .end method .method public getReadyState()Lorg/java_websocket/WebSocket$READYSTATE; .locals 1 .prologue .line 698 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; return-object v0 .end method .method public getRemoteSocketAddress()Ljava/net/InetSocketAddress; .locals 1 .prologue .line 713 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v0, p0}, Lorg/java_websocket/WebSocketListener;->getRemoteSocketAddress(Lorg/java_websocket/WebSocket;)Ljava/net/InetSocketAddress; move-result-object v0 return-object v0 .end method .method public getResourceDescriptor()Ljava/lang/String; .locals 1 .prologue .line 733 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->resourceDescriptor:Ljava/lang/String; return-object v0 .end method .method public hasBufferedData()Z .locals 1 .prologue .line 592 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->outQueue:Ljava/util/concurrent/BlockingQueue; invoke-interface {v0}, Ljava/util/concurrent/BlockingQueue;->isEmpty()Z move-result v0 if-nez v0, :cond_0 const/4 v0, 0x1 :goto_0 return v0 :cond_0 const/4 v0, 0x0 goto :goto_0 .end method .method public hashCode()I .locals 1 .prologue .line 703 invoke-super {p0}, Ljava/lang/Object;->hashCode()I move-result v0 return v0 .end method .method public isClosed()Z .locals 2 .prologue .line 693 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->CLOSED:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v0, v1, :cond_0 const/4 v0, 0x1 :goto_0 return v0 :cond_0 const/4 v0, 0x0 goto :goto_0 .end method .method public isClosing()Z .locals 2 .prologue .line 683 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->CLOSING:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v0, v1, :cond_0 const/4 v0, 0x1 :goto_0 return v0 :cond_0 const/4 v0, 0x0 goto :goto_0 .end method .method public isConnecting()Z .locals 2 .prologue .line 671 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v0, :cond_0 iget-boolean v0, p0, Lorg/java_websocket/WebSocketImpl;->flushandclosestate:Z if-eqz v0, :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->CONNECTING:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v0, v1, :cond_1 .line 672 :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->CONNECTING:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v0, v1, :cond_2 const/4 v0, 0x1 :goto_0 return v0 .line 671 :cond_1 new-instance v0, Ljava/lang/AssertionError; invoke-direct {v0}, Ljava/lang/AssertionError;->()V throw v0 .line 672 :cond_2 const/4 v0, 0x0 goto :goto_0 .end method .method public isFlushAndClose()Z .locals 1 .prologue .line 688 iget-boolean v0, p0, Lorg/java_websocket/WebSocketImpl;->flushandclosestate:Z return v0 .end method .method public isOpen()Z .locals 2 .prologue .line 677 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v0, :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->OPEN:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v0, v1, :cond_0 iget-boolean v0, p0, Lorg/java_websocket/WebSocketImpl;->flushandclosestate:Z if-nez v0, :cond_1 .line 678 :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->OPEN:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v0, v1, :cond_2 const/4 v0, 0x1 :goto_0 return v0 .line 677 :cond_1 new-instance v0, Ljava/lang/AssertionError; invoke-direct {v0}, Ljava/lang/AssertionError;->()V throw v0 .line 678 :cond_2 const/4 v0, 0x0 goto :goto_0 .end method .method public send(Ljava/lang/String;)V .locals 3 .prologue .line 547 if-nez p1, :cond_0 .line 548 new-instance v0, Ljava/lang/IllegalArgumentException; const-string v1, "Cannot send \'null\' data to a WebSocketImpl." invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw v0 .line 549 :cond_0 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; sget-object v2, Lorg/java_websocket/WebSocket$Role;->CLIENT:Lorg/java_websocket/WebSocket$Role; if-ne v0, v2, :cond_1 const/4 v0, 0x1 :goto_0 invoke-virtual {v1, p1, v0}, Lorg/java_websocket/drafts/Draft;->createFrames(Ljava/lang/String;Z)Ljava/util/List; move-result-object v0 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->send(Ljava/util/Collection;)V .line 550 return-void .line 549 :cond_1 const/4 v0, 0x0 goto :goto_0 .end method .method public send(Ljava/nio/ByteBuffer;)V .locals 3 .prologue .line 560 if-nez p1, :cond_0 .line 561 new-instance v0, Ljava/lang/IllegalArgumentException; const-string v1, "Cannot send \'null\' data to a WebSocketImpl." invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw v0 .line 562 :cond_0 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; sget-object v2, Lorg/java_websocket/WebSocket$Role;->CLIENT:Lorg/java_websocket/WebSocket$Role; if-ne v0, v2, :cond_1 const/4 v0, 0x1 :goto_0 invoke-virtual {v1, p1, v0}, Lorg/java_websocket/drafts/Draft;->createFrames(Ljava/nio/ByteBuffer;Z)Ljava/util/List; move-result-object v0 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->send(Ljava/util/Collection;)V .line 563 return-void .line 562 :cond_1 const/4 v0, 0x0 goto :goto_0 .end method .method public send([B)V .locals 1 .prologue .line 567 invoke-static {p1}, Ljava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer; move-result-object v0 invoke-virtual {p0, v0}, Lorg/java_websocket/WebSocketImpl;->send(Ljava/nio/ByteBuffer;)V .line 568 return-void .end method .method public sendFragmentedFrame(Lorg/java_websocket/framing/Framedata$Opcode;Ljava/nio/ByteBuffer;Z)V .locals 1 .prologue .line 580 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0, p1, p2, p3}, Lorg/java_websocket/drafts/Draft;->continuousFrame(Lorg/java_websocket/framing/Framedata$Opcode;Ljava/nio/ByteBuffer;Z)Ljava/util/List; move-result-object v0 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->send(Ljava/util/Collection;)V .line 581 return-void .end method .method public sendFrame(Lorg/java_websocket/framing/Framedata;)V .locals 3 .prologue .line 585 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->DEBUG:Z if-eqz v0, :cond_0 .line 586 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;->()V const-string v2, "send frame: " invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V .line 587 :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0, p1}, Lorg/java_websocket/drafts/Draft;->createBinaryFrame(Lorg/java_websocket/framing/Framedata;)Ljava/nio/ByteBuffer; move-result-object v0 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->write(Ljava/nio/ByteBuffer;)V .line 588 return-void .end method .method public startHandshake(Lorg/java_websocket/handshake/ClientHandshakeBuilder;)V .locals 4 .prologue .line 614 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v0, :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->readystate:Lorg/java_websocket/WebSocket$READYSTATE; sget-object v1, Lorg/java_websocket/WebSocket$READYSTATE;->CONNECTING:Lorg/java_websocket/WebSocket$READYSTATE; if-ne v0, v1, :cond_0 new-instance v0, Ljava/lang/AssertionError; const-string v1, "shall only be called once" invoke-direct {v0, v1}, Ljava/lang/AssertionError;->(Ljava/lang/Object;)V throw v0 .line 617 :cond_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; invoke-virtual {v0, p1}, Lorg/java_websocket/drafts/Draft;->postProcessHandshakeRequestAsClient(Lorg/java_websocket/handshake/ClientHandshakeBuilder;)Lorg/java_websocket/handshake/ClientHandshakeBuilder; move-result-object v0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->handshakerequest:Lorg/java_websocket/handshake/ClientHandshake; .line 619 invoke-interface {p1}, Lorg/java_websocket/handshake/ClientHandshakeBuilder;->getResourceDescriptor()Ljava/lang/String; move-result-object v0 iput-object v0, p0, Lorg/java_websocket/WebSocketImpl;->resourceDescriptor:Ljava/lang/String; .line 620 sget-boolean v0, Lorg/java_websocket/WebSocketImpl;->$assertionsDisabled:Z if-nez v0, :cond_1 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->resourceDescriptor:Ljava/lang/String; if-nez v0, :cond_1 new-instance v0, Ljava/lang/AssertionError; invoke-direct {v0}, Ljava/lang/AssertionError;->()V throw v0 .line 624 :cond_1 :try_start_0 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->handshakerequest:Lorg/java_websocket/handshake/ClientHandshake; invoke-interface {v0, p0, v1}, Lorg/java_websocket/WebSocketListener;->onWebsocketHandshakeSentAsClient(Lorg/java_websocket/WebSocket;Lorg/java_websocket/handshake/ClientHandshake;)V :try_end_0 .catch Lorg/java_websocket/exceptions/InvalidDataException; {:try_start_0 .. :try_end_0} :catch_0 .catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_0} :catch_1 .line 634 iget-object v0, p0, Lorg/java_websocket/WebSocketImpl;->draft:Lorg/java_websocket/drafts/Draft; iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->handshakerequest:Lorg/java_websocket/handshake/ClientHandshake; iget-object v2, p0, Lorg/java_websocket/WebSocketImpl;->role:Lorg/java_websocket/WebSocket$Role; invoke-virtual {v0, v1, v2}, Lorg/java_websocket/drafts/Draft;->createHandshake(Lorg/java_websocket/handshake/Handshakedata;Lorg/java_websocket/WebSocket$Role;)Ljava/util/List; move-result-object v0 invoke-direct {p0, v0}, Lorg/java_websocket/WebSocketImpl;->write(Ljava/util/List;)V .line 635 return-void .line 625 :catch_0 move-exception v0 .line 627 new-instance v0, Lorg/java_websocket/exceptions/InvalidHandshakeException; const-string v1, "Handshake data rejected by client." invoke-direct {v0, v1}, Lorg/java_websocket/exceptions/InvalidHandshakeException;->(Ljava/lang/String;)V throw v0 .line 628 :catch_1 move-exception v0 .line 629 iget-object v1, p0, Lorg/java_websocket/WebSocketImpl;->wsl:Lorg/java_websocket/WebSocketListener; invoke-interface {v1, p0, v0}, Lorg/java_websocket/WebSocketListener;->onWebsocketError(Lorg/java_websocket/WebSocket;Ljava/lang/Exception;)V .line 630 new-instance v1, Lorg/java_websocket/exceptions/InvalidHandshakeException; new-instance v2, Ljava/lang/StringBuilder; invoke-direct {v2}, Ljava/lang/StringBuilder;->()V const-string v3, "rejected because of" 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/Object;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 invoke-direct {v1, v0}, Lorg/java_websocket/exceptions/InvalidHandshakeException;->(Ljava/lang/String;)V throw v1 .end method .method public toString()Ljava/lang/String; .locals 1 .prologue .line 708 invoke-super {p0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 return-object v0 .end method