Class ChannelAsyncOutputStream

java.lang.Object
org.apache.sshd.common.util.logging.AbstractLoggingBean
org.apache.sshd.common.util.closeable.IoBaseCloseable
org.apache.sshd.common.util.closeable.AbstractCloseable
org.apache.sshd.common.channel.ChannelAsyncOutputStream
All Implemented Interfaces:
Closeable, AutoCloseable, Channel, ChannelHolder, org.apache.sshd.common.Closeable, org.apache.sshd.common.io.IoOutputStream

public class ChannelAsyncOutputStream extends org.apache.sshd.common.util.closeable.AbstractCloseable implements org.apache.sshd.common.io.IoOutputStream, ChannelHolder
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    protected static class 
    Marker type to avoid repeated buffering in writePacket(IoWriteFutureImpl, boolean).
    protected static class 
    Collects state variables; access is always synchronized on the single instance per stream.

    Nested classes/interfaces inherited from class org.apache.sshd.common.util.closeable.AbstractCloseable

    org.apache.sshd.common.util.closeable.AbstractCloseable.State
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected final AtomicReference<org.apache.sshd.common.io.IoWriteFuture>
    The future describing the last executed *buffer* write writeBuffer(Buffer).
    Encapsulates the state of the current write operation.

    Fields inherited from class org.apache.sshd.common.util.closeable.AbstractCloseable

    closeFuture, futureLock, state

    Fields inherited from class org.apache.sshd.common.util.logging.AbstractLoggingBean

    log
  • Constructor Summary

    Constructors
    Constructor
    Description
    ChannelAsyncOutputStream(Channel channel, byte cmd)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected org.apache.sshd.common.util.buffer.Buffer
    createSendBuffer(org.apache.sshd.common.util.buffer.Buffer buffer, Channel channel, int length)
     
    protected org.apache.sshd.common.future.CloseFuture
     
    protected void
     
    protected void
    doWriteIfPossible(boolean resume)
     
     
    byte
     
    void
     
    protected void
    onWritten(IoWriteFutureImpl future, int total, int length, org.apache.sshd.common.io.IoWriteFuture f)
     
    protected void
     
    protected void
     
    protected void
     
     
    org.apache.sshd.common.io.IoWriteFuture
    writeBuffer(org.apache.sshd.common.util.buffer.Buffer buffer)
    This write operation is asynchronous: if there is not enough window space, it may keep the write pending or write only part of the buffer and keep the rest pending.
    writePacket(IoWriteFutureImpl future, boolean resume)
    Try to write as much of the current buffer as possible.

    Methods inherited from class org.apache.sshd.common.util.closeable.AbstractCloseable

    addCloseFutureListener, builder, close, getFutureLock, isClosed, isClosing, removeCloseFutureListener

    Methods inherited from class org.apache.sshd.common.util.logging.AbstractLoggingBean

    debug, debug, debug, debug, debug, error, error, error, error, error, getSimplifiedLogger, info, info, warn, warn, warn, warn, warn, warn, warn, warn

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.apache.sshd.common.Closeable

    addCloseFutureListener, close, close, isClosed, isClosing, isOpen, removeCloseFutureListener
  • Field Details

    • lastWrite

      protected final AtomicReference<org.apache.sshd.common.io.IoWriteFuture> lastWrite
      The future describing the last executed *buffer* write writeBuffer(Buffer). Used for graceful closing.
    • writeState

      protected final ChannelAsyncOutputStream.WriteState writeState
      Encapsulates the state of the current write operation. Access is always under lock (on writeState's monitor), the lock is held only shortly and never while writing.
  • Constructor Details

    • ChannelAsyncOutputStream

      public ChannelAsyncOutputStream(Channel channel, byte cmd)
      Parameters:
      channel - The Channel through which the stream is communicating
      cmd - Either SSH_MSG_CHANNEL_DATA or SSH_MSG_CHANNEL_EXTENDED_DATA indicating the output stream type
  • Method Details

    • getChannel

      public Channel getChannel()
      Specified by:
      getChannel in interface ChannelHolder
      Returns:
      The associated Channel instance
    • getCommandType

      public byte getCommandType()
      Returns:
      Either SSH_MSG_CHANNEL_DATA or SSH_MSG_CHANNEL_EXTENDED_DATA indicating the output stream type
    • writeBuffer

      public org.apache.sshd.common.io.IoWriteFuture writeBuffer(org.apache.sshd.common.util.buffer.Buffer buffer) throws IOException
      This write operation is asynchronous: if there is not enough window space, it may keep the write pending or write only part of the buffer and keep the rest pending. Concurrent writes are not allowed and will throw a WritePendingException. Any subsequent write must occur only once the returned future is fulfilled; for instance triggered via a listener on the returned future. Try to avoid doing a subsequent write directly in a future listener, though; doing so may lead to deep chains of nested listener calls with deep stack traces, and may ultimately lead to a stack overflow.
      Specified by:
      writeBuffer in interface org.apache.sshd.common.io.IoOutputStream
      Throws:
      org.apache.sshd.common.io.WritePendingException - if a concurrent write is attempted
      IOException
    • preClose

      protected void preClose()
      Overrides:
      preClose in class org.apache.sshd.common.util.closeable.AbstractCloseable
    • doCloseImmediately

      protected void doCloseImmediately()
      Overrides:
      doCloseImmediately in class org.apache.sshd.common.util.closeable.AbstractCloseable
    • shutdown

      protected void shutdown()
    • terminateFuture

      protected void terminateFuture(IoWriteFutureImpl future)
    • doCloseGracefully

      protected org.apache.sshd.common.future.CloseFuture doCloseGracefully()
      Overrides:
      doCloseGracefully in class org.apache.sshd.common.util.closeable.AbstractCloseable
    • onWindowExpanded

      public void onWindowExpanded() throws IOException
      Throws:
      IOException
    • doWriteIfPossible

      protected void doWriteIfPossible(boolean resume)
    • writePacket

      protected IoWriteFutureImpl writePacket(IoWriteFutureImpl future, boolean resume)
      Try to write as much of the current buffer as possible. If the buffer is larger than the packet size split it in packets, writing one after the other by chaining futures. If there is not enough window space, stop writing. Writing will be resumed once the window has been enlarged again.
      Parameters:
      future - IoWriteFutureImpl for the current write
      resume - whether being called in response to a remote window adjustment
      Returns:
      null if all written, or if the rest will be written via a future listener. Otherwise a future for the remaining writes.
    • onWritten

      protected void onWritten(IoWriteFutureImpl future, int total, int length, org.apache.sshd.common.io.IoWriteFuture f)
    • createSendBuffer

      protected org.apache.sshd.common.util.buffer.Buffer createSendBuffer(org.apache.sshd.common.util.buffer.Buffer buffer, Channel channel, int length)
    • toString

      public String toString()
      Overrides:
      toString in class Object