Updated Branches: refs/heads/master e6005dc31 -> 5e69ae74a
[SSHD-226] ServerSession's idle timer is not reset, if server only sends data Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/5e69ae74 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/5e69ae74 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/5e69ae74 Branch: refs/heads/master Commit: 5e69ae74aa9b17d9678820187e5feaffddb1ed35 Parents: e6005dc Author: Guillaume Nodet <[email protected]> Authored: Wed Jul 17 21:36:53 2013 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Wed Jul 17 21:36:53 2013 +0200 ---------------------------------------------------------------------- .../apache/sshd/server/session/ServerSession.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/5e69ae74/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 67d3be9..12b4bf6 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 @@ -28,6 +28,7 @@ import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import org.apache.mina.core.future.WriteFuture; import org.apache.mina.core.session.IoSession; import org.apache.sshd.SshServer; import org.apache.sshd.agent.common.AgentForwardSupport; @@ -121,6 +122,19 @@ public class ServerSession extends AbstractSession { return getServerFactoryManager().getScheduledExecutorService(); } + @Override + public WriteFuture writePacket(Buffer buffer) throws IOException { + boolean rescheduleIdleTimer = getState() == State.Running; + if (rescheduleIdleTimer) { + unscheduleIdleTimer(); + } + WriteFuture future = super.writePacket(buffer); + if (rescheduleIdleTimer) { + scheduleIdleTimer(); + } + return future; + } + protected void handleMessage(Buffer buffer) throws Exception { SshConstants.Message cmd = buffer.getCommand(); log.debug("Received packet {}", cmd); @@ -291,6 +305,7 @@ public class ServerSession extends AbstractSession { // A timeout less than one means there is no timeout. return; } + unscheduleIdleTimer(); Runnable idleTimerTask = new Runnable() { public void run() { try {
