From bf4fc5c25ec31566b0fc1ee2e5e8bc15e5512893 Mon Sep 17 00:00:00 2001
From: David Ostrovsky <david@ostrovsky.org>
Date: Thu, 10 Apr 2014 18:58:08 -0400
Subject: [PATCH] Add support for NIO2 IoSession

---
 src/main/java/com/gitblit/transport/ssh/SshDaemon.java |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
index 5bd397d..f0429a7 100644
--- a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
+++ b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
@@ -24,6 +24,12 @@
 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 @@
 
 	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 @@
 				"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)) {

--
Gitblit v1.9.1