Package org.apache.sshd.client.channel
Class AbstractClientChannel
- 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.util.closeable.AbstractInnerCloseable
-
- org.apache.sshd.common.channel.AbstractChannel
-
- org.apache.sshd.client.channel.AbstractClientChannel
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
,Channel
,ClientChannel
,ClientSessionHolder
,AttributeRepository
,AttributeStore
,Channel
,ChannelIdentifier
,ChannelListenerManager
,StreamingChannel
,ChannelStreamWriterResolver
,ChannelStreamWriterResolverManager
,Closeable
,PropertyResolver
,SessionContextHolder
,SessionHolder<Session>
,ExecutorServiceCarrier
- Direct Known Subclasses:
AgentForwardedChannel
,AgentForwardedChannel
,ChannelDirectTcpip
,ChannelForwardedX11
,ChannelSession
,TcpipClientChannel
public abstract class AbstractClientChannel extends AbstractChannel implements ClientChannel
TODO Add javadoc- Author:
- Apache MINA SSHD Project
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.sshd.common.channel.AbstractChannel
AbstractChannel.GracefulChannelCloseable, AbstractChannel.GracefulState
-
Nested classes/interfaces inherited from class org.apache.sshd.common.util.closeable.AbstractCloseable
AbstractCloseable.State
-
Nested classes/interfaces inherited from interface org.apache.sshd.common.AttributeRepository
AttributeRepository.AttributeKey<T extends Object>
-
Nested classes/interfaces inherited from interface org.apache.sshd.common.channel.StreamingChannel
StreamingChannel.Streaming
-
-
Field Summary
Fields Modifier and Type Field Description protected ChannelAsyncInputStream
asyncErr
protected ChannelAsyncOutputStream
asyncIn
protected ChannelAsyncInputStream
asyncOut
protected OutputStream
err
protected AtomicReference<String>
exitSignalHolder
protected AtomicReference<Integer>
exitStatusHolder
protected InputStream
in
protected InputStream
invertedErr
protected OutputStream
invertedIn
protected InputStream
invertedOut
protected AtomicBoolean
opened
protected String
openFailureLang
protected String
openFailureMsg
protected int
openFailureReason
protected OpenFuture
openFuture
protected OutputStream
out
protected boolean
redirectErrorStream
protected StreamingChannel.Streaming
streaming
-
Fields inherited from class org.apache.sshd.common.channel.AbstractChannel
channelListenerProxy, channelListeners, closeSignaled, eofReceived, eofSent, gracefulFuture, gracefulState, initialized, RESPONSE_BUFFER_GROWTH_FACTOR, service, unregisterSignaled
-
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
-
Fields inherited from interface org.apache.sshd.common.channel.Channel
CHANNEL_EXEC, CHANNEL_SHELL, CHANNEL_SUBSYSTEM
-
Fields inherited from interface org.apache.sshd.common.channel.throttle.ChannelStreamWriterResolver
NONE
-
Fields inherited from interface org.apache.sshd.common.PropertyResolver
EMPTY
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractClientChannel(String type)
protected
AbstractClientChannel(String type, Collection<? extends RequestHandler<Channel>> handlers)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
addChannelSignalRequestHandlers(EventNotifier<String> notifier)
protected abstract void
doOpen()
protected void
doWriteData(byte[] data, int off, long len)
protected void
doWriteExtendedData(byte[] data, int off, long len)
IoInputStream
getAsyncErr()
IoOutputStream
getAsyncIn()
IoInputStream
getAsyncOut()
Set<ClientChannelEvent>
getChannelState()
String
getChannelType()
OutputStream
getErr()
String
getExitSignal()
Integer
getExitStatus()
InputStream
getIn()
protected Closeable
getInnerCloseable()
InputStream
getInvertedErr()
OutputStream
getInvertedIn()
Access to an output stream to send data directly to the remote channel.InputStream
getInvertedOut()
OutputStream
getOut()
StreamingChannel.Streaming
getStreaming()
void
handleOpenFailure(Buffer buffer)
For a client channel, this method will be called internally by the session when the server has rejected this channel opening.void
handleOpenSuccess(long recipient, long rwSize, long packetSize, Buffer buffer)
For a client channel, this method will be called internally by the session when the confirmation has been received.void
handleWindowAdjust(Buffer buffer)
Invoked whenSSH_MSG_CHANNEL_WINDOW_ADJUST
receivedboolean
isRedirectErrorStream()
OpenFuture
open()
OpenFuture
open(long recipient, long rwSize, long packetSize, Buffer buffer)
For a server channel, this method will actually open the channelvoid
setErr(OutputStream err)
void
setIn(InputStream in)
Set an input stream that will be read by this channel and forwarded to the remote channel.void
setOut(OutputStream out)
void
setRedirectErrorStream(boolean redirectErrorStream)
void
setStreaming(StreamingChannel.Streaming streaming)
protected <C extends Collection<ClientChannelEvent>>
CupdateCurrentChannelState(C state)
Set<ClientChannelEvent>
waitFor(Collection<ClientChannelEvent> mask, long timeout)
Waits until any of the specified events in the mask is signaled-
Methods inherited from class org.apache.sshd.common.channel.AbstractChannel
addChannelListener, addPendingRequest, addRequestHandler, attributeKeys, clearAttributes, computeAttributeIfAbsent, configureWindow, getAttribute, getAttributesCount, getChannelId, getChannelListenerProxy, getChannelStreamWriterResolver, getExecutorService, getLocalWindow, getParentPropertyResolver, getProperties, getRecipient, getRemoteWindow, getRequestHandlers, getSession, handleChannelRegistrationResult, handleChannelRequest, handleChannelUnregistration, handleClose, handleData, handleEof, handleExtendedData, handleFailure, handleInternalRequest, handleRequest, handleSuccess, handleUnknownChannelRequest, init, invokeChannelSignaller, isEofSent, isEofSignalled, isInitialized, notifyStateChanged, notifyStateChanged, preClose, removeAttribute, removeChannelListener, removePendingRequest, removeRequestHandler, resolveChannelStreamWriterResolver, sendEof, sendResponse, sendWindowAdjust, setAttribute, setChannelStreamWriterResolver, setRecipient, signalChannelClosed, signalChannelClosed, signalChannelInitialized, signalChannelInitialized, signalChannelOpenFailure, signalChannelOpenFailure, signalChannelOpenSuccess, signalChannelOpenSuccess, toString, validateIncomingDataSize, writePacket
-
Methods inherited from class org.apache.sshd.common.util.closeable.AbstractInnerCloseable
doCloseGracefully, doCloseImmediately
-
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 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.sshd.common.AttributeRepository
attributeKeys, getAttribute, getAttributesCount
-
Methods inherited from interface org.apache.sshd.common.AttributeStore
clearAttributes, computeAttributeIfAbsent, removeAttribute, setAttribute
-
Methods inherited from interface org.apache.sshd.common.channel.Channel
addRequestHandler, addRequestHandlers, getLocalWindow, getRecipient, getRemoteWindow, getRequestHandlers, handleChannelRegistrationResult, handleChannelUnregistration, handleClose, handleData, handleEof, handleExtendedData, handleFailure, handleRequest, handleSuccess, init, isEofSignalled, isInitialized, removeRequestHandler, removeRequestHandlers, resolveAttribute, writePacket
-
Methods inherited from interface org.apache.sshd.common.channel.ChannelIdentifier
getChannelId
-
Methods inherited from interface org.apache.sshd.common.channel.ChannelListenerManager
addChannelListener, getChannelListenerProxy, removeChannelListener
-
Methods inherited from interface org.apache.sshd.common.channel.throttle.ChannelStreamWriterResolverManager
getChannelStreamWriterResolver, resolveChannelStreamWriter, resolveChannelStreamWriterResolver, setChannelStreamWriterResolver
-
Methods inherited from interface org.apache.sshd.client.channel.ClientChannel
getClientSession, waitFor
-
Methods inherited from interface org.apache.sshd.common.Closeable
addCloseFutureListener, close, close, isClosed, isClosing, isOpen, removeCloseFutureListener
-
Methods inherited from interface org.apache.sshd.common.PropertyResolver
getBoolean, getBooleanProperty, getCharset, getInteger, getIntProperty, getLong, getLongProperty, getObject, getParentPropertyResolver, getProperties, getString, getStringProperty, isEmpty
-
Methods inherited from interface org.apache.sshd.common.session.SessionHolder
getSession, getSessionContext
-
-
-
-
Field Detail
-
opened
protected final AtomicBoolean opened
-
streaming
protected StreamingChannel.Streaming streaming
-
asyncIn
protected ChannelAsyncOutputStream asyncIn
-
asyncOut
protected ChannelAsyncInputStream asyncOut
-
asyncErr
protected ChannelAsyncInputStream asyncErr
-
in
protected InputStream in
-
invertedIn
protected OutputStream invertedIn
-
out
protected OutputStream out
-
invertedOut
protected InputStream invertedOut
-
err
protected OutputStream err
-
invertedErr
protected InputStream invertedErr
-
redirectErrorStream
protected boolean redirectErrorStream
-
exitStatusHolder
protected final AtomicReference<Integer> exitStatusHolder
-
exitSignalHolder
protected final AtomicReference<String> exitSignalHolder
-
openFailureReason
protected int openFailureReason
-
openFailureMsg
protected String openFailureMsg
-
openFailureLang
protected String openFailureLang
-
openFuture
protected OpenFuture openFuture
-
-
Constructor Detail
-
AbstractClientChannel
protected AbstractClientChannel(String type)
-
AbstractClientChannel
protected AbstractClientChannel(String type, Collection<? extends RequestHandler<Channel>> handlers)
-
-
Method Detail
-
addChannelSignalRequestHandlers
protected void addChannelSignalRequestHandlers(EventNotifier<String> notifier)
-
getChannelType
public String getChannelType()
- Specified by:
getChannelType
in interfaceClientChannel
- Returns:
- The type of channel reported when it was created
-
getStreaming
public StreamingChannel.Streaming getStreaming()
- Specified by:
getStreaming
in interfaceStreamingChannel
-
setStreaming
public void setStreaming(StreamingChannel.Streaming streaming)
- Specified by:
setStreaming
in interfaceStreamingChannel
-
getAsyncIn
public IoOutputStream getAsyncIn()
- Specified by:
getAsyncIn
in interfaceClientChannel
-
getAsyncOut
public IoInputStream getAsyncOut()
- Specified by:
getAsyncOut
in interfaceClientChannel
-
getAsyncErr
public IoInputStream getAsyncErr()
- Specified by:
getAsyncErr
in interfaceClientChannel
-
getInvertedIn
public OutputStream getInvertedIn()
Description copied from interface:ClientChannel
Access to an output stream to send data directly to the remote channel. This can be used instead of usingClientChannel.setIn(java.io.InputStream)
method and having the channel polling for data in that stream.- Specified by:
getInvertedIn
in interfaceClientChannel
- Returns:
- an OutputStream to be used to send data
-
getIn
public InputStream getIn()
-
setIn
public void setIn(InputStream in)
Description copied from interface:ClientChannel
Set an input stream that will be read by this channel and forwarded to the remote channel. Note that using such a stream will create an additional thread for pumping the stream which will only be able to end when that stream is actually closed or some data is read. It is recommended to use theClientChannel.getInvertedIn()
method instead and write data directly.- Specified by:
setIn
in interfaceClientChannel
- Parameters:
in
- an InputStream to be polled and forwarded
-
getInvertedOut
public InputStream getInvertedOut()
- Specified by:
getInvertedOut
in interfaceClientChannel
-
getOut
public OutputStream getOut()
-
setOut
public void setOut(OutputStream out)
- Specified by:
setOut
in interfaceClientChannel
-
getInvertedErr
public InputStream getInvertedErr()
- Specified by:
getInvertedErr
in interfaceClientChannel
-
getErr
public OutputStream getErr()
-
setErr
public void setErr(OutputStream err)
- Specified by:
setErr
in interfaceClientChannel
-
isRedirectErrorStream
public boolean isRedirectErrorStream()
-
setRedirectErrorStream
public void setRedirectErrorStream(boolean redirectErrorStream)
- Specified by:
setRedirectErrorStream
in interfaceClientChannel
- Parameters:
redirectErrorStream
- Iftrue
then STDERR stream is set to be the same as STDOUT unlessClientChannel.setErr(OutputStream)
was called. Note: the call must occur before channel is opened. Calling it afterwards has no effect - i.e., the last state before opening the stream determines the channel's behavior.
-
getInnerCloseable
protected Closeable getInnerCloseable()
- Overrides:
getInnerCloseable
in classAbstractChannel
-
waitFor
public Set<ClientChannelEvent> waitFor(Collection<ClientChannelEvent> mask, long timeout)
Description copied from interface:ClientChannel
Waits until any of the specified events in the mask is signaled- Specified by:
waitFor
in interfaceClientChannel
- Parameters:
mask
- TheClientChannelEvent
s masktimeout
- The timeout to wait (msec.) - if non-positive then forever- Returns:
- The actual signaled event - includes
ClientChannelEvent.TIMEOUT
if timeout expired before the expected event was signaled
-
getChannelState
public Set<ClientChannelEvent> getChannelState()
- Specified by:
getChannelState
in interfaceClientChannel
- Returns:
- A snapshot of the current channel state
- See Also:
ClientChannel.waitFor(Collection, long)
-
updateCurrentChannelState
protected <C extends Collection<ClientChannelEvent>> C updateCurrentChannelState(C state)
-
open
public OpenFuture open() throws IOException
- Specified by:
open
in interfaceClientChannel
- Throws:
IOException
-
open
public OpenFuture open(long recipient, long rwSize, long packetSize, Buffer buffer)
Description copied from interface:Channel
For a server channel, this method will actually open the channel- Specified by:
open
in interfaceChannel
- Parameters:
recipient
- Recipient identifier (UINT32 represented as along
)rwSize
- Read/Write window size (uint32
)packetSize
- Preferred maximum packet size (uint32
)buffer
- IncomingBuffer
that triggered the call. Note: the buffer's read position is exactly after the information that read to this call was decoded- Returns:
- An
OpenFuture
for the channel open request
-
handleOpenSuccess
public void handleOpenSuccess(long recipient, long rwSize, long packetSize, Buffer buffer)
Description copied from interface:Channel
For a client channel, this method will be called internally by the session when the confirmation has been received.- Specified by:
handleOpenSuccess
in interfaceChannel
- Parameters:
recipient
- Recipient identifier (UINT32 represented as along
)rwSize
- Read/Write window size (uint32
)packetSize
- Preferred maximum packet size (uint32
)buffer
- IncomingBuffer
that triggered the call. Note: the buffer's read position is exactly after the information that read to this call was decoded
-
doOpen
protected abstract void doOpen() throws IOException
- Throws:
IOException
-
handleOpenFailure
public void handleOpenFailure(Buffer buffer)
Description copied from interface:Channel
For a client channel, this method will be called internally by the session when the server has rejected this channel opening.- Specified by:
handleOpenFailure
in interfaceChannel
- Parameters:
buffer
- IncomingBuffer
that triggered the call. Note: the buffer's read position is exactly after the information that read to this call was decoded
-
doWriteData
protected void doWriteData(byte[] data, int off, long len) throws IOException
- Specified by:
doWriteData
in classAbstractChannel
- Throws:
IOException
-
doWriteExtendedData
protected void doWriteExtendedData(byte[] data, int off, long len) throws IOException
- Specified by:
doWriteExtendedData
in classAbstractChannel
- Throws:
IOException
-
handleWindowAdjust
public void handleWindowAdjust(Buffer buffer) throws IOException
Description copied from interface:Channel
Invoked whenSSH_MSG_CHANNEL_WINDOW_ADJUST
received- Specified by:
handleWindowAdjust
in interfaceChannel
- Overrides:
handleWindowAdjust
in classAbstractChannel
- Parameters:
buffer
- The rest of the message dataBuffer
after decoding the channel identifiers- Throws:
IOException
- If failed to handle the message
-
getExitStatus
public Integer getExitStatus()
- Specified by:
getExitStatus
in interfaceClientChannel
- Returns:
- The signaled exit status via "exit-status" request -
null
if not signaled
-
getExitSignal
public String getExitSignal()
- Specified by:
getExitSignal
in interfaceClientChannel
- Returns:
- The signaled exit signal via "exit-signal" -
null
if not signaled
-
-