diff options
author | Shawn O. Pearce <sop@google.com> | 2009-05-14 10:26:59 -0700 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2009-05-14 10:58:44 -0700 |
commit | fc9081f4625b206619f9452b8688f26592a26fff (patch) | |
tree | f298b5b9018a99b67dbaa8cbdb48db8e5132dcaf | |
parent | 9410f2cf90dbc356f0db2abc74f69693ffcb1544 (diff) |
Honor sshd.tcpKeepAlive for TCP keep alive controls
Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r-- | Documentation/config-gerrit.txt | 7 | ||||
-rw-r--r-- | src/main/java/com/google/gerrit/server/ssh/GerritSshDaemon.java | 14 |
2 files changed, 18 insertions, 3 deletions
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt index 12a9bb3649..acd460b971 100644 --- a/Documentation/config-gerrit.txt +++ b/Documentation/config-gerrit.txt @@ -193,6 +193,13 @@ to permit fast restarts. + By default, true. +sshd.tcpKeepAlive:: ++ +If true, enables TCP keepalive messages to the other side, so +the daemon can terminate connections if the peer disappears. ++ +By default, true. + File `replication.config` ------------------------- diff --git a/src/main/java/com/google/gerrit/server/ssh/GerritSshDaemon.java b/src/main/java/com/google/gerrit/server/ssh/GerritSshDaemon.java index a02e0629f7..3bb4b2a596 100644 --- a/src/main/java/com/google/gerrit/server/ssh/GerritSshDaemon.java +++ b/src/main/java/com/google/gerrit/server/ssh/GerritSshDaemon.java @@ -21,6 +21,7 @@ import com.google.gwtorm.client.OrmException; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.session.IoSession; +import org.apache.mina.transport.socket.SocketSessionConfig; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import org.apache.sshd.SshServer; import org.apache.sshd.common.Cipher; @@ -154,12 +155,14 @@ public class GerritSshDaemon extends SshServer { private IoAcceptor acceptor; private boolean reuseAddress; + private boolean keepAlive; private GerritSshDaemon(final GerritServer srv) { setPort(Common.getGerritConfig().getSshdPort()); final RepositoryConfig cfg = srv.getGerritConfig(); reuseAddress = cfg.getBoolean("sshd", "reuseaddress", true); + keepAlive = cfg.getBoolean("sshd", "tcpkeepalive", true); if (SecurityUtils.isBouncyCastleRegistered()) { initProviderBouncyCastle(); @@ -177,10 +180,15 @@ public class GerritSshDaemon extends SshServer { setShellFactory(new NoShell()); setSessionFactory(new SessionFactory() { @Override - protected AbstractSession createSession(final IoSession ioSession) + protected AbstractSession createSession(final IoSession io) throws Exception { - final AbstractSession s = super.createSession(ioSession); - s.setAttribute(SshUtil.REMOTE_PEER, ioSession.getRemoteAddress()); + if (io.getConfig() instanceof SocketSessionConfig) { + final SocketSessionConfig c = (SocketSessionConfig) io.getConfig(); + c.setKeepAlive(keepAlive); + } + + final AbstractSession s = super.createSession(io); + s.setAttribute(SshUtil.REMOTE_PEER, io.getRemoteAddress()); return s; } }); |