]> source.dussan.org Git - gitblit.git/commitdiff
Add support for NIO2 IoSession
authorDavid Ostrovsky <david@ostrovsky.org>
Thu, 13 Mar 2014 23:34:50 +0000 (00:34 +0100)
committerJames Moger <james.moger@gitblit.com>
Thu, 10 Apr 2014 22:58:08 +0000 (18:58 -0400)
Starting from version 0.9.0 Apache SSHD project added support for NIO2
IoSession. To use the new NIO2 session the `backend` option must be set
to `NIO2`.

By default, `NIO2`.

Change-Id: I06cf92b02e80ecf9e8bfbd9f6d6d623dfe3ccff3

src/main/distrib/data/gitblit.properties
src/main/java/com/gitblit/transport/ssh/SshDaemon.java

index 2338cc5b6113025e13a4209ea91af71df058561b..64a52f5cc548da1898e8438b2be4a0b13e0ecb43 100644 (file)
@@ -124,6 +124,11 @@ git.sshKeysManager = com.gitblit.transport.ssh.FileKeyManager
 # SINCE 1.5.0\r
 git.sshKeysFolder= ${baseFolder}/ssh\r
 \r
+# SSH backend NIO2|MINA.\r
+#\r
+# SINCE 1.5.0\r
+git.sshBackend = NIO2\r
+\r
 # Allow push/pull over http/https with JGit servlet.\r
 # If you do NOT want to allow Git clients to clone/push to Gitblit set this\r
 # to false.  You might want to do this if you are only using ssh:// or git://.\r
index 5bd397d77763627c4cd5aebd6c5da37807c62b09..f0429a7c2fbc7d17aed7f82f1640f19152520a9a 100644 (file)
@@ -24,6 +24,12 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import javax.inject.Singleton;
 
 import org.apache.sshd.SshServer;
+import org.apache.sshd.common.io.IoServiceFactory;
+import org.apache.sshd.common.io.IoServiceFactoryFactory;
+import org.apache.sshd.common.io.mina.MinaServiceFactory;
+import org.apache.sshd.common.io.mina.MinaServiceFactoryFactory;
+import org.apache.sshd.common.io.nio2.Nio2ServiceFactory;
+import org.apache.sshd.common.io.nio2.Nio2ServiceFactoryFactory;
 import org.apache.sshd.server.keyprovider.PEMGeneratorHostKeyProvider;
 import org.eclipse.jgit.internal.JGitText;
 import org.slf4j.Logger;
@@ -59,6 +65,10 @@ public class SshDaemon {
 
        private final Logger log = LoggerFactory.getLogger(SshDaemon.class);
 
+       public static enum SshSessionBackend {
+               MINA, NIO2
+       }
+       
        /**
         * 22: IANA assigned port number for ssh. Note that this is a distinct
         * concept from gitblit's default conf for ssh port -- this "default" is
@@ -90,6 +100,14 @@ public class SshDaemon {
                                "localhost");
 
                IKeyManager keyManager = getKeyManager();
+
+               String sshBackendStr = settings.getString(Keys.git.sshBackend,
+                               SshSessionBackend.NIO2.name());
+               SshSessionBackend backend = SshSessionBackend.valueOf(sshBackendStr);
+               System.setProperty(IoServiceFactoryFactory.class.getName(),
+                   backend == SshSessionBackend.MINA
+                       ? MinaServiceFactoryFactory.class.getName()
+                       : Nio2ServiceFactoryFactory.class.getName());
                
                InetSocketAddress addr;
                if (StringUtils.isEmpty(bindInterface)) {