Repository: mina-sshd Updated Branches: refs/heads/master 881e9db5e -> 9715c34fd
SSHD-838] Added IoServiceEventListener support to Netty 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/9715c34f Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/9715c34f Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/9715c34f Branch: refs/heads/master Commit: 9715c34fd5c715ac772a38381cc0babccab5dd3c Parents: 14ad944 Author: Goldstein Lyor <[email protected]> Authored: Sun Aug 5 16:01:35 2018 +0300 Committer: Lyor Goldstein <[email protected]> Committed: Sun Aug 5 19:35:53 2018 +0300 ---------------------------------------------------------------------- .../org/apache/sshd/netty/NettyIoAcceptor.java | 36 ++++++++++++++++-- .../org/apache/sshd/netty/NettyIoConnector.java | 39 +++++++++++++++++--- 2 files changed, 66 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9715c34f/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoAcceptor.java ---------------------------------------------------------------------- diff --git a/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoAcceptor.java b/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoAcceptor.java index 05e6dcc..371692a 100644 --- a/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoAcceptor.java +++ b/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoAcceptor.java @@ -34,6 +34,7 @@ import org.apache.sshd.common.future.CloseFuture; import org.apache.sshd.common.future.DefaultCloseFuture; import org.apache.sshd.common.io.IoAcceptor; import org.apache.sshd.common.io.IoHandler; +import org.apache.sshd.common.io.IoServiceEventListener; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; @@ -69,11 +70,38 @@ public class NettyIoAcceptor extends NettyIoService implements IoAcceptor { .handler(new LoggingHandler(LogLevel.INFO)) // TODO make this configurable .childHandler(new ChannelInitializer<SocketChannel>() { @Override + @SuppressWarnings("synthetic-access") public void initChannel(SocketChannel ch) throws Exception { - ChannelPipeline p = ch.pipeline(); - @SuppressWarnings("resource") - NettyIoSession nettyIoSession = new NettyIoSession(NettyIoAcceptor.this, handler); - p.addLast(nettyIoSession.adapter); + IoServiceEventListener listener = getIoServiceEventListener(); + SocketAddress local = ch.localAddress(); + SocketAddress remote = ch.remoteAddress(); + try { + if (listener != null) { + try { + listener.connectionAccepted(NettyIoAcceptor.this, local, remote); + } catch (Exception e) { + ch.close(); + throw e; + } + } + + ChannelPipeline p = ch.pipeline(); + @SuppressWarnings("resource") + NettyIoSession nettyIoSession = new NettyIoSession(NettyIoAcceptor.this, handler); + p.addLast(nettyIoSession.adapter); + } catch (Exception e) { + if (listener != null) { + try { + listener.abortAcceptedConnection(NettyIoAcceptor.this, local, remote, e); + } catch (Exception exc) { + if (log.isDebugEnabled()) { + log.debug("initChannel(" + ch + ") listener=" + listener + " ignoring abort event exception", exc); + } + } + } + + throw e; + } } }); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9715c34f/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoConnector.java ---------------------------------------------------------------------- diff --git a/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoConnector.java b/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoConnector.java index e6f0065..6d90490 100644 --- a/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoConnector.java +++ b/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoConnector.java @@ -25,6 +25,7 @@ import org.apache.sshd.common.future.DefaultSshFuture; import org.apache.sshd.common.io.IoConnectFuture; import org.apache.sshd.common.io.IoConnector; import org.apache.sshd.common.io.IoHandler; +import org.apache.sshd.common.io.IoServiceEventListener; import org.apache.sshd.common.io.IoSession; import io.netty.bootstrap.Bootstrap; @@ -51,18 +52,46 @@ public class NettyIoConnector extends NettyIoService implements IoConnector { public NettyIoConnector(NettyIoServiceFactory factory, IoHandler handler) { super(factory, handler); + channelGroup = new DefaultChannelGroup("sshd-connector-channels", GlobalEventExecutor.INSTANCE); bootstrap.group(factory.eventLoopGroup) .channel(NioSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 100) // TODO make this configurable .handler(new ChannelInitializer<SocketChannel>() { @Override + @SuppressWarnings("synthetic-access") protected void initChannel(SocketChannel ch) throws Exception { - @SuppressWarnings("resource") - NettyIoSession session = new NettyIoSession(NettyIoConnector.this, handler); - ChannelPipeline p = ch.pipeline(); - p.addLast(new LoggingHandler(LogLevel.INFO)); // TODO make this configurable - p.addLast(session.adapter); + IoServiceEventListener listener = getIoServiceEventListener(); + SocketAddress local = ch.localAddress(); + SocketAddress remote = ch.remoteAddress(); + try { + if (listener != null) { + try { + listener.connectionEstablished(NettyIoConnector.this, local, remote); + } catch (Exception e) { + ch.close(); + throw e; + } + } + + @SuppressWarnings("resource") + NettyIoSession session = new NettyIoSession(NettyIoConnector.this, handler); + ChannelPipeline p = ch.pipeline(); + p.addLast(new LoggingHandler(LogLevel.INFO)); // TODO make this configurable + p.addLast(session.adapter); + } catch (Exception e) { + if (listener != null) { + try { + listener.abortEstablishedConnection(NettyIoConnector.this, local, remote, e); + } catch (Exception exc) { + if (log.isDebugEnabled()) { + log.debug("initChannel(" + ch + ") listener=" + listener + " ignoring abort event exception", exc); + } + } + } + + throw e; + } } }); }
