@Override public ClientSession getClientSession() { return (ClientSession) super.getSession(); }
@Override public PropertyResolver getParentPropertyResolver() { return getSession(); }
@Override public PropertyResolver getParentPropertyResolver() { return getSession(); }
@Override public String toString() { return getClass().getSimpleName() + "[id=" + getId() + ", recipient=" + getRecipient() + "]" + "-" + getSession(); } }
@Override public String toString() { return getClass().getSimpleName() + "[id=" + getId() + ", recipient=" + getRecipient() + "]" + "-" + getSession(); } }
@Override public ChannelStreamPacketWriterResolver resolveChannelStreamPacketWriterResolver() { ChannelStreamPacketWriterResolver resolver = getChannelStreamPacketWriterResolver(); if (resolver != null) { return resolver; } ChannelStreamPacketWriterResolverManager manager = getSession(); return manager.resolveChannelStreamPacketWriterResolver(); }
@Override public IoWriteFuture writePacket(Buffer buffer) throws IOException { Session s = getSession(); if (!isClosing()) { return s.writePacket(buffer); } else { if (log.isDebugEnabled()) { log.debug("writePacket({}) Discarding output packet because channel is being closed", this); } return new AbstractIoWriteFuture(s.toString(), null) { { setValue(new EOFException("Channel is being closed")); } }; } }
@Override public ChannelStreamPacketWriterResolver resolveChannelStreamPacketWriterResolver() { ChannelStreamPacketWriterResolver resolver = getChannelStreamPacketWriterResolver(); if (resolver != null) { return resolver; } ChannelStreamPacketWriterResolverManager manager = getSession(); return manager.resolveChannelStreamPacketWriterResolver(); }
@Override public IoWriteFuture writePacket(Buffer buffer) throws IOException { Session s = getSession(); if (!isClosing()) { return s.writePacket(buffer); } else { if (log.isDebugEnabled()) { log.debug("writePacket({}) Discarding output packet because channel is being closed", this); } return new AbstractIoWriteFuture(s.toString(), null) { { setValue(new EOFException("Channel is being closed")); } }; } }
protected void sendEof() throws IOException { if (isClosing()) { if (log.isDebugEnabled()) { log.debug("sendEof({}) already closing or closed", this); } return; } if (eofSent.getAndSet(true)) { if (log.isDebugEnabled()) { log.debug("sendEof({}) already sent", this); } return; } if (log.isDebugEnabled()) { log.debug("sendEof({}) SSH_MSG_CHANNEL_EOF", this); } Session s = getSession(); Buffer buffer = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_EOF, Short.SIZE); buffer.putInt(getRecipient()); writePacket(buffer); }
protected void sendEof() throws IOException { if (isClosing()) { if (log.isDebugEnabled()) { log.debug("sendEof({}) already closing or closed", this); } return; } if (eofSent.getAndSet(true)) { if (log.isDebugEnabled()) { log.debug("sendEof({}) already sent", this); } return; } if (log.isDebugEnabled()) { log.debug("sendEof({}) SSH_MSG_CHANNEL_EOF", this); } Session s = getSession(); Buffer buffer = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_EOF, Short.SIZE); buffer.putInt(getRecipient()); writePacket(buffer); }
protected void sendWindowAdjust(long len) throws IOException { if (log.isDebugEnabled()) { log.debug("sendWindowAdjust({}) SSH_MSG_CHANNEL_WINDOW_ADJUST len={}", this, len); } Session s = getSession(); Buffer buffer = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_WINDOW_ADJUST, Short.SIZE); buffer.putInt(getRecipient()); buffer.putInt(len); writePacket(buffer); }
protected void sendWindowAdjust(long len) throws IOException { if (log.isDebugEnabled()) { log.debug("sendWindowAdjust({}) SSH_MSG_CHANNEL_WINDOW_ADJUST len={}", this, len); } Session s = getSession(); Buffer buffer = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_WINDOW_ADJUST, Short.SIZE); buffer.putInt(getRecipient()); buffer.putInt(len); writePacket(buffer); }
protected IoWriteFuture sendResponse(Buffer buffer, String req, RequestHandler.Result result, boolean wantReply) throws IOException { if (log.isDebugEnabled()) { log.debug("sendResponse({}) request={} result={}, want-reply={}", this, req, result, wantReply); } if (RequestHandler.Result.Replied.equals(result) || (!wantReply)) { return new AbstractIoWriteFuture(req, null) { { setValue(Boolean.TRUE); } }; } byte cmd = RequestHandler.Result.ReplySuccess.equals(result) ? SshConstants.SSH_MSG_CHANNEL_SUCCESS : SshConstants.SSH_MSG_CHANNEL_FAILURE; Session session = getSession(); Buffer rsp = session.createBuffer(cmd, Integer.BYTES); rsp.putInt(recipient); return session.writePacket(rsp); }
protected IoWriteFuture sendResponse(Buffer buffer, String req, RequestHandler.Result result, boolean wantReply) throws IOException { if (log.isDebugEnabled()) { log.debug("sendResponse({}) request={} result={}, want-reply={}", this, req, result, wantReply); } if (RequestHandler.Result.Replied.equals(result) || (!wantReply)) { return new AbstractIoWriteFuture(req, null) { { setValue(Boolean.TRUE); } }; } byte cmd = RequestHandler.Result.ReplySuccess.equals(result) ? SshConstants.SSH_MSG_CHANNEL_SUCCESS : SshConstants.SSH_MSG_CHANNEL_FAILURE; Session session = getSession(); Buffer rsp = session.createBuffer(cmd, Integer.BYTES); rsp.putInt(recipient); return session.writePacket(rsp); }
Session s = getSession(); Buffer buffer = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_CLOSE, Short.SIZE); buffer.putInt(getRecipient());
@Override public void handleExtendedData(Buffer buffer) throws IOException { int ex = buffer.getInt(); // Only accept extended data for stderr if (ex != SshConstants.SSH_EXTENDED_DATA_STDERR) { if (log.isDebugEnabled()) { log.debug("handleExtendedData({}) SSH_MSG_CHANNEL_FAILURE - non STDERR type: {}", this, ex); } Session s = getSession(); Buffer rsp = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_FAILURE, Integer.BYTES); rsp.putInt(getRecipient()); writePacket(rsp); return; } long len = validateIncomingDataSize(SshConstants.SSH_MSG_CHANNEL_EXTENDED_DATA, buffer.getUInt()); if (log.isDebugEnabled()) { log.debug("handleExtendedData({}) SSH_MSG_CHANNEL_EXTENDED_DATA len={}", this, len); } if (log.isTraceEnabled()) { BufferUtils.dumpHex(getSimplifiedLogger(), BufferUtils.DEFAULT_HEXDUMP_LEVEL, "handleExtendedData(" + this + ")", this, BufferUtils.DEFAULT_HEX_SEPARATOR, buffer.array(), buffer.rpos(), (int) len); } if (isEofSignalled()) { // TODO consider throwing an exception log.warn("handleExtendedData({}) extra {} bytes sent after EOF", this, len); } doWriteExtendedData(buffer.array(), buffer.rpos(), len); }
@Override public void handleExtendedData(Buffer buffer) throws IOException { int ex = buffer.getInt(); // Only accept extended data for stderr if (ex != SshConstants.SSH_EXTENDED_DATA_STDERR) { if (log.isDebugEnabled()) { log.debug("handleExtendedData({}) SSH_MSG_CHANNEL_FAILURE - non STDERR type: {}", this, ex); } Session s = getSession(); Buffer rsp = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_FAILURE, Integer.BYTES); rsp.putInt(getRecipient()); writePacket(rsp); return; } long len = validateIncomingDataSize(SshConstants.SSH_MSG_CHANNEL_EXTENDED_DATA, buffer.getUInt()); if (log.isDebugEnabled()) { log.debug("handleExtendedData({}) SSH_MSG_CHANNEL_EXTENDED_DATA len={}", this, len); } if (log.isTraceEnabled()) { BufferUtils.dumpHex(getSimplifiedLogger(), BufferUtils.DEFAULT_HEXDUMP_LEVEL, "handleExtendedData(" + this + ")", this, BufferUtils.DEFAULT_HEX_SEPARATOR, buffer.array(), buffer.rpos(), (int) len); } if (isEofSignalled()) { // TODO consider throwing an exception log.warn("handleExtendedData({}) extra {} bytes sent after EOF", this, len); } doWriteExtendedData(buffer.array(), buffer.rpos(), len); }
protected void invokeChannelSignaller(Invoker<ChannelListener, Void> invoker) throws Throwable { Session session = getSession(); FactoryManager manager = (session == null) ? null : session.getFactoryManager(); ChannelListener[] listeners = { (manager == null) ? null : manager.getChannelListenerProxy(), (session == null) ? null : session.getChannelListenerProxy(), getChannelListenerProxy() }; Throwable err = null; for (ChannelListener l : listeners) { if (l == null) { continue; } try { invoker.invoke(l); } catch (Throwable t) { err = GenericUtils.accumulateException(err, t); } } if (err != null) { throw err; } }
protected void invokeChannelSignaller(Invoker<ChannelListener, Void> invoker) throws Throwable { Session session = getSession(); FactoryManager manager = (session == null) ? null : session.getFactoryManager(); ChannelListener[] listeners = { (manager == null) ? null : manager.getChannelListenerProxy(), (session == null) ? null : session.getChannelListenerProxy(), getChannelListenerProxy() }; Throwable err = null; for (ChannelListener l : listeners) { if (l == null) { continue; } try { invoker.invoke(l); } catch (Throwable t) { err = GenericUtils.accumulateException(err, t); } } if (err != null) { throw err; } }