abstract class org.apache.cassandra.streaming.ConnectionHandler$MessageHandler implements java.lang.Runnable
  minor version: 0
  major version: 59
  flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
  this_class: org.apache.cassandra.streaming.ConnectionHandler$MessageHandler
  super_class: java.lang.Object
{
  protected final org.apache.cassandra.streaming.StreamSession session;
    descriptor: Lorg/apache/cassandra/streaming/StreamSession;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected int protocolVersion;
    descriptor: I
    flags: (0x0004) ACC_PROTECTED

  private final boolean isOutgoingHandler;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  protected java.net.Socket socket;
    descriptor: Ljava/net/Socket;
    flags: (0x0004) ACC_PROTECTED

  private final java.util.concurrent.atomic.AtomicReference<com.google.common.util.concurrent.SettableFuture<?>> closeFuture;
    descriptor: Ljava/util/concurrent/atomic/AtomicReference;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/atomic/AtomicReference<Lcom/google/common/util/concurrent/SettableFuture<*>;>;

  private org.apache.cassandra.net.IncomingStreamingConnection incomingConnection;
    descriptor: Lorg/apache/cassandra/net/IncomingStreamingConnection;
    flags: (0x0002) ACC_PRIVATE

  protected void <init>(org.apache.cassandra.streaming.StreamSession, boolean);
    descriptor: (Lorg/apache/cassandra/streaming/StreamSession;Z)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
        start local 1 // org.apache.cassandra.streaming.StreamSession session
        start local 2 // boolean isOutgoingHandler
         0: .line 167
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 164
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicReference
            dup
            invokespecial java.util.concurrent.atomic.AtomicReference.<init>:()V
            putfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.closeFuture:Ljava/util/concurrent/atomic/AtomicReference;
         2: .line 169
            aload 0 /* this */
            aload 1 /* session */
            putfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
         3: .line 170
            aload 0 /* this */
            iload 2 /* isOutgoingHandler */
            putfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.isOutgoingHandler:Z
         4: .line 171
            return
        end local 2 // boolean isOutgoingHandler
        end local 1 // org.apache.cassandra.streaming.StreamSession session
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    5     0               this  Lorg/apache/cassandra/streaming/ConnectionHandler$MessageHandler;
            0    5     1            session  Lorg/apache/cassandra/streaming/StreamSession;
            0    5     2  isOutgoingHandler  Z
    MethodParameters:
                   Name  Flags
      session            
      isOutgoingHandler  

  protected abstract java.lang.String name();
    descriptor: ()Ljava/lang/String;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  protected static org.apache.cassandra.io.util.DataOutputStreamPlus getWriteChannel(java.net.Socket);
    descriptor: (Ljava/net/Socket;)Lorg/apache/cassandra/io/util/DataOutputStreamPlus;
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // java.net.Socket socket
         0: .line 178
            aload 0 /* socket */
            invokevirtual java.net.Socket.getChannel:()Ljava/nio/channels/SocketChannel;
            astore 1 /* out */
        start local 1 // java.nio.channels.WritableByteChannel out
         1: .line 180
            aload 1 /* out */
            ifnonnull 3
         2: .line 181
            new org.apache.cassandra.io.util.WrappedDataOutputStreamPlus
            dup
            new java.io.BufferedOutputStream
            dup
            aload 0 /* socket */
            invokevirtual java.net.Socket.getOutputStream:()Ljava/io/OutputStream;
            invokespecial java.io.BufferedOutputStream.<init>:(Ljava/io/OutputStream;)V
            invokespecial org.apache.cassandra.io.util.WrappedDataOutputStreamPlus.<init>:(Ljava/io/OutputStream;)V
            areturn
         3: .line 182
      StackMap locals: java.nio.channels.WritableByteChannel
      StackMap stack:
            new org.apache.cassandra.io.util.BufferedDataOutputStreamPlus
            dup
            aload 1 /* out */
            invokespecial org.apache.cassandra.io.util.BufferedDataOutputStreamPlus.<init>:(Ljava/nio/channels/WritableByteChannel;)V
            areturn
        end local 1 // java.nio.channels.WritableByteChannel out
        end local 0 // java.net.Socket socket
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    4     0  socket  Ljava/net/Socket;
            1    4     1     out  Ljava/nio/channels/WritableByteChannel;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
        Name  Flags
      socket  

  protected static java.nio.channels.ReadableByteChannel getReadChannel(java.net.Socket);
    descriptor: (Ljava/net/Socket;)Ljava/nio/channels/ReadableByteChannel;
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.net.Socket socket
         0: .line 188
            aload 0 /* socket */
            invokevirtual java.net.Socket.getInputStream:()Ljava/io/InputStream;
            invokestatic java.nio.channels.Channels.newChannel:(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;
            areturn
        end local 0 // java.net.Socket socket
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  socket  Ljava/net/Socket;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
        Name  Flags
      socket  

  private void sendInitMessage();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=9, locals=4, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
         0: .line 194
            new org.apache.cassandra.streaming.messages.StreamInitMessage
            dup
         1: .line 195
            invokestatic org.apache.cassandra.utils.FBUtilities.getBroadcastAddress:()Ljava/net/InetAddress;
         2: .line 196
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.sessionIndex:()I
         3: .line 197
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.planId:()Ljava/util/UUID;
         4: .line 198
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.description:()Ljava/lang/String;
         5: .line 199
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.isOutgoingHandler:Z
            ifeq 6
            iconst_0
            goto 7
      StackMap locals: org.apache.cassandra.streaming.ConnectionHandler$MessageHandler
      StackMap stack: new 0 new 0 java.net.InetAddress int java.util.UUID java.lang.String
         6: iconst_1
         7: .line 200
      StackMap locals: org.apache.cassandra.streaming.ConnectionHandler$MessageHandler
      StackMap stack: new 0 new 0 java.net.InetAddress int java.util.UUID java.lang.String int
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.keepSSTableLevel:()Z
         8: .line 201
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.session:Lorg/apache/cassandra/streaming/StreamSession;
            invokevirtual org.apache.cassandra.streaming.StreamSession.isIncremental:()Z
         9: .line 194
            invokespecial org.apache.cassandra.streaming.messages.StreamInitMessage.<init>:(Ljava/net/InetAddress;ILjava/util/UUID;Ljava/lang/String;ZZZ)V
            astore 1 /* message */
        start local 1 // org.apache.cassandra.streaming.messages.StreamInitMessage message
        10: .line 202
            aload 1 /* message */
            iconst_0
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.protocolVersion:I
            invokevirtual org.apache.cassandra.streaming.messages.StreamInitMessage.createMessage:(ZI)Ljava/nio/ByteBuffer;
            astore 2 /* messageBuf */
        start local 2 // java.nio.ByteBuffer messageBuf
        11: .line 203
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.socket:Ljava/net/Socket;
            invokestatic org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.getWriteChannel:(Ljava/net/Socket;)Lorg/apache/cassandra/io/util/DataOutputStreamPlus;
            astore 3 /* out */
        start local 3 // org.apache.cassandra.io.util.DataOutputStreamPlus out
        12: .line 204
            aload 3 /* out */
            aload 2 /* messageBuf */
            invokevirtual org.apache.cassandra.io.util.DataOutputStreamPlus.write:(Ljava/nio/ByteBuffer;)V
        13: .line 205
            aload 3 /* out */
            invokevirtual org.apache.cassandra.io.util.DataOutputStreamPlus.flush:()V
        14: .line 206
            return
        end local 3 // org.apache.cassandra.io.util.DataOutputStreamPlus out
        end local 2 // java.nio.ByteBuffer messageBuf
        end local 1 // org.apache.cassandra.streaming.messages.StreamInitMessage message
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   15     0        this  Lorg/apache/cassandra/streaming/ConnectionHandler$MessageHandler;
           10   15     1     message  Lorg/apache/cassandra/streaming/messages/StreamInitMessage;
           11   15     2  messageBuf  Ljava/nio/ByteBuffer;
           12   15     3         out  Lorg/apache/cassandra/io/util/DataOutputStreamPlus;
    Exceptions:
      throws java.io.IOException

  public void start(org.apache.cassandra.net.IncomingStreamingConnection, int);
    descriptor: (Lorg/apache/cassandra/net/IncomingStreamingConnection;I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
        start local 1 // org.apache.cassandra.net.IncomingStreamingConnection connection
        start local 2 // int protocolVersion
         0: .line 210
            aload 0 /* this */
            aload 1 /* connection */
            putfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.incomingConnection:Lorg/apache/cassandra/net/IncomingStreamingConnection;
         1: .line 211
            aload 0 /* this */
            aload 1 /* connection */
            getfield org.apache.cassandra.net.IncomingStreamingConnection.socket:Ljava/net/Socket;
            iload 2 /* protocolVersion */
            iconst_0
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.start:(Ljava/net/Socket;IZ)V
         2: .line 212
            return
        end local 2 // int protocolVersion
        end local 1 // org.apache.cassandra.net.IncomingStreamingConnection connection
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    3     0             this  Lorg/apache/cassandra/streaming/ConnectionHandler$MessageHandler;
            0    3     1       connection  Lorg/apache/cassandra/net/IncomingStreamingConnection;
            0    3     2  protocolVersion  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                 Name  Flags
      connection       
      protocolVersion  

  public void start(java.net.Socket, int, boolean);
    descriptor: (Ljava/net/Socket;IZ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
        start local 1 // java.net.Socket socket
        start local 2 // int protocolVersion
        start local 3 // boolean initiator
         0: .line 216
            aload 0 /* this */
            aload 1 /* socket */
            putfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.socket:Ljava/net/Socket;
         1: .line 217
            aload 0 /* this */
            iload 2 /* protocolVersion */
            putfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.protocolVersion:I
         2: .line 218
            iload 3 /* initiator */
            ifeq 4
         3: .line 219
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.sendInitMessage:()V
         4: .line 221
      StackMap locals:
      StackMap stack:
            new io.netty.util.concurrent.FastThreadLocalThread
            dup
            aload 0 /* this */
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.name:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "-"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* socket */
            invokevirtual java.net.Socket.getRemoteSocketAddress:()Ljava/net/SocketAddress;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial io.netty.util.concurrent.FastThreadLocalThread.<init>:(Ljava/lang/Runnable;Ljava/lang/String;)V
            invokevirtual io.netty.util.concurrent.FastThreadLocalThread.start:()V
         5: .line 222
            return
        end local 3 // boolean initiator
        end local 2 // int protocolVersion
        end local 1 // java.net.Socket socket
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    6     0             this  Lorg/apache/cassandra/streaming/ConnectionHandler$MessageHandler;
            0    6     1           socket  Ljava/net/Socket;
            0    6     2  protocolVersion  I
            0    6     3        initiator  Z
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                 Name  Flags
      socket           
      protocolVersion  
      initiator        

  public com.google.common.util.concurrent.ListenableFuture<?> close();
    descriptor: ()Lcom/google/common/util/concurrent/ListenableFuture;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
         0: .line 227
            invokestatic com.google.common.util.concurrent.SettableFuture.create:()Lcom/google/common/util/concurrent/SettableFuture;
            astore 1 /* future */
        start local 1 // com.google.common.util.concurrent.SettableFuture future
         1: .line 228
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.closeFuture:Ljava/util/concurrent/atomic/AtomicReference;
            aconst_null
            aload 1 /* future */
            invokevirtual java.util.concurrent.atomic.AtomicReference.compareAndSet:(Ljava/lang/Object;Ljava/lang/Object;)Z
            ifeq 3
         2: .line 229
            aload 1 /* future */
            goto 4
         3: .line 230
      StackMap locals: com.google.common.util.concurrent.SettableFuture
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.closeFuture:Ljava/util/concurrent/atomic/AtomicReference;
            invokevirtual java.util.concurrent.atomic.AtomicReference.get:()Ljava/lang/Object;
            checkcast com.google.common.util.concurrent.ListenableFuture
         4: .line 228
      StackMap locals:
      StackMap stack: com.google.common.util.concurrent.ListenableFuture
            areturn
        end local 1 // com.google.common.util.concurrent.SettableFuture future
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Lorg/apache/cassandra/streaming/ConnectionHandler$MessageHandler;
            1    5     1  future  Lcom/google/common/util/concurrent/SettableFuture<*>;
    Signature: ()Lcom/google/common/util/concurrent/ListenableFuture<*>;

  public boolean isClosed();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
         0: .line 235
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.closeFuture:Ljava/util/concurrent/atomic/AtomicReference;
            invokevirtual java.util.concurrent.atomic.AtomicReference.get:()Ljava/lang/Object;
            ifnull 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/cassandra/streaming/ConnectionHandler$MessageHandler;

  protected void signalCloseDone();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
         0: .line 240
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.isClosed:()Z
            ifne 2
         1: .line 241
            aload 0 /* this */
            invokevirtual org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.close:()Lcom/google/common/util/concurrent/ListenableFuture;
            pop
         2: .line 243
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.closeFuture:Ljava/util/concurrent/atomic/AtomicReference;
            invokevirtual java.util.concurrent.atomic.AtomicReference.get:()Ljava/lang/Object;
            checkcast com.google.common.util.concurrent.SettableFuture
            aconst_null
            invokevirtual com.google.common.util.concurrent.SettableFuture.set:(Ljava/lang/Object;)Z
            pop
         3: .line 246
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.incomingConnection:Lorg/apache/cassandra/net/IncomingStreamingConnection;
            ifnull 6
         4: .line 250
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.incomingConnection:Lorg/apache/cassandra/net/IncomingStreamingConnection;
            invokevirtual org.apache.cassandra.net.IncomingStreamingConnection.close:()V
         5: .line 251
            goto 10
         6: .line 258
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.socket:Ljava/net/Socket;
            invokevirtual java.net.Socket.close:()V
         7: .line 259
            goto 10
         8: .line 260
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 1 /* e */
        start local 1 // java.io.IOException e
         9: .line 264
            getstatic org.apache.cassandra.streaming.ConnectionHandler.logger:Lorg/slf4j/Logger;
            ldc "Unexpected error while closing streaming connection"
            aload 1 /* e */
            invokeinterface org.slf4j.Logger.debug:(Ljava/lang/String;Ljava/lang/Throwable;)V
        end local 1 // java.io.IOException e
        10: .line 267
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.apache.cassandra.streaming.ConnectionHandler$MessageHandler this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  this  Lorg/apache/cassandra/streaming/ConnectionHandler$MessageHandler;
            9   10     1     e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           6     7       8  Class java.io.IOException
}
SourceFile: "ConnectionHandler.java"
NestHost: org.apache.cassandra.streaming.ConnectionHandler
InnerClasses:
  abstract MessageHandler = org.apache.cassandra.streaming.ConnectionHandler$MessageHandler of org.apache.cassandra.streaming.ConnectionHandler