1 package org.opendaylight.openflowjava.protocol.impl.core;
\r
3 import io.netty.channel.Channel;
\r
4 import io.netty.channel.ChannelInitializer;
\r
5 import io.netty.channel.group.DefaultChannelGroup;
\r
6 import io.netty.channel.socket.SocketChannel;
\r
8 import java.net.InetAddress;
\r
9 import java.util.Iterator;
\r
10 import java.util.concurrent.TimeUnit;
\r
12 import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;
\r
13 import org.opendaylight.openflowjava.protocol.impl.connection.ConnectionAdapterFactory;
\r
14 import org.opendaylight.openflowjava.protocol.impl.connection.ConnectionFacade;
\r
15 import org.opendaylight.openflowjava.protocol.impl.core.TcpHandler.COMPONENT_NAMES;
\r
16 import org.slf4j.Logger;
\r
17 import org.slf4j.LoggerFactory;
\r
20 * @author michal.polkorab
\r
23 public class PublishingChannelInitializer extends ChannelInitializer<SocketChannel> {
\r
25 private static final Logger LOGGER = LoggerFactory
\r
26 .getLogger(PublishingChannelInitializer.class);
\r
27 private DefaultChannelGroup allChannels;
\r
28 private SwitchConnectionHandler switchConnectionHandler;
\r
29 private long switchIdleTimeout;
\r
34 public PublishingChannelInitializer() {
\r
35 allChannels = new DefaultChannelGroup("netty-receiver", null);
\r
39 protected void initChannel(SocketChannel ch) {
\r
40 InetAddress switchAddress = ch.remoteAddress().getAddress();
\r
41 LOGGER.info("Incoming connection from (remote address): " + switchAddress.toString());
\r
42 if (!switchConnectionHandler.accept(switchAddress)) {
\r
44 LOGGER.info("Incoming connection rejected");
\r
47 LOGGER.info("Incoming connection accepted - building pipeline");
\r
48 allChannels.add(ch);
\r
49 ConnectionFacade connectionAdapter = null;
\r
50 connectionAdapter = ConnectionAdapterFactory.createConnectionAdapter(ch);
\r
52 LOGGER.debug("calling plugin: "+switchConnectionHandler);
\r
53 switchConnectionHandler.onSwitchConnected(connectionAdapter);
\r
54 connectionAdapter.checkListeners();
\r
55 ch.pipeline().addLast(COMPONENT_NAMES.IDLE_HANDLER.name(), new IdleHandler(switchIdleTimeout, 0, 0, TimeUnit.MILLISECONDS));
\r
56 ch.pipeline().addLast(COMPONENT_NAMES.TLS_DETECTOR.name(), new TlsDetector());
\r
57 ch.pipeline().addLast(COMPONENT_NAMES.DELEGATING_INBOUND_HANDLER.name(), new DelegatingInboundHandler(connectionAdapter));
\r
58 } catch (Exception e) {
\r
59 LOGGER.error(e.getMessage(), e);
\r
65 * @return iterator through active connections
\r
67 public Iterator<Channel> getConnectionIterator() {
\r
68 return allChannels.iterator();
\r
72 * @return amount of active channels
\r
75 return allChannels.size();
\r
79 * @param switchConnectionHandler the switchConnectionHandler to set
\r
81 public void setSwitchConnectionHandler(SwitchConnectionHandler switchConnectionHandler) {
\r
82 this.switchConnectionHandler = switchConnectionHandler;
\r
86 * @param switchIdleTimeout the switchIdleTimeout to set
\r
88 public void setSwitchIdleTimeout(long switchIdleTimeout) {
\r
89 this.switchIdleTimeout = switchIdleTimeout;
\r