Merge "fixed slicing in frame processing"
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / core / OFDecoder.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.core;\r
3 \r
4 import io.netty.channel.ChannelHandlerContext;\r
5 import io.netty.handler.codec.MessageToMessageDecoder;\r
6 \r
7 import java.util.List;\r
8 \r
9 import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory;\r
10 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
11 import org.opendaylight.yangtools.yang.binding.DataObject;\r
12 import org.slf4j.Logger;\r
13 import org.slf4j.LoggerFactory;\r
14 \r
15 /**\r
16  * Transforms OpenFlow Protocol messages to POJOs\r
17  * @author michal.polkorab\r
18  */\r
19 public class OFDecoder extends MessageToMessageDecoder<VersionMessageWrapper> {\r
20 \r
21     private static final Logger LOGGER = LoggerFactory.getLogger(OFDecoder.class);\r
22 \r
23     /**\r
24      * Constructor of class\r
25      */\r
26     public OFDecoder() {\r
27         LOGGER.debug("Creating OF 1.3 Decoder");\r
28     }\r
29 \r
30     @Override\r
31     protected void decode(ChannelHandlerContext ctx, VersionMessageWrapper msg,\r
32             List<Object> out) throws Exception {\r
33         if (LOGGER.isDebugEnabled()) {\r
34             LOGGER.debug("VersionMessageWrapper received");\r
35             LOGGER.debug("buffer size: " + msg.getMessageBuffer().readableBytes());\r
36             LOGGER.debug("<< " + ByteBufUtils.byteBufToHexString(msg.getMessageBuffer()));\r
37         }\r
38         DataObject dataObject = null;\r
39         try {\r
40             dataObject = DeserializationFactory.bufferToMessage(msg.getMessageBuffer(),\r
41                     msg.getVersion());\r
42         } catch(Exception e) {\r
43             LOGGER.error("Message deserialization failed");\r
44             LOGGER.error(e.getMessage(), e);\r
45             return;\r
46         }\r
47         if (dataObject == null) {\r
48             LOGGER.warn("Translated POJO is null");\r
49             return;\r
50         }\r
51         msg.getMessageBuffer().release();\r
52         out.add(dataObject);\r
53     }\r
54 }\r