2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowjava.protocol.impl.core;
11 import io.netty.channel.Channel;
12 import io.netty.channel.ChannelInitializer;
13 import io.netty.channel.group.DefaultChannelGroup;
14 import io.netty.channel.socket.SocketChannel;
16 import java.net.InetAddress;
17 import java.util.Iterator;
18 import java.util.concurrent.TimeUnit;
20 import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;
21 import org.opendaylight.openflowjava.protocol.impl.connection.ConnectionAdapterFactory;
22 import org.opendaylight.openflowjava.protocol.impl.connection.ConnectionFacade;
23 import org.opendaylight.openflowjava.protocol.impl.core.TcpHandler.COMPONENT_NAMES;
24 import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory;
25 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializationFactory;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
30 * Initializes the channel
31 * @author michal.polkorab
33 public class PublishingChannelInitializer extends ChannelInitializer<SocketChannel> {
35 private static final Logger LOGGER = LoggerFactory
36 .getLogger(PublishingChannelInitializer.class);
37 private final DefaultChannelGroup allChannels;
38 private SwitchConnectionHandler switchConnectionHandler;
39 private long switchIdleTimeout;
40 private boolean encryption;
41 private SerializationFactory serializationFactory;
42 private DeserializationFactory deserializationFactory;
47 public PublishingChannelInitializer() {
48 allChannels = new DefaultChannelGroup("netty-receiver", null);
52 protected void initChannel(final SocketChannel ch) {
53 InetAddress switchAddress = ch.remoteAddress().getAddress();
54 int port = ch.localAddress().getPort();
55 int remotePort = ch.remoteAddress().getPort();
56 LOGGER.info("Incoming connection from (remote address): " + switchAddress.toString()
57 + ":" + remotePort + " --> :" + port);
58 if (!switchConnectionHandler.accept(switchAddress)) {
60 LOGGER.info("Incoming connection rejected");
63 LOGGER.info("Incoming connection accepted - building pipeline");
65 ConnectionFacade connectionFacade = null;
66 connectionFacade = ConnectionAdapterFactory.createConnectionFacade(ch);
68 LOGGER.debug("calling plugin: "+switchConnectionHandler);
69 switchConnectionHandler.onSwitchConnected(connectionFacade);
70 connectionFacade.checkListeners();
71 TlsDetector tlsDetector;
72 ch.pipeline().addLast(COMPONENT_NAMES.IDLE_HANDLER.name(), new IdleHandler(switchIdleTimeout, 0, 0, TimeUnit.MILLISECONDS));
74 tlsDetector = new TlsDetector();
75 tlsDetector.setConnectionFacade(connectionFacade);
76 ch.pipeline().addLast(COMPONENT_NAMES.TLS_DETECTOR.name(), tlsDetector);
78 ch.pipeline().addLast(COMPONENT_NAMES.OF_FRAME_DECODER.name(), new OFFrameDecoder());
79 ch.pipeline().addLast(COMPONENT_NAMES.OF_VERSION_DETECTOR.name(), new OFVersionDetector());
80 OFDecoder ofDecoder = new OFDecoder();
81 ofDecoder.setDeserializationFactory(deserializationFactory);
82 ch.pipeline().addLast(COMPONENT_NAMES.OF_DECODER.name(), ofDecoder);
83 OFEncoder ofEncoder = new OFEncoder();
84 ofEncoder.setSerializationFactory(serializationFactory);
85 ch.pipeline().addLast(COMPONENT_NAMES.OF_ENCODER.name(), ofEncoder);
86 ch.pipeline().addLast(COMPONENT_NAMES.DELEGATING_INBOUND_HANDLER.name(), new DelegatingInboundHandler(connectionFacade));
88 connectionFacade.fireConnectionReadyNotification();
90 } catch (Exception e) {
91 LOGGER.error("Failed to initialize channel", e);
97 * @return iterator through active connections
99 public Iterator<Channel> getConnectionIterator() {
100 return allChannels.iterator();
104 * @return amount of active channels
107 return allChannels.size();
111 * @param switchConnectionHandler the switchConnectionHandler to set
113 public void setSwitchConnectionHandler(final SwitchConnectionHandler switchConnectionHandler) {
114 this.switchConnectionHandler = switchConnectionHandler;
118 * @param switchIdleTimeout the switchIdleTimeout to set
120 public void setSwitchIdleTimeout(final long switchIdleTimeout) {
121 this.switchIdleTimeout = switchIdleTimeout;
125 * @param tlsSupported
127 public void setEncryption(final boolean tlsSupported) {
128 encryption = tlsSupported;
132 * @param serializationFactory
134 public void setSerializationFactory(final SerializationFactory serializationFactory) {
135 this.serializationFactory = serializationFactory;
139 * @param deserializationFactory
141 public void setDeserializationFactory(final DeserializationFactory deserializationFactory) {
142 this.deserializationFactory = deserializationFactory;