public class org.apache.cassandra.streaming.ConnectionHandler
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.cassandra.streaming.ConnectionHandler
  super_class: java.lang.Object
{
  private static final org.slf4j.Logger logger;
    descriptor: Lorg/slf4j/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final org.apache.cassandra.streaming.StreamSession session;
    descriptor: Lorg/apache/cassandra/streaming/StreamSession;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler incoming;
    descriptor: Lorg/apache/cassandra/streaming/ConnectionHandler$IncomingMessageHandler;
    flags: (0x0002) ACC_PRIVATE

  private org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler outgoing;
    descriptor: Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
    flags: (0x0002) ACC_PRIVATE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 61
            ldc Lorg/apache/cassandra/streaming/ConnectionHandler;
            invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
            putstatic org.apache.cassandra.streaming.ConnectionHandler.logger:Lorg/slf4j/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(org.apache.cassandra.streaming.StreamSession, int);
    descriptor: (Lorg/apache/cassandra/streaming/StreamSession;I)V
    flags: (0x0000) 
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler this
        start local 1 // org.apache.cassandra.streaming.StreamSession session
        start local 2 // int incomingSocketTimeout
         0: .line 68
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 70
            aload 0 /* this */
            aload 1 /* session */
            putfield org.apache.cassandra.streaming.ConnectionHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
         2: .line 71
            aload 0 /* this */
            new org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler
            dup
            aload 1 /* session */
            iload 2 /* incomingSocketTimeout */
            invokespecial org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.<init>:(Lorg/apache/cassandra/streaming/StreamSession;I)V
            putfield org.apache.cassandra.streaming.ConnectionHandler.incoming:Lorg/apache/cassandra/streaming/ConnectionHandler$IncomingMessageHandler;
         3: .line 72
            aload 0 /* this */
            new org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler
            dup
            aload 1 /* session */
            invokespecial org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.<init>:(Lorg/apache/cassandra/streaming/StreamSession;)V
            putfield org.apache.cassandra.streaming.ConnectionHandler.outgoing:Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
         4: .line 73
            return
        end local 2 // int incomingSocketTimeout
        end local 1 // org.apache.cassandra.streaming.StreamSession session
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    5     0                   this  Lorg/apache/cassandra/streaming/ConnectionHandler;
            0    5     1                session  Lorg/apache/cassandra/streaming/StreamSession;
            0    5     2  incomingSocketTimeout  I
    MethodParameters:
                       Name  Flags
      session                
      incomingSocketTimeout  

  public void initiate();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler this
         0: .line 85
            getstatic org.apache.cassandra.streaming.ConnectionHandler.logger:Lorg/slf4j/Logger;
            ldc "[Stream #{}] Sending stream init for incoming stream"
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.planId:()Ljava/util/UUID;
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;Ljava/lang/Object;)V
         1: .line 86
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.createConnection:()Ljava/net/Socket;
            astore 1 /* incomingSocket */
        start local 1 // java.net.Socket incomingSocket
         2: .line 87
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.incoming:Lorg/apache/cassandra/streaming/ConnectionHandler$IncomingMessageHandler;
            aload 1 /* incomingSocket */
            iconst_4
            iconst_1
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.start:(Ljava/net/Socket;IZ)V
         3: .line 89
            getstatic org.apache.cassandra.streaming.ConnectionHandler.logger:Lorg/slf4j/Logger;
            ldc "[Stream #{}] Sending stream init for outgoing stream"
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.planId:()Ljava/util/UUID;
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;Ljava/lang/Object;)V
         4: .line 90
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.createConnection:()Ljava/net/Socket;
            astore 2 /* outgoingSocket */
        start local 2 // java.net.Socket outgoingSocket
         5: .line 91
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.outgoing:Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            aload 2 /* outgoingSocket */
            iconst_4
            iconst_1
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.start:(Ljava/net/Socket;IZ)V
         6: .line 92
            return
        end local 2 // java.net.Socket outgoingSocket
        end local 1 // java.net.Socket incomingSocket
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    7     0            this  Lorg/apache/cassandra/streaming/ConnectionHandler;
            2    7     1  incomingSocket  Ljava/net/Socket;
            5    7     2  outgoingSocket  Ljava/net/Socket;
    Exceptions:
      throws java.io.IOException

  public void initiateOnReceivingSide(org.apache.cassandra.net.IncomingStreamingConnection, boolean, int);
    descriptor: (Lorg/apache/cassandra/net/IncomingStreamingConnection;ZI)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler this
        start local 1 // org.apache.cassandra.net.IncomingStreamingConnection connection
        start local 2 // boolean isForOutgoing
        start local 3 // int version
         0: .line 103
            iload 2 /* isForOutgoing */
            ifeq 2
         1: .line 104
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.outgoing:Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            aload 1 /* connection */
            iload 3 /* version */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.start:(Lorg/apache/cassandra/net/IncomingStreamingConnection;I)V
            goto 3
         2: .line 106
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.incoming:Lorg/apache/cassandra/streaming/ConnectionHandler$IncomingMessageHandler;
            aload 1 /* connection */
            iload 3 /* version */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.start:(Lorg/apache/cassandra/net/IncomingStreamingConnection;I)V
         3: .line 107
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int version
        end local 2 // boolean isForOutgoing
        end local 1 // org.apache.cassandra.net.IncomingStreamingConnection connection
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lorg/apache/cassandra/streaming/ConnectionHandler;
            0    4     1     connection  Lorg/apache/cassandra/net/IncomingStreamingConnection;
            0    4     2  isForOutgoing  Z
            0    4     3        version  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
               Name  Flags
      connection     
      isForOutgoing  
      version        

  public com.google.common.util.concurrent.ListenableFuture<?> close();
    descriptor: ()Lcom/google/common/util/concurrent/ListenableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler this
         0: .line 111
            getstatic org.apache.cassandra.streaming.ConnectionHandler.logger:Lorg/slf4j/Logger;
            ldc "[Stream #{}] Closing stream connection handler on {}"
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.planId:()Ljava/util/UUID;
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            getfield org.apache.cassandra.streaming.StreamSession.peer:Ljava/net/InetAddress;
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         1: .line 113
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler.closeIncoming:()Lcom/google/common/util/concurrent/ListenableFuture;
            astore 1 /* inClosed */
        start local 1 // com.google.common.util.concurrent.ListenableFuture inClosed
         2: .line 114
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler.closeOutgoing:()Lcom/google/common/util/concurrent/ListenableFuture;
            astore 2 /* outClosed */
        start local 2 // com.google.common.util.concurrent.ListenableFuture outClosed
         3: .line 116
            iconst_2
            anewarray com.google.common.util.concurrent.ListenableFuture
            dup
            iconst_0
            aload 1 /* inClosed */
            aastore
            dup
            iconst_1
            aload 2 /* outClosed */
            aastore
            invokestatic com.google.common.util.concurrent.Futures.allAsList:([Lcom/google/common/util/concurrent/ListenableFuture;)Lcom/google/common/util/concurrent/ListenableFuture;
            areturn
        end local 2 // com.google.common.util.concurrent.ListenableFuture outClosed
        end local 1 // com.google.common.util.concurrent.ListenableFuture inClosed
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       this  Lorg/apache/cassandra/streaming/ConnectionHandler;
            2    4     1   inClosed  Lcom/google/common/util/concurrent/ListenableFuture<*>;
            3    4     2  outClosed  Lcom/google/common/util/concurrent/ListenableFuture<*>;
    Signature: ()Lcom/google/common/util/concurrent/ListenableFuture<*>;

  public com.google.common.util.concurrent.ListenableFuture<?> closeOutgoing();
    descriptor: ()Lcom/google/common/util/concurrent/ListenableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler this
         0: .line 121
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.outgoing:Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            ifnonnull 1
            aconst_null
            invokestatic com.google.common.util.concurrent.Futures.immediateFuture:(Ljava/lang/Object;)Lcom/google/common/util/concurrent/ListenableFuture;
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.outgoing:Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.close:()Lcom/google/common/util/concurrent/ListenableFuture;
      StackMap locals:
      StackMap stack: com.google.common.util.concurrent.ListenableFuture
         2: areturn
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/cassandra/streaming/ConnectionHandler;
    Signature: ()Lcom/google/common/util/concurrent/ListenableFuture<*>;

  public com.google.common.util.concurrent.ListenableFuture<?> closeIncoming();
    descriptor: ()Lcom/google/common/util/concurrent/ListenableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler this
         0: .line 126
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.incoming:Lorg/apache/cassandra/streaming/ConnectionHandler$IncomingMessageHandler;
            ifnonnull 1
            aconst_null
            invokestatic com.google.common.util.concurrent.Futures.immediateFuture:(Ljava/lang/Object;)Lcom/google/common/util/concurrent/ListenableFuture;
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.incoming:Lorg/apache/cassandra/streaming/ConnectionHandler$IncomingMessageHandler;
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.close:()Lcom/google/common/util/concurrent/ListenableFuture;
      StackMap locals:
      StackMap stack: com.google.common.util.concurrent.ListenableFuture
         2: areturn
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/cassandra/streaming/ConnectionHandler;
    Signature: ()Lcom/google/common/util/concurrent/ListenableFuture<*>;

  public void sendMessages(java.util.Collection<? extends org.apache.cassandra.streaming.messages.StreamMessage>);
    descriptor: (Ljava/util/Collection;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler this
        start local 1 // java.util.Collection messages
         0: .line 136
            aload 1 /* messages */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 3
            goto 3
      StackMap locals: org.apache.cassandra.streaming.ConnectionHandler java.util.Collection top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.streaming.messages.StreamMessage
            astore 2 /* message */
        start local 2 // org.apache.cassandra.streaming.messages.StreamMessage message
         2: .line 137
            aload 0 /* this */
            aload 2 /* message */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler.sendMessage:(Lorg/apache/cassandra/streaming/messages/StreamMessage;)V
        end local 2 // org.apache.cassandra.streaming.messages.StreamMessage message
         3: .line 136
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 138
            return
        end local 1 // java.util.Collection messages
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Lorg/apache/cassandra/streaming/ConnectionHandler;
            0    5     1  messages  Ljava/util/Collection<+Lorg/apache/cassandra/streaming/messages/StreamMessage;>;
            2    3     2   message  Lorg/apache/cassandra/streaming/messages/StreamMessage;
    Signature: (Ljava/util/Collection<+Lorg/apache/cassandra/streaming/messages/StreamMessage;>;)V
    MethodParameters:
          Name  Flags
      messages  

  public void sendMessage(org.apache.cassandra.streaming.messages.StreamMessage);
    descriptor: (Lorg/apache/cassandra/streaming/messages/StreamMessage;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler this
        start local 1 // org.apache.cassandra.streaming.messages.StreamMessage message
         0: .line 142
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.outgoing:Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.isClosed:()Z
            ifeq 2
         1: .line 143
            new java.lang.RuntimeException
            dup
            ldc "Outgoing stream handler has been closed"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 145
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.outgoing:Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            aload 1 /* message */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.enqueue:(Lorg/apache/cassandra/streaming/messages/StreamMessage;)V
         3: .line 146
            return
        end local 1 // org.apache.cassandra.streaming.messages.StreamMessage message
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lorg/apache/cassandra/streaming/ConnectionHandler;
            0    4     1  message  Lorg/apache/cassandra/streaming/messages/StreamMessage;
    MethodParameters:
         Name  Flags
      message  

  public boolean isOutgoingConnected();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler this
         0: .line 153
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.outgoing:Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            ifnull 1
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler.outgoing:Lorg/apache/cassandra/streaming/ConnectionHandler$OutgoingMessageHandler;
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.isClosed:()Z
            ifne 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/cassandra/streaming/ConnectionHandler;
}
SourceFile: "ConnectionHandler.java"
NestMembers:
  org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler  org.apache.cassandra.streaming.ConnectionHandler$MessageHandler  org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler  org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler$1
InnerClasses:
  IncomingMessageHandler = org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler of org.apache.cassandra.streaming.ConnectionHandler
  abstract MessageHandler = org.apache.cassandra.streaming.ConnectionHandler$MessageHandler of org.apache.cassandra.streaming.ConnectionHandler
  OutgoingMessageHandler = org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler of org.apache.cassandra.streaming.ConnectionHandler