[SSHD-838] Added IoServiceEventListener support to MINA I/O service factory
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/14ad9440 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/14ad9440 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/14ad9440 Branch: refs/heads/master Commit: 14ad9440039dec60f7f35c6b322fca9cd4d783e9 Parents: f6e637f Author: Goldstein Lyor <[email protected]> Authored: Sun Aug 5 15:47:56 2018 +0300 Committer: Lyor Goldstein <[email protected]> Committed: Sun Aug 5 19:35:53 2018 +0300 ---------------------------------------------------------------------- .../sshd/common/io/mina/MinaAcceptor.java | 33 ++++++++++++++++++++ .../sshd/common/io/mina/MinaConnector.java | 32 +++++++++++++++++++ .../apache/sshd/common/io/mina/MinaService.java | 2 +- 3 files changed, 66 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/14ad9440/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java ---------------------------------------------------------------------- diff --git a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java index 5f540e6..8c38132 100644 --- a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java +++ b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaAcceptor.java @@ -28,9 +28,11 @@ import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.service.IoHandler; import org.apache.mina.core.service.IoProcessor; import org.apache.mina.core.service.IoService; +import org.apache.mina.core.session.IoSession; import org.apache.mina.transport.socket.nio.NioSession; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import org.apache.sshd.common.FactoryManager; +import org.apache.sshd.common.io.IoServiceEventListener; /** * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> @@ -76,6 +78,37 @@ public class MinaAcceptor extends MinaService implements org.apache.sshd.common. } @Override + public void sessionCreated(IoSession session) throws Exception { + IoServiceEventListener listener = getIoServiceEventListener(); + SocketAddress local = session.getLocalAddress(); + SocketAddress remote = session.getRemoteAddress(); + try { + if (listener != null) { + try { + listener.connectionAccepted(this, local, remote); + } catch (Exception e) { + session.closeNow(); + throw e; + } + } + + super.sessionCreated(session); + } catch (Exception e) { + if (listener != null) { + try { + listener.abortAcceptedConnection(this, local, remote, e); + } catch (Exception exc) { + if (log.isDebugEnabled()) { + log.debug("sessionCreated(" + session + ") listener=" + listener + " ignoring abort event exception", exc); + } + } + } + + throw e; + } + } + + @Override protected IoService getIoService() { return getAcceptor(); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/14ad9440/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java ---------------------------------------------------------------------- diff --git a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java index 22e85cc..e7229ec 100644 --- a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java +++ b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaConnector.java @@ -32,6 +32,7 @@ import org.apache.mina.transport.socket.nio.NioSocketConnector; import org.apache.sshd.common.FactoryManager; import org.apache.sshd.common.future.DefaultSshFuture; import org.apache.sshd.common.io.IoConnectFuture; +import org.apache.sshd.common.io.IoServiceEventListener; /** * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> @@ -74,6 +75,37 @@ public class MinaConnector extends MinaService implements org.apache.sshd.common } @Override + public void sessionCreated(IoSession session) throws Exception { + IoServiceEventListener listener = getIoServiceEventListener(); + SocketAddress local = session.getLocalAddress(); + SocketAddress remote = session.getRemoteAddress(); + try { + if (listener != null) { + try { + listener.connectionEstablished(this, local, remote); + } catch (Exception e) { + session.closeNow(); + throw e; + } + } + + super.sessionCreated(session); + } catch (Exception e) { + if (listener != null) { + try { + listener.abortEstablishedConnection(this, local, remote, e); + } catch (Exception exc) { + if (log.isDebugEnabled()) { + log.debug("sessionCreated(" + session + ") listener=" + listener + " ignoring abort event exception", exc); + } + } + } + + throw e; + } + } + + @Override public IoConnectFuture connect(SocketAddress address, SocketAddress localAddress) { class Future extends DefaultSshFuture<IoConnectFuture> implements IoConnectFuture { Future(Object lock) { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/14ad9440/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaService.java ---------------------------------------------------------------------- diff --git a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaService.java b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaService.java index c183795..b6edacf 100644 --- a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaService.java +++ b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaService.java @@ -51,7 +51,7 @@ public abstract class MinaService extends AbstractCloseable implements org.apach private IoServiceEventListener eventListener; - public MinaService(FactoryManager manager, org.apache.sshd.common.io.IoHandler handler, IoProcessor<NioSession> ioProcessor) { + protected MinaService(FactoryManager manager, org.apache.sshd.common.io.IoHandler handler, IoProcessor<NioSession> ioProcessor) { this.manager = Objects.requireNonNull(manager, "No factory manager provided"); this.handler = Objects.requireNonNull(handler, "No IoHandler provided"); this.ioProcessor = Objects.requireNonNull(ioProcessor, "No IoProcessor provided");
