This is an automated email from the ASF dual-hosted git repository. lgoldstein pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mina-sshd.git
commit 065d713bdc7728ac94df289497ff6b679b2392f1 Author: Lyor Goldstein <lgoldst...@apache.org> AuthorDate: Wed Aug 7 07:03:01 2019 +0300 [SSHD-937] Provide session instance when invoking a ChannelFactory --- CHANGES.md | 5 +++- .../org/apache/sshd/agent/SshAgentFactory.java | 7 ++--- .../agent/local/ChannelAgentForwardingFactory.java | 5 +++- .../apache/sshd/agent/local/LocalAgentFactory.java | 9 +++--- .../apache/sshd/agent/local/ProxyAgentFactory.java | 5 ++-- .../agent/unix/ChannelAgentForwardingFactory.java | 8 +++-- .../apache/sshd/agent/unix/UnixAgentFactory.java | 13 ++++---- .../java/org/apache/sshd/client/ClientBuilder.java | 4 +-- .../java/org/apache/sshd/client/SshClient.java | 13 ++++---- .../java/org/apache/sshd/common/BaseBuilder.java | 6 ++-- .../org/apache/sshd/common/FactoryManager.java | 6 ++-- .../apache/sshd/common/channel/ChannelFactory.java | 35 ++++++++++++++++++---- .../common/helpers/AbstractFactoryManager.java | 9 +++--- .../session/helpers/AbstractConnectionService.java | 10 ++++--- .../java/org/apache/sshd/server/ServerBuilder.java | 6 ++-- .../apache/sshd/server/channel/ChannelSession.java | 29 ++++++++++++------ .../sshd/server/channel/ChannelSessionFactory.java | 5 +++- .../sshd/server/forward/TcpipServerChannel.java | 5 ++-- .../java/org/apache/sshd/client/ClientTest.java | 2 +- .../org/apache/sshd/common/channel/WindowTest.java | 2 +- .../sshd/client/subsystem/sftp/ClientTest.java | 2 +- 21 files changed, 116 insertions(+), 70 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 57d62a7..62f36db 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -25,6 +25,9 @@ has been made * `UserAuthFactory` is a proper interface and it has been refactored to contain a `createUserAuth` method that accepts the session instance through which the request is made. +* `ChannelFactory` is a proper interface and it has been refactored to contain a +`createChannel` method that accepts the session instance through which the request is made. + ## Minor code helpers * `SessionListener` supports `sessionPeerIdentificationReceived` that is invoked once successful @@ -39,4 +42,4 @@ for the server's identification before sending its own. * [SSHD-934](https://issues.apache.org/jira/browse/SSHD-934) - Fixed ECDSA public key encoding into OpenSSH format. -* [SSHD-937](https://issues.apache.org/jira/browse/SSHD-937) - Provide session instance when creating a subsystem or user authentication. \ No newline at end of file +* [SSHD-937](https://issues.apache.org/jira/browse/SSHD-937) - Provide session instance when creating a subsystem, user authentication, channel. \ No newline at end of file diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentFactory.java b/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentFactory.java index 9b44d27..23e63cb 100644 --- a/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentFactory.java @@ -22,8 +22,7 @@ import java.io.IOException; import java.util.List; import org.apache.sshd.common.FactoryManager; -import org.apache.sshd.common.NamedFactory; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.session.ConnectionService; /** @@ -48,9 +47,9 @@ public interface SshAgentFactory { * either local or through another proxy. * * @param manager The {@link FactoryManager} through which the request is made - * @return The (named) channel factories used to create channels on the client side + * @return The {@link ChannelFactory}-ies used to create channels on the client side */ - List<NamedFactory<Channel>> getChannelForwardingFactories(FactoryManager manager); + List<ChannelFactory> getChannelForwardingFactories(FactoryManager manager); /** * Create an SshAgent that can be used on the client side by the authentication diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/local/ChannelAgentForwardingFactory.java b/sshd-core/src/main/java/org/apache/sshd/agent/local/ChannelAgentForwardingFactory.java index 40f9135..cacca91 100644 --- a/sshd-core/src/main/java/org/apache/sshd/agent/local/ChannelAgentForwardingFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/agent/local/ChannelAgentForwardingFactory.java @@ -19,8 +19,11 @@ package org.apache.sshd.agent.local; +import java.io.IOException; + import org.apache.sshd.common.channel.Channel; import org.apache.sshd.common.channel.ChannelFactory; +import org.apache.sshd.common.session.Session; import org.apache.sshd.common.util.ValidateUtils; /** @@ -43,7 +46,7 @@ public class ChannelAgentForwardingFactory implements ChannelFactory { } @Override - public Channel create() { + public Channel createChannel(Session session) throws IOException { return new ChannelAgentForwarding(null); } } \ No newline at end of file diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/local/LocalAgentFactory.java b/sshd-core/src/main/java/org/apache/sshd/agent/local/LocalAgentFactory.java index 99d8c11..afbb4bf 100644 --- a/sshd-core/src/main/java/org/apache/sshd/agent/local/LocalAgentFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/agent/local/LocalAgentFactory.java @@ -28,14 +28,13 @@ import org.apache.sshd.agent.SshAgentFactory; import org.apache.sshd.agent.SshAgentServer; import org.apache.sshd.agent.common.AgentDelegate; import org.apache.sshd.common.FactoryManager; -import org.apache.sshd.common.NamedFactory; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.session.ConnectionService; public class LocalAgentFactory implements SshAgentFactory { - public static final List<NamedFactory<Channel>> DEFAULT_FORWARDING_CHANNELS = + public static final List<ChannelFactory> DEFAULT_FORWARDING_CHANNELS = Collections.unmodifiableList( - Arrays.<NamedFactory<Channel>>asList( + Arrays.asList( ChannelAgentForwardingFactory.OPENSSH, ChannelAgentForwardingFactory.IETF)); @@ -54,7 +53,7 @@ public class LocalAgentFactory implements SshAgentFactory { } @Override - public List<NamedFactory<Channel>> getChannelForwardingFactories(FactoryManager manager) { + public List<ChannelFactory> getChannelForwardingFactories(FactoryManager manager) { return DEFAULT_FORWARDING_CHANNELS; } diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/local/ProxyAgentFactory.java b/sshd-core/src/main/java/org/apache/sshd/agent/local/ProxyAgentFactory.java index ab19539..54d884d 100644 --- a/sshd-core/src/main/java/org/apache/sshd/agent/local/ProxyAgentFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/agent/local/ProxyAgentFactory.java @@ -30,10 +30,9 @@ import org.apache.sshd.agent.SshAgentServer; import org.apache.sshd.agent.unix.AprLibrary; import org.apache.sshd.agent.unix.UnixAgentFactory; import org.apache.sshd.common.FactoryManager; -import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.PropertyResolver; import org.apache.sshd.common.PropertyResolverUtils; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.session.ConnectionService; import org.apache.sshd.common.session.Session; import org.apache.sshd.common.util.GenericUtils; @@ -52,7 +51,7 @@ public class ProxyAgentFactory implements SshAgentFactory { } @Override - public List<NamedFactory<Channel>> getChannelForwardingFactories(FactoryManager manager) { + public List<ChannelFactory> getChannelForwardingFactories(FactoryManager manager) { return isPreferredUnixAgent(manager) ? UnixAgentFactory.DEFAULT_FORWARDING_CHANNELS : LocalAgentFactory.DEFAULT_FORWARDING_CHANNELS; diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwardingFactory.java b/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwardingFactory.java index 6811770..8c6dc7b 100644 --- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwardingFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwardingFactory.java @@ -18,9 +18,12 @@ */ package org.apache.sshd.agent.unix; +import java.io.IOException; + import org.apache.sshd.common.Factory; import org.apache.sshd.common.channel.Channel; import org.apache.sshd.common.channel.ChannelFactory; +import org.apache.sshd.common.session.Session; import org.apache.sshd.common.util.ValidateUtils; import org.apache.sshd.common.util.threads.CloseableExecutorService; @@ -51,8 +54,9 @@ public class ChannelAgentForwardingFactory implements ChannelFactory { } @Override - public Channel create() { - CloseableExecutorService executorService = executorServiceFactory != null ? executorServiceFactory.create() : null; + public Channel createChannel(Session session) throws IOException { + CloseableExecutorService executorService = + executorServiceFactory != null ? executorServiceFactory.create() : null; ChannelAgentForwarding channel = new ChannelAgentForwarding(executorService); return channel; } diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/UnixAgentFactory.java b/sshd-core/src/main/java/org/apache/sshd/agent/unix/UnixAgentFactory.java index b30bbb3..afa136d 100644 --- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/UnixAgentFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/UnixAgentFactory.java @@ -30,9 +30,8 @@ import org.apache.sshd.agent.SshAgentFactory; import org.apache.sshd.agent.SshAgentServer; import org.apache.sshd.common.Factory; import org.apache.sshd.common.FactoryManager; -import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.SshException; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.session.ConnectionService; import org.apache.sshd.common.session.Session; import org.apache.sshd.common.util.GenericUtils; @@ -44,9 +43,9 @@ import org.apache.sshd.server.session.ServerSession; * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ public class UnixAgentFactory implements SshAgentFactory { - public static final List<NamedFactory<Channel>> DEFAULT_FORWARDING_CHANNELS = + public static final List<ChannelFactory> DEFAULT_FORWARDING_CHANNELS = Collections.unmodifiableList( - Arrays.<NamedFactory<Channel>>asList( + Arrays.asList( ChannelAgentForwardingFactory.OPENSSH, ChannelAgentForwardingFactory.IETF)); @@ -65,11 +64,11 @@ public class UnixAgentFactory implements SshAgentFactory { } @Override - public List<NamedFactory<Channel>> getChannelForwardingFactories(FactoryManager manager) { + public List<ChannelFactory> getChannelForwardingFactories(FactoryManager manager) { if (executorServiceFactory != null) { return DEFAULT_FORWARDING_CHANNELS.stream() - .map(cf -> new ChannelAgentForwardingFactory(cf.getName(), executorServiceFactory)) - .collect(Collectors.toList()); + .map(cf -> new ChannelAgentForwardingFactory(cf.getName(), executorServiceFactory)) + .collect(Collectors.toList()); } else { return DEFAULT_FORWARDING_CHANNELS; } diff --git a/sshd-core/src/main/java/org/apache/sshd/client/ClientBuilder.java b/sshd-core/src/main/java/org/apache/sshd/client/ClientBuilder.java index e720768..7c60a59 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/ClientBuilder.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/ClientBuilder.java @@ -34,7 +34,7 @@ import org.apache.sshd.client.keyverifier.AcceptAllServerKeyVerifier; import org.apache.sshd.client.keyverifier.ServerKeyVerifier; import org.apache.sshd.common.BaseBuilder; import org.apache.sshd.common.NamedFactory; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.channel.RequestHandler; import org.apache.sshd.common.compression.BuiltinCompressions; import org.apache.sshd.common.compression.CompressionFactory; @@ -92,7 +92,7 @@ public class ClientBuilder extends BaseBuilder<SshClient, ClientBuilder> { public static final List<CompressionFactory> DEFAULT_COMPRESSION_FACTORIES = Collections.unmodifiableList(Collections.singletonList(BuiltinCompressions.none)); - public static final List<NamedFactory<Channel>> DEFAULT_CHANNEL_FACTORIES = + public static final List<ChannelFactory> DEFAULT_CHANNEL_FACTORIES = Collections.unmodifiableList(Collections.singletonList(ForwardedTcpipFactory.INSTANCE)); public static final List<RequestHandler<ConnectionService>> DEFAULT_GLOBAL_REQUEST_HANDLERS = Collections.unmodifiableList(Collections.singletonList(OpenSshHostKeysHandler.INSTANCE)); diff --git a/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java b/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java index 300ec3f..f9dbaf4 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/SshClient.java @@ -66,10 +66,9 @@ import org.apache.sshd.client.simple.SimpleClient; import org.apache.sshd.common.AttributeRepository; import org.apache.sshd.common.Closeable; import org.apache.sshd.common.Factory; -import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.NamedResource; import org.apache.sshd.common.ServiceFactory; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.config.keys.FilePasswordProvider; import org.apache.sshd.common.config.keys.KeyUtils; import org.apache.sshd.common.config.keys.PublicKeyEntry; @@ -366,15 +365,17 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa // Register the additional agent forwarding channel if needed SshAgentFactory agentFactory = getAgentFactory(); if (agentFactory != null) { - List<NamedFactory<Channel>> forwarders = + List<ChannelFactory> forwarders = ValidateUtils.checkNotNullAndNotEmpty( - agentFactory.getChannelForwardingFactories(this), "No agent channel forwarding factories for %s", agentFactory); - List<NamedFactory<Channel>> factories = getChannelFactories(); + agentFactory.getChannelForwardingFactories(this), + "No agent channel forwarding factories for %s", + agentFactory); + List<ChannelFactory> factories = getChannelFactories(); if (GenericUtils.isEmpty(factories)) { factories = forwarders; } else { // create a copy in case un-modifiable original - List<NamedFactory<Channel>> factories2 = + List<ChannelFactory> factories2 = new ArrayList<>(factories.size() + forwarders.size()); factories2.addAll(factories); factories2.addAll(forwarders); diff --git a/sshd-core/src/main/java/org/apache/sshd/common/BaseBuilder.java b/sshd-core/src/main/java/org/apache/sshd/common/BaseBuilder.java index c578e5a..5dc33ce 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/BaseBuilder.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/BaseBuilder.java @@ -23,7 +23,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.channel.RequestHandler; import org.apache.sshd.common.channel.throttle.ChannelStreamPacketWriterResolver; import org.apache.sshd.common.cipher.BuiltinCiphers; @@ -134,7 +134,7 @@ public class BaseBuilder<T extends AbstractFactoryManager, S extends BaseBuilder protected List<NamedFactory<Mac>> macFactories; protected List<NamedFactory<Signature>> signatureFactories; protected Factory<Random> randomFactory; - protected List<NamedFactory<Channel>> channelFactories; + protected List<ChannelFactory> channelFactories; protected FileSystemFactory fileSystemFactory; protected ForwardingFilterFactory forwarderFactory; protected List<RequestHandler<ConnectionService>> globalRequestHandlers; @@ -208,7 +208,7 @@ public class BaseBuilder<T extends AbstractFactoryManager, S extends BaseBuilder return me(); } - public S channelFactories(List<NamedFactory<Channel>> channelFactories) { + public S channelFactories(List<ChannelFactory> channelFactories) { this.channelFactories = channelFactories; return me(); } diff --git a/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java b/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java index aec9f5d..c0c9999 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java @@ -24,7 +24,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.apache.sshd.agent.SshAgentFactory; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.channel.ChannelListenerManager; import org.apache.sshd.common.channel.RequestHandler; import org.apache.sshd.common.channel.throttle.ChannelStreamPacketWriterResolverManager; @@ -403,9 +403,9 @@ public interface FactoryManager /** * Retrieve the list of named factories for <code>Channel</code> objects. * - * @return A list of named <code>Channel</code> factories, never {@code null} + * @return A list of {@link ChannelFactory}-ies, never {@code null} */ - List<NamedFactory<Channel>> getChannelFactories(); + List<ChannelFactory> getChannelFactories(); /** * Retrieve the agent factory for creating <code>SshAgent</code> objects. diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelFactory.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelFactory.java index a19d56c..e13b0d5 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelFactory.java @@ -19,13 +19,38 @@ package org.apache.sshd.common.channel; -import org.apache.sshd.common.NamedFactory; +import java.io.IOException; +import java.util.Collection; + +import org.apache.sshd.common.NamedResource; +import org.apache.sshd.common.session.Session; /** * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ -// CHECKSTYLE:OFF -public interface ChannelFactory extends NamedFactory<Channel> { - // nothing extra +public interface ChannelFactory extends NamedResource { + /** + * @param session The {@link Session} through which the request is made + * @return The relevant {@link Channel} + * @throws IOException If failed to create the requested instance + */ + Channel createChannel(Session session) throws IOException; + + /** + * @param session The {@link Session} through which the request is made + * @param factories The available factories + * @param name The required factory name to use + * @return The created {@link Channel} - {@code null} if no match found + * @throws IOException If failed to create the requested instance + */ + static Channel createChannel( + Session session, Collection<? extends ChannelFactory> factories, String name) + throws IOException { + ChannelFactory f = NamedResource.findByName(name, String.CASE_INSENSITIVE_ORDER, factories); + if (f != null) { + return f.createChannel(session); + } else { + return null; + } + } } -//CHECKSTYLE:ON diff --git a/sshd-core/src/main/java/org/apache/sshd/common/helpers/AbstractFactoryManager.java b/sshd-core/src/main/java/org/apache/sshd/common/helpers/AbstractFactoryManager.java index 6549572..86c1963 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/helpers/AbstractFactoryManager.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/helpers/AbstractFactoryManager.java @@ -35,12 +35,11 @@ import org.apache.sshd.agent.SshAgentFactory; import org.apache.sshd.common.AttributeRepository; import org.apache.sshd.common.Factory; import org.apache.sshd.common.FactoryManager; -import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.PropertyResolver; import org.apache.sshd.common.PropertyResolverUtils; import org.apache.sshd.common.ServiceFactory; import org.apache.sshd.common.SyspropsMapWrapper; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.channel.ChannelListener; import org.apache.sshd.common.channel.RequestHandler; import org.apache.sshd.common.channel.throttle.ChannelStreamPacketWriterResolver; @@ -73,7 +72,7 @@ public abstract class AbstractFactoryManager extends AbstractKexFactoryManager i protected IoServiceFactoryFactory ioServiceFactoryFactory; protected IoServiceFactory ioServiceFactory; protected Factory<Random> randomFactory; - protected List<NamedFactory<Channel>> channelFactories; + protected List<ChannelFactory> channelFactories; protected SshAgentFactory agentFactory; protected ScheduledExecutorService executor; protected boolean shutdownExecutor; @@ -208,11 +207,11 @@ public abstract class AbstractFactoryManager extends AbstractKexFactoryManager i } @Override - public List<NamedFactory<Channel>> getChannelFactories() { + public List<ChannelFactory> getChannelFactories() { return channelFactories; } - public void setChannelFactories(List<NamedFactory<Channel>> channelFactories) { + public void setChannelFactories(List<ChannelFactory> channelFactories) { this.channelFactories = channelFactories; } diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java index 77cf06c..284d8c5 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java @@ -41,10 +41,10 @@ import org.apache.sshd.client.channel.AbstractClientChannel; import org.apache.sshd.client.future.OpenFuture; import org.apache.sshd.common.Closeable; import org.apache.sshd.common.FactoryManager; -import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.channel.AbstractChannel; import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.channel.RequestHandler; import org.apache.sshd.common.channel.Window; import org.apache.sshd.common.channel.exception.SshChannelNotFoundException; @@ -774,7 +774,7 @@ public abstract class AbstractConnectionService AbstractSession session = getSession(); FactoryManager manager = Objects.requireNonNull(session.getFactoryManager(), "No factory manager"); - Channel channel = NamedFactory.create(manager.getChannelFactories(), type); + Channel channel = ChannelFactory.createChannel(session, manager.getChannelFactories(), type); if (channel == null) { // TODO add language tag configurable control sendChannelOpenFailure(buffer, sender, @@ -792,7 +792,8 @@ public abstract class AbstractConnectionService log.debug("operationComplete({}) send SSH_MSG_CHANNEL_OPEN_CONFIRMATION recipient={}, sender={}, window-size={}, packet-size={}", channel, sender, channelId, window.getSize(), window.getPacketSize()); } - Buffer buf = session.createBuffer(SshConstants.SSH_MSG_CHANNEL_OPEN_CONFIRMATION, Integer.SIZE); + Buffer buf = + session.createBuffer(SshConstants.SSH_MSG_CHANNEL_OPEN_CONFIRMATION, Integer.SIZE); buf.putInt(sender); // remote (server side) identifier buf.putInt(channelId); // local (client side) identifier buf.putInt(window.getSize()); @@ -813,7 +814,8 @@ public abstract class AbstractConnectionService AbstractConnectionService.this, future); } - Buffer buf = session.createBuffer(SshConstants.SSH_MSG_CHANNEL_OPEN_FAILURE, message.length() + Long.SIZE); + Buffer buf = + session.createBuffer(SshConstants.SSH_MSG_CHANNEL_OPEN_FAILURE, message.length() + Long.SIZE); sendChannelOpenFailure(buf, sender, reasonCode, message, ""); } } catch (IOException e) { diff --git a/sshd-core/src/main/java/org/apache/sshd/server/ServerBuilder.java b/sshd-core/src/main/java/org/apache/sshd/server/ServerBuilder.java index b6c3144..0510141 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/ServerBuilder.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/ServerBuilder.java @@ -26,7 +26,7 @@ import java.util.function.Function; import org.apache.sshd.common.BaseBuilder; import org.apache.sshd.common.NamedFactory; -import org.apache.sshd.common.channel.Channel; +import org.apache.sshd.common.channel.ChannelFactory; import org.apache.sshd.common.channel.RequestHandler; import org.apache.sshd.common.compression.BuiltinCompressions; import org.apache.sshd.common.compression.CompressionFactory; @@ -60,9 +60,9 @@ public class ServerBuilder extends BaseBuilder<SshServer, ServerBuilder> { ? DHGEXServer.newFactory(factory) : DHGServer.newFactory(factory); - public static final List<NamedFactory<Channel>> DEFAULT_CHANNEL_FACTORIES = + public static final List<ChannelFactory> DEFAULT_CHANNEL_FACTORIES = Collections.unmodifiableList( - Arrays.<NamedFactory<Channel>>asList( + Arrays.asList( ChannelSessionFactory.INSTANCE, DirectTcpipFactory.INSTANCE )); diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java index 00c2ca3..1987d5d 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java @@ -83,7 +83,7 @@ import org.apache.sshd.server.x11.X11ForwardSupport; */ public class ChannelSession extends AbstractServerChannel { public static final List<ChannelRequestHandler> DEFAULT_HANDLERS = - Collections.<ChannelRequestHandler>singletonList(PuttyRequestHandler.INSTANCE); + Collections.singletonList(PuttyRequestHandler.INSTANCE); /** * Maximum amount of extended (a.k.a. STDERR) data allowed to be accumulated @@ -743,7 +743,8 @@ public class ChannelSession extends AbstractServerChannel { if (extendedDataBuffer != null) { if (extendedDataWriter == null) { - throw new UnsupportedOperationException("No extended data writer available though " + extendedDataBuffer.available() + " bytes accumulated"); + throw new UnsupportedOperationException( + "No extended data writer available though " + extendedDataBuffer.available() + " bytes accumulated"); } Buffer buffer = extendedDataBuffer; @@ -755,7 +756,8 @@ public class ChannelSession extends AbstractServerChannel { try { closeShell(exitValue); if (log.isDebugEnabled()) { - log.debug("onExit({}) code={} message='{}' shell closed", ChannelSession.this, exitValue, exitMessage); + log.debug("onExit({}) code={} message='{}' shell closed", + ChannelSession.this, exitValue, exitMessage); } } catch (IOException e) { log.warn("onExit({}) code={} message='{}' {} closing shell: {}", @@ -771,10 +773,14 @@ public class ChannelSession extends AbstractServerChannel { return v != null ? v.intValue() : 0; } - protected RequestHandler.Result handleAgentForwarding(String requestType, Buffer buffer, boolean wantReply) throws IOException { + protected RequestHandler.Result handleAgentForwarding( + String requestType, Buffer buffer, boolean wantReply) + throws IOException { ServerSession session = getServerSession(); PropertyResolverUtils.updateProperty(session, FactoryManager.AGENT_FORWARDING_TYPE, requestType); - FactoryManager manager = Objects.requireNonNull(session.getFactoryManager(), "No session factory manager"); + + FactoryManager manager = + Objects.requireNonNull(session.getFactoryManager(), "No session factory manager"); AgentForwardingFilter filter = manager.getAgentForwardingFilter(); SshAgentFactory factory = manager.getAgentFactory(); boolean debugEnabled = log.isDebugEnabled(); @@ -808,14 +814,17 @@ public class ChannelSession extends AbstractServerChannel { return RequestHandler.Result.ReplySuccess; } - protected RequestHandler.Result handleX11Forwarding(String requestType, Buffer buffer, boolean wantReply) throws IOException { + protected RequestHandler.Result handleX11Forwarding( + String requestType, Buffer buffer, boolean wantReply) + throws IOException { ServerSession session = getServerSession(); boolean singleConnection = buffer.getBoolean(); String authProtocol = buffer.getString(); String authCookie = buffer.getString(); int screenId = buffer.getInt(); - FactoryManager manager = Objects.requireNonNull(session.getFactoryManager(), "No factory manager"); + FactoryManager manager = + Objects.requireNonNull(session.getFactoryManager(), "No factory manager"); X11ForwardingFilter filter = manager.getX11ForwardingFilter(); boolean debugEnabled = log.isDebugEnabled(); try { @@ -844,7 +853,8 @@ public class ChannelSession extends AbstractServerChannel { return RequestHandler.Result.ReplyFailure; } - String display = x11Forward.createDisplay(singleConnection, authProtocol, authCookie, screenId); + String display = + x11Forward.createDisplay(singleConnection, authProtocol, authCookie, screenId); if (debugEnabled) { log.debug("handleX11Forwarding({}) single={}, protocol={}, cookie={}, screen={} - display='{}'", this, singleConnection, authProtocol, authCookie, screenId, display); @@ -858,7 +868,8 @@ public class ChannelSession extends AbstractServerChannel { } protected void addEnvVariable(String name, String value) { - getEnvironment().set(name, value); + StandardEnvironment e = getEnvironment(); + e.set(name, value); } public StandardEnvironment getEnvironment() { diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSessionFactory.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSessionFactory.java index f1df61f..e8d9a81 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSessionFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSessionFactory.java @@ -18,8 +18,11 @@ */ package org.apache.sshd.server.channel; +import java.io.IOException; + import org.apache.sshd.common.channel.Channel; import org.apache.sshd.common.channel.ChannelFactory; +import org.apache.sshd.common.session.Session; /** * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> @@ -37,7 +40,7 @@ public class ChannelSessionFactory implements ChannelFactory { } @Override - public Channel create() { + public Channel createChannel(Session session) throws IOException { return new ChannelSession(); } } \ No newline at end of file diff --git a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java index ea0e365..b621353 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java @@ -87,9 +87,8 @@ public class TcpipServerChannel extends AbstractServerChannel implements Forward } @Override - public Channel create() { - TcpipServerChannel channel = new TcpipServerChannel(getType(), ThreadUtils.noClose(getExecutorService())); - return channel; + public Channel createChannel(Session session) throws IOException { + return new TcpipServerChannel(getType(), ThreadUtils.noClose(getExecutorService())); } } diff --git a/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java b/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java index 015e0c7..434ac66 100644 --- a/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java @@ -196,7 +196,7 @@ public class ClientTest extends BaseTestSupport { sshd.setChannelFactories(Arrays.asList( new ChannelSessionFactory() { @Override - public Channel create() { + public Channel createChannel(Session session) throws IOException { return new ChannelSession() { @SuppressWarnings("synthetic-access") @Override diff --git a/sshd-core/src/test/java/org/apache/sshd/common/channel/WindowTest.java b/sshd-core/src/test/java/org/apache/sshd/common/channel/WindowTest.java index c294b11..5c8a641 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/channel/WindowTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/channel/WindowTest.java @@ -109,7 +109,7 @@ public class WindowTest extends BaseTestSupport { sshd.setChannelFactories(Arrays.asList( new ChannelSessionFactory() { @Override - public Channel create() { + public Channel createChannel(Session session) throws IOException { return new ChannelSession() { @SuppressWarnings("synthetic-access") @Override diff --git a/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/ClientTest.java b/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/ClientTest.java index 2affc1b..c72b876 100644 --- a/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/ClientTest.java +++ b/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/ClientTest.java @@ -146,7 +146,7 @@ public class ClientTest extends BaseTestSupport { sshd.setChannelFactories(Arrays.asList( new ChannelSessionFactory() { @Override - public Channel create() { + public Channel createChannel(Session session) throws IOException { return new ChannelSession() { @SuppressWarnings("synthetic-access") @Override