1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
\r
2 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
\r
4 import java.util.Iterator;
\r
5 import java.util.List;
\r
7 import io.netty.buffer.ByteBuf;
\r
9 import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;
\r
10 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
\r
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;
\r
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.Elements;
\r
15 * @author michal.polkorab
\r
18 public class HelloInputMessageFactory implements OFSerializer<HelloInput>{
\r
20 /** Code type of Hello message */
\r
21 private static final byte MESSAGE_TYPE = 0;
\r
22 private static int MESSAGE_LENGTH = 0;
\r
23 private static HelloInputMessageFactory instance;
\r
25 private HelloInputMessageFactory() {
\r
26 // do nothing, just singleton
\r
30 * @return singleton factory
\r
32 public static synchronized HelloInputMessageFactory getInstance() {
\r
33 if (instance == null) {
\r
34 instance = new HelloInputMessageFactory();
\r
40 public void messageToBuffer(short version, ByteBuf out, HelloInput message) {
\r
41 computeElementsLength(message.getElements());
\r
42 ByteBufUtils.writeOFHeader(instance, message, out);
\r
43 encodeElementsList(message.getElements(), out);
\r
47 public int computeLength() {
\r
48 return MESSAGE_LENGTH;
\r
52 public byte getMessageType() {
\r
53 return MESSAGE_TYPE;
\r
56 private static int computeElementsLength(List<Elements> elements) {
\r
57 int versionBitmapSize = 0;
\r
58 final int OFHeaderSize = 8;
\r
61 if (elements != null) {
\r
63 versionBitmapSize = elements.get(0).getVersionBitmap().size()/Byte.SIZE;
\r
65 MESSAGE_LENGTH = OFHeaderSize + versionBitmapSize + typeSize;
\r
66 return MESSAGE_LENGTH;
\r
69 private static void encodeElementsList(List<Elements> elements, ByteBuf output) {
\r
70 int[] versionBitmap;
\r
72 if (elements != null) {
\r
73 for (Iterator<Elements> iterator = elements.iterator(); iterator.hasNext();) {
\r
74 Elements currElement = iterator.next();
\r
75 output.writeShort(currElement.getType().getIntValue());
\r
76 versionBitmap = ByteBufUtils.fillBitMaskFromList(currElement.getVersionBitmap());
\r
77 arraySize = (versionBitmap.length/Integer.SIZE);
\r
78 for (int i = 0; i < arraySize; i++) {
\r
79 output.writeInt(versionBitmap[i]);
\r