Bug 1277 - Move ByteBuffUtils to separate bundle
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / serialization / experimenters / OF13TableFeatExpSerializer.java
1 /*\r
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowjava.protocol.impl.serialization.experimenters;\r
10 \r
11 import io.netty.buffer.ByteBuf;\r
12 \r
13 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
14 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
15 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterRelatedTableFeatureProperty;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableFeaturesPropType;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;\r
19 \r
20 public class OF13TableFeatExpSerializer implements OFSerializer<TableFeatureProperties> {\r
21 \r
22     private static final int EXPERIMENTER_CODE = 65534; // 0xFFFE\r
23     private static final int EXPERIMENTER_MISS_CODE = 65535; // 0xFFFF\r
24     \r
25         @Override\r
26         public void serialize(TableFeatureProperties property, ByteBuf outBuffer) {\r
27                 int startIndex = outBuffer.writerIndex();\r
28                 if (property.getType().equals(TableFeaturesPropType.OFPTFPTEXPERIMENTER)) {\r
29                         outBuffer.writeShort(EXPERIMENTER_CODE);\r
30                 } else {\r
31                         outBuffer.writeShort(EXPERIMENTER_MISS_CODE);\r
32                 }\r
33                 int lengthIndex = outBuffer.writerIndex();\r
34                 outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);\r
35         ExperimenterRelatedTableFeatureProperty exp = property.\r
36                 getAugmentation(ExperimenterRelatedTableFeatureProperty.class);\r
37         outBuffer.writeInt(exp.getExperimenter().intValue());\r
38         outBuffer.writeInt(exp.getExpType().intValue());\r
39         byte[] data = exp.getData();\r
40         if (data != null) {\r
41             outBuffer.writeBytes(data);\r
42         }\r
43         int paddingRemainder = (outBuffer.writerIndex() - startIndex) % EncodeConstants.PADDING;\r
44         if (paddingRemainder != 0) {\r
45                 int padding = EncodeConstants.PADDING - paddingRemainder;\r
46             ByteBufUtils.padBuffer(padding, outBuffer);\r
47         }\r
48         outBuffer.setShort(lengthIndex, outBuffer.writerIndex() - startIndex);\r
49         }\r
50 \r
51 }\r