This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mina-sshd.git
commit 75071c60d683124c93b6bdeb5d90ffe2acec0e8b Author: w <none> AuthorDate: Mon Oct 7 22:31:22 2019 -0700 ChannelSession: Split parsing from handlers # Conflicts: # sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java --- .../apache/sshd/server/channel/ChannelSession.java | 58 ++++++++++++++++++++-- 1 file changed, 55 insertions(+), 3 deletions(-) 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 ce642dd..bcc3e6d 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 @@ -22,6 +22,7 @@ import java.io.IOException; import java.io.OutputStream; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -427,10 +428,14 @@ public class ChannelSession extends AbstractServerChannel { protected RequestHandler.Result handleEnv(Buffer buffer, boolean wantReply) throws IOException { String name = buffer.getString(); String value = buffer.getString(); - addEnvVariable(name, value); if (log.isDebugEnabled()) { log.debug("handleEnv({}): {} = {}", this, name, value); } + return handleEnvParsed(name, value); + } + + protected RequestHandler.Result handleEnvParsed(String name, String value) throws IOException { + addEnvVariable(name, value); return RequestHandler.Result.ReplySuccess; } @@ -441,9 +446,8 @@ public class ChannelSession extends AbstractServerChannel { int tWidth = buffer.getInt(); int tHeight = buffer.getInt(); byte[] modes = buffer.getBytes(); - Environment environment = getEnvironment(); - Map<PtyMode, Integer> ptyModes = environment.getPtyModes(); + Map<PtyMode, Integer> ptyModes = new HashMap<>(); for (int i = 0; (i < modes.length) && (modes[i] != PtyMode.TTY_OP_END);) { int opcode = modes[i++] & 0x00FF; /* @@ -473,6 +477,15 @@ public class ChannelSession extends AbstractServerChannel { this, term, tColumns, tRows, tWidth, tHeight, ptyModes); } + return handlePtyReqParsed(term, tColumns, tRows, tWidth, tHeight, ptyModes); + } + + protected RequestHandler.Result handlePtyReqParsed( + String term, int tColumns, int tRows, int tWidth, int tHeight, + Map<PtyMode, Integer> ptyModes) + throws IOException { + Environment environment = getEnvironment(); + environment.getPtyModes().putAll(ptyModes); addEnvVariable(Environment.ENV_TERM, term); addEnvVariable(Environment.ENV_COLUMNS, Integer.toString(tColumns)); addEnvVariable(Environment.ENV_LINES, Integer.toString(tRows)); @@ -489,6 +502,12 @@ public class ChannelSession extends AbstractServerChannel { this, tColumns, tRows, tWidth, tHeight); } + return handleWindowChangeParsed(tColumns, tRows, tWidth, tHeight); + } + + protected RequestHandler.Result handleWindowChangeParsed( + int tColumns, int tRows, int tWidth, int tHeight) + throws IOException { StandardEnvironment e = getEnvironment(); e.set(Environment.ENV_COLUMNS, Integer.toString(tColumns)); e.set(Environment.ENV_LINES, Integer.toString(tRows)); @@ -503,6 +522,10 @@ public class ChannelSession extends AbstractServerChannel { log.debug("handleSignal({}): {}", this, name); } + return handleSignalParsed(name); + } + + protected RequestHandler.Result handleSignalParsed(String name) throws IOException { Signal signal = Signal.get(name); if (signal != null) { StandardEnvironment environ = getEnvironment(); @@ -520,6 +543,10 @@ public class ChannelSession extends AbstractServerChannel { log.debug("handleBreak({}) length={}", this, breakLength); } + return handleBreakParsed(breakLength); + } + + protected RequestHandler.Result handleBreakParsed(long breakLength) throws IOException { StandardEnvironment environ = getEnvironment(); environ.signal(this, Signal.INT); return RequestHandler.Result.ReplySuccess; @@ -536,6 +563,10 @@ public class ChannelSession extends AbstractServerChannel { return RequestHandler.Result.ReplyFailure; } + return handleShellParsed(request); + } + + protected RequestHandler.Result handleShellParsed(String request) throws IOException { ServerSession shellSession = Objects.requireNonNull(getServerSession(), "No server session"); ServerFactoryManager manager = Objects.requireNonNull(shellSession.getFactoryManager(), "No server factory manager"); ShellFactory factory = manager.getShellFactory(); @@ -576,6 +607,12 @@ public class ChannelSession extends AbstractServerChannel { } String commandLine = buffer.getString(); + return handleExecParsed(request, commandLine); + } + + protected RequestHandler.Result handleExecParsed( + String request, String commandLine) + throws IOException { ServerSession cmdSession = Objects.requireNonNull(getServerSession(), "No server session"); ServerFactoryManager manager = Objects.requireNonNull(cmdSession.getFactoryManager(), "No server factory manager"); CommandFactory factory = manager.getCommandFactory(); @@ -617,6 +654,10 @@ public class ChannelSession extends AbstractServerChannel { log.debug("handleSubsystem({})[want-reply={}] subsystem={}", this, wantReply, subsystem); } + return handleSubsystemParsed(request, subsystem); + } + + protected RequestHandler.Result handleSubsystemParsed(String request, String subsystem) throws IOException { ServerFactoryManager manager = Objects.requireNonNull(getServerSession(), "No server session").getFactoryManager(); Collection<SubsystemFactory> factories = Objects.requireNonNull(manager, "No server factory manager").getSubsystemFactories(); @@ -798,6 +839,10 @@ public class ChannelSession extends AbstractServerChannel { protected RequestHandler.Result handleAgentForwarding( String requestType, Buffer buffer, boolean wantReply) throws IOException { + return handleAgentForwardingParsed(requestType); + } + + protected RequestHandler.Result handleAgentForwardingParsed(String requestType) throws IOException { ServerSession session = getServerSession(); PropertyResolverUtils.updateProperty( session, FactoryManager.AGENT_FORWARDING_TYPE, requestType); @@ -845,6 +890,13 @@ public class ChannelSession extends AbstractServerChannel { String authCookie = buffer.getString(); int screenId = buffer.getInt(); + return handleX11ForwardingParsed(requestType, session, singleConnection, authProtocol, authCookie, screenId); + } + + protected RequestHandler.Result handleX11ForwardingParsed( + String requestType, ServerSession session, boolean singleConnection, + String authProtocol, String authCookie, int screenId) + throws IOException { FactoryManager manager = Objects.requireNonNull(session.getFactoryManager(), "No factory manager"); X11ForwardingFilter filter = manager.getX11ForwardingFilter(); boolean debugEnabled = log.isDebugEnabled();