e014748e1fdcf7351b56e3b76f0020430cb536fb
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / FlowRemovedMessageFactory.java
1 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
2 \r
3 import io.netty.buffer.ByteBuf;\r
4 \r
5 import java.math.BigInteger;\r
6 \r
7 import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableId;\r
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessage;\r
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessageBuilder;\r
11 \r
12 /**\r
13  * @author michal.polkorab\r
14  * @author timotej.kubas\r
15  */\r
16 public class FlowRemovedMessageFactory implements OFDeserializer<FlowRemovedMessage> {\r
17     \r
18     private static FlowRemovedMessageFactory instance;\r
19     \r
20     private FlowRemovedMessageFactory() {\r
21         // singleton\r
22     }\r
23     \r
24     /**\r
25      * @return singleton factory\r
26      */\r
27     public static FlowRemovedMessageFactory getInstance(){\r
28         if(instance == null){\r
29             instance = new FlowRemovedMessageFactory();\r
30         }\r
31         \r
32         return instance;\r
33     }\r
34 \r
35     @Override\r
36     public FlowRemovedMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
37         FlowRemovedMessageBuilder frmb = new FlowRemovedMessageBuilder();\r
38         \r
39         frmb.setVersion(version);\r
40         frmb.setXid(rawMessage.readUnsignedInt());\r
41         \r
42         byte[] cookie = new byte[8];\r
43         rawMessage.readBytes(cookie);\r
44         frmb.setCookie(new BigInteger(cookie));\r
45         frmb.setPriority(rawMessage.readUnsignedShort());\r
46         \r
47 //        TODO enum! \r
48 //        frmb.setReason(FlowRemovedReason.values()[rawMessage.readInt()]);\r
49         rawMessage.skipBytes(1); //instead of setReason\r
50         \r
51         frmb.setTableId(new TableId((long)rawMessage.readUnsignedByte()));\r
52         frmb.setDurationSec(rawMessage.readUnsignedInt());\r
53         frmb.setDurationNsec(rawMessage.readUnsignedInt());\r
54         frmb.setIdleTimeout(rawMessage.readUnsignedShort());\r
55         frmb.setHardTimeout(rawMessage.readUnsignedShort());\r
56         \r
57         byte[] packet_count = new byte[8];\r
58         rawMessage.readBytes(packet_count);\r
59         frmb.setPacketCount(new BigInteger(packet_count));\r
60         \r
61         byte[] byte_count = new byte[8];\r
62         rawMessage.readBytes(byte_count);\r
63         frmb.setByteCount(new BigInteger(byte_count));\r
64         \r
65         return frmb.build();\r
66     }\r
67 \r
68 }\r