Javadoc update
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / OF10PacketInMessageFactory.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
3 \r
4 import io.netty.buffer.ByteBuf;\r
5 \r
6 import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
7 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketInMessage;\r
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketInMessageBuilder;\r
9 \r
10 /**\r
11  * Translates PacketIn messages (OpenFlow v1.0)\r
12  * @author michal.polkorab\r
13  */\r
14 public class OF10PacketInMessageFactory implements OFDeserializer<PacketInMessage> {\r
15 \r
16     private static final byte PADDING_IN_PACKET_IN_HEADER = 1;\r
17 \r
18     private static OF10PacketInMessageFactory instance;\r
19     \r
20     private OF10PacketInMessageFactory() {\r
21         // Singleton\r
22     }\r
23     \r
24     /**\r
25      * @return singleton factory\r
26      */\r
27     public static synchronized OF10PacketInMessageFactory getInstance(){\r
28         if(instance == null){\r
29             instance = new OF10PacketInMessageFactory();\r
30         }\r
31         return instance;\r
32     }\r
33 \r
34     @Override\r
35     public PacketInMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
36         PacketInMessageBuilder builder = new PacketInMessageBuilder();\r
37         builder.setVersion(version);\r
38         builder.setXid(rawMessage.readUnsignedInt());\r
39         builder.setBufferId(rawMessage.readUnsignedInt());\r
40         builder.setTotalLen(rawMessage.readUnsignedShort());\r
41         builder.setInPort(rawMessage.readUnsignedShort());\r
42         builder.setReason(rawMessage.readUnsignedByte());\r
43         rawMessage.skipBytes(PADDING_IN_PACKET_IN_HEADER);\r
44         int remainingBytes = rawMessage.readableBytes();\r
45         if (remainingBytes > 0) {\r
46             builder.setData(rawMessage.readBytes(remainingBytes).array());\r
47         }\r
48         return builder.build();\r
49     }\r
50 }\r