public class IdleHandler extends IdleStateHandler{
+ private static final Logger LOGGER = LoggerFactory.getLogger(IdleHandler.class);
+
public IdleHandler(long readerIdleTime, long writerIdleTime,
long allIdleTime, TimeUnit unit) {
super(readerIdleTime, writerIdleTime, allIdleTime, unit);
}
-
- private static final Logger LOGGER = LoggerFactory.getLogger(IdleHandler.class);
-
-
@Override
protected void channelIdle(ChannelHandlerContext ctx, IdleStateEvent evt)
throws Exception {
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.opendaylight.openflowjava.protocol.impl.core.TcpHandler.COMPONENT_NAMES;
/**
* Class for decoding incoming messages into message frames.
bb.readableBytes() + " < " + length);
return;
}
-
LOGGER.info("OF Protocol message received");
- enableOFVersionDetector(chc);
-
- List<String> componentList = chc.pipeline().names();
- LOGGER.debug(componentList.toString());
-
ByteBuf messageBuffer = bb.slice(bb.readerIndex(), length);
list.add(messageBuffer);
messageBuffer.retain();
bb.skipBytes(length);
}
- private static void enableOFVersionDetector(ChannelHandlerContext ctx) {
- if (ctx.pipeline().get(COMPONENT_NAMES.OF_VERSION_DETECTOR.name()) == null) {
- LOGGER.info("Adding OFVD");
- ctx.pipeline().addAfter(COMPONENT_NAMES.OF_FRAME_DECODER.name(),
- COMPONENT_NAMES.OF_VERSION_DETECTOR.name(), new OFVersionDetector());
- } else {
- LOGGER.debug("OFVD already in pipeline");
- }
- }
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.opendaylight.openflowjava.protocol.impl.core.TcpHandler.COMPONENT_NAMES;
/**
* Class that detects version of used OpenFlow Protocol and engages right OFCodec into
if (version == OF13_VERSION_ID) {
LOGGER.debug("detected version: " + version);
- enableOF13Decoder(chc);
- enableOF13Encoder(chc);
} else {
LOGGER.warn("detected version: " + version + " - currently not supported");
return;
bb.skipBytes(bb.readableBytes());
}
- private static void enableOF13Encoder(ChannelHandlerContext chc) {
- if (chc.pipeline().get(COMPONENT_NAMES.OF_ENCODER.name()) == null) {
- LOGGER.info("Engaging OF13Encoder");
- chc.pipeline().addBefore(COMPONENT_NAMES.DELEGATING_INBOUND_HANDLER.name(),
- COMPONENT_NAMES.OF_ENCODER.name(), new OF13Encoder());
- } else {
- LOGGER.debug("OF13Encoder already in pipeline");
- }
-
- }
-
- private static void enableOF13Decoder(ChannelHandlerContext chc) {
- if (chc.pipeline().get(COMPONENT_NAMES.OF_DECODER.name()) == null) {
- LOGGER.info("Engaging OF13Decoder");
- chc.pipeline().addBefore(COMPONENT_NAMES.DELEGATING_INBOUND_HANDLER.name(),
- COMPONENT_NAMES.OF_DECODER.name(), new OF13Decoder());
- } else {
- LOGGER.debug("OF13Decoder already in pipeline");
- }
-
- }
}
connectionAdapter.checkListeners();
ch.pipeline().addLast(COMPONENT_NAMES.IDLE_HANDLER.name(), new IdleHandler(switchIdleTimeout, 0, 0, TimeUnit.MILLISECONDS));
ch.pipeline().addLast(COMPONENT_NAMES.TLS_DETECTOR.name(), new TlsDetector());
+ ch.pipeline().addLast(COMPONENT_NAMES.OF_FRAME_DECODER.name(), new OFFrameDecoder());
+ ch.pipeline().addLast(COMPONENT_NAMES.OF_VERSION_DETECTOR.name(), new OFVersionDetector());
+ ch.pipeline().addLast(COMPONENT_NAMES.OF_DECODER.name(), new OF13Decoder());
+ ch.pipeline().addLast(COMPONENT_NAMES.OF_ENCODER.name(), new OF13Encoder());
ch.pipeline().addLast(COMPONENT_NAMES.DELEGATING_INBOUND_HANDLER.name(), new DelegatingInboundHandler(connectionAdapter));
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
SSLEngine engine = SslContextFactory.getServerContext()
.createSSLEngine();
engine.setUseClientMode(false);
- p.addBefore(COMPONENT_NAMES.DELEGATING_INBOUND_HANDLER.name(), COMPONENT_NAMES.SSL_HANDLER.name(),
+ p.addAfter(COMPONENT_NAMES.TLS_DETECTOR.name(), COMPONENT_NAMES.SSL_HANDLER.name(),
new SslHandler(engine));
}
}
- private static void enableOFFrameDecoder(ChannelHandlerContext ctx) {
- ChannelPipeline p = ctx.channel().pipeline();
- if (p.get(COMPONENT_NAMES.OF_FRAME_DECODER.name()) == null) {
- LOGGER.debug("Engaging OFFrameDecoder");
- p.addBefore(COMPONENT_NAMES.DELEGATING_INBOUND_HANDLER.name(), COMPONENT_NAMES.OF_FRAME_DECODER.name(), new OFFrameDecoder());
- } else {
- LOGGER.debug("OFFD already in pipeline");
- }
- }
-
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf bb,
List<Object> list) throws Exception {
} else {
LOGGER.info("Connection is not encrypted");
}
- enableOFFrameDecoder(ctx);
ctx.pipeline().remove(COMPONENT_NAMES.TLS_DETECTOR.name());
}
}
\r
import io.netty.buffer.ByteBuf;\r
import io.netty.channel.ChannelHandlerContext;\r
-import io.netty.channel.ChannelPipeline;\r
\r
import java.util.ArrayList;\r
import java.util.List;\r
import org.junit.Before;\r
import org.junit.Test;\r
import org.junit.runner.RunWith;\r
-import org.mockito.Matchers;\r
import org.mockito.Mock;\r
-import org.mockito.Mockito;\r
import org.mockito.runners.MockitoJUnitRunner;\r
-import org.opendaylight.openflowjava.protocol.impl.core.TcpHandler.COMPONENT_NAMES;\r
import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
\r
-import com.google.common.collect.Lists;\r
-\r
/**\r
* Testing class of {@link OFFrameDecoder}\r
* \r
@Mock\r
ChannelHandlerContext channelHandlerContext;\r
\r
- @Mock\r
- ChannelPipeline channelPipeline;\r
-\r
private OFFrameDecoder decoder;\r
private List<Object> list = new ArrayList<>();\r
\r
*/\r
@Before\r
public void setUp() {\r
- Mockito.when(channelHandlerContext.pipeline()).thenReturn(\r
- channelPipeline);\r
- Mockito.when(channelPipeline.get(Matchers.anyString()))\r
- .thenReturn(null);\r
- Mockito.when(channelPipeline.names()).thenReturn(\r
- Lists.newArrayList("xx"));\r
list.clear();\r
decoder = new OFFrameDecoder();\r
}\r
list);\r
\r
Assert.assertEquals(8, ((ByteBuf) list.get(0)).readableBytes());\r
- verifyMockCalls(1);\r
}\r
\r
/**\r
list);\r
\r
Assert.assertEquals(16, ((ByteBuf) list.get(0)).readableBytes());\r
- verifyMockCalls(1);\r
}\r
\r
/**\r
list);\r
\r
Assert.assertEquals("List is not empty", 0, list.size());\r
- verifyMockCalls(0);\r
}\r
\r
/**\r
\r
Assert.assertEquals(8, ((ByteBuf) list.get(0)).readableBytes());\r
Assert.assertEquals(1, list.size());\r
- verifyMockCalls(1);\r
}\r
\r
- private void verifyMockCalls(int numberOfCalls) {\r
- if (numberOfCalls > 0) {\r
- Mockito.verify(channelPipeline, Mockito.times(numberOfCalls)).get(\r
- COMPONENT_NAMES.OF_VERSION_DETECTOR.name());\r
- Mockito.verify(channelPipeline, Mockito.times(numberOfCalls)).addAfter(\r
- Matchers.eq(COMPONENT_NAMES.OF_FRAME_DECODER.name()),\r
- Matchers.eq(COMPONENT_NAMES.OF_VERSION_DETECTOR.name()),\r
- Matchers.isA(OFVersionDetector.class));\r
- Mockito.verify(channelPipeline, Mockito.times(numberOfCalls)).names();\r
- } else {\r
- Mockito.verify(channelPipeline, Mockito.never()).get(\r
- COMPONENT_NAMES.OF_VERSION_DETECTOR.name());\r
- Mockito.verify(channelPipeline, Mockito.never()).addAfter(\r
- Matchers.eq(COMPONENT_NAMES.OF_FRAME_DECODER.name()),\r
- Matchers.eq(COMPONENT_NAMES.OF_VERSION_DETECTOR.name()),\r
- Matchers.isA(OFVersionDetector.class));\r
- Mockito.verify(channelPipeline, Mockito.never()).names();\r
- }\r
- }\r
}
\ No newline at end of file
package org.opendaylight.openflowjava.protocol.impl.core;\r
\r
import io.netty.channel.ChannelHandlerContext;\r
-import io.netty.channel.ChannelPipeline;\r
\r
import java.util.ArrayList;\r
import java.util.List;\r
import org.junit.Before;\r
import org.junit.Test;\r
import org.junit.runner.RunWith;\r
-import org.mockito.Matchers;\r
import org.mockito.Mock;\r
-import org.mockito.Mockito;\r
import org.mockito.runners.MockitoJUnitRunner;\r
-import org.opendaylight.openflowjava.protocol.impl.core.TcpHandler.COMPONENT_NAMES;\r
import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
\r
/**\r
@Mock\r
ChannelHandlerContext channelHandlerContext;\r
\r
- @Mock\r
- ChannelPipeline channelPipeline;\r
-\r
private OFVersionDetector detector;\r
private List<Object> list = new ArrayList<>();\r
\r
*/\r
@Before\r
public void setUp() {\r
- Mockito.when(channelHandlerContext.pipeline()).thenReturn(\r
- channelPipeline);\r
- Mockito.when(channelPipeline.get(Matchers.anyString()))\r
- .thenReturn(null);\r
list.clear();\r
detector = new OFVersionDetector();\r
}\r
\r
Assert.assertEquals(7, ((VersionMessageWrapper) list.get(0))\r
.getMessageBuffer().readableBytes());\r
- verifyMockCalls(1);\r
}\r
\r
/**\r
list);\r
\r
Assert.assertEquals("List is not empty", 0, list.size());\r
- verifyMockCalls(0);\r
}\r
\r
- private void verifyMockCalls(int numberOfCalls) {\r
- if (numberOfCalls > 0) {\r
- Mockito.verify(channelPipeline, Mockito.times(numberOfCalls)).get(\r
- COMPONENT_NAMES.OF_DECODER.name());\r
- Mockito.verify(channelPipeline, Mockito.times(numberOfCalls))\r
- .addBefore(\r
- Matchers.eq(COMPONENT_NAMES.DELEGATING_INBOUND_HANDLER\r
- .name()),\r
- Matchers.eq(COMPONENT_NAMES.OF_DECODER.name()),\r
- Matchers.isA(OF13Decoder.class));\r
- } else {\r
- Mockito.verify(channelPipeline, Mockito.never()).get(\r
- COMPONENT_NAMES.OF_DECODER.name());\r
- Mockito.verify(channelPipeline, Mockito.never()).addBefore(\r
- Matchers.eq(COMPONENT_NAMES.DELEGATING_INBOUND_HANDLER\r
- .name()),\r
- Matchers.eq(COMPONENT_NAMES.OF_DECODER.name()),\r
- Matchers.isA(OF13Decoder.class));\r
- }\r
- }\r
}
\ No newline at end of file