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;
+                    }
                 }
             });
     }

Reply via email to