Updated Branches: refs/heads/master d7c21f799 -> 092e05ea4
[SSHD-188] Session timeout doesn't call destroy() from InvertedShell Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/092e05ea Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/092e05ea Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/092e05ea Branch: refs/heads/master Commit: 092e05ea4e0b5e7c2a7ca0b3d5d21be96bf459fe Parents: d7c21f7 Author: Guillaume Nodet <[email protected]> Authored: Mon Jul 22 21:03:39 2013 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Mon Jul 22 21:03:39 2013 +0200 ---------------------------------------------------------------------- .../sshd/client/session/ClientSessionImpl.java | 2 +- .../sshd/common/session/AbstractSession.java | 2 +- .../sshd/server/session/ServerSession.java | 2 +- .../test/java/org/apache/sshd/ServerTest.java | 24 +++++++++++++++++++- 4 files changed, 26 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/092e05ea/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java index d40173f..1b46efc 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java @@ -302,7 +302,7 @@ public class ClientSessionImpl extends AbstractSession implements ClientSession int code = buffer.getInt(); String msg = buffer.getString(); log.info("Received SSH_MSG_DISCONNECT (reason={}, msg={})", code, msg); - close(false); + close(true); break; } case SSH_MSG_UNIMPLEMENTED: { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/092e05ea/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java b/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java index 456ba40..ad83261 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java @@ -910,7 +910,7 @@ public abstract class AbstractSession implements Session { WriteFuture f = writePacket(buffer); f.addListener(new IoFutureListener() { public void operationComplete(IoFuture future) { - close(false); + close(true); } }); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/092e05ea/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java index 6cdf006..35ab197 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java @@ -335,7 +335,7 @@ public class ServerSession extends AbstractSession { } private void processIdleTimer() throws IOException { - disconnect(SshConstants.SSH2_DISCONNECT_PROTOCOL_ERROR, "User idle has timed out after " + idleTimeout + "ms."); + disconnect(SshConstants.SSH2_DISCONNECT_PROTOCOL_ERROR, "User session has timed out after being idled for " + idleTimeout + "ms."); } private void sendServerIdentification() { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/092e05ea/sshd-core/src/test/java/org/apache/sshd/ServerTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/ServerTest.java b/sshd-core/src/test/java/org/apache/sshd/ServerTest.java index a5bb9f3..6d17c8e 100644 --- a/sshd-core/src/test/java/org/apache/sshd/ServerTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/ServerTest.java @@ -69,7 +69,7 @@ public class ServerTest { sshd = SshServer.setUpDefaultServer(); sshd.setPort(port); sshd.setKeyPairProvider(Utils.createTestHostKeyProvider()); - sshd.setShellFactory(new EchoShellFactory()); + sshd.setShellFactory(new TestEchoShellFactory()); sshd.setPasswordAuthenticator(new BogusPasswordAuthenticator()); sshd.setSessionFactory(new org.apache.sshd.server.session.SessionFactory()); sshd.start(); @@ -145,6 +145,7 @@ public class ServerTest { @Test public void testIdleTimeout() throws Exception { final CountDownLatch latch = new CountDownLatch(1); + TestEchoShellFactory.TestEchoShell.latch = new CountDownLatch(1); sshd.getProperties().put(SshServer.IDLE_TIMEOUT, "1000"); sshd.getSessionFactory().addListener(new SessionListener() { @@ -173,6 +174,7 @@ public class ServerTest { int res = s.waitFor(ClientSession.CLOSED, 5000); assertTrue((res & ClientSession.CLOSED) != 0); assertTrue(latch.await(1, TimeUnit.SECONDS)); + assertTrue(TestEchoShellFactory.TestEchoShell.latch.await(1, TimeUnit.SECONDS)); } @Test @@ -197,8 +199,28 @@ public class ServerTest { s.close(false); } + public static class TestEchoShellFactory extends EchoShellFactory { + @Override + public Command create() { + return new TestEchoShell(); + } + public static class TestEchoShell extends EchoShell { + + public static CountDownLatch latch = new CountDownLatch(1); + + @Override + public void destroy() { + if (latch != null) { + latch.countDown(); + } + super.destroy(); + } + } + } + public static void main(String[] args) throws Exception { SshServer sshd = SshServer.setUpDefaultServer(); + sshd.getProperties().put(SshServer.IDLE_TIMEOUT, "10000"); sshd.setPort(8001); sshd.setKeyPairProvider(Utils.createTestHostKeyProvider()); sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory()));
