import io.netty.buffer.ByteBuf;\r
\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.EncodeConstants;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.HelloInputMessageFactory;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloElementType;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloMessage;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloMessageBuilder;\r
}\r
\r
private static List<Elements> readElement(ByteBuf input) {\r
- ElementsBuilder elementsBuilder = new ElementsBuilder();\r
- List<Elements> elementsList = new ArrayList<Elements>();\r
- elementsBuilder.setType(HelloElementType.forValue(input.readUnsignedShort()));\r
- int arrayLength = input.readableBytes()/4;\r
- int[] versionBitmap = new int[arrayLength];\r
- for (int i = 0; i < arrayLength; i++) {\r
- versionBitmap[i] = (int) input.readUnsignedInt();\r
+ List<Elements> elementsList = new ArrayList<>();\r
+ while (input.readableBytes() > 0) {\r
+ ElementsBuilder elementsBuilder = new ElementsBuilder();\r
+ int type = input.readUnsignedShort();\r
+ int elementLength = input.readUnsignedShort();\r
+ if (type == HelloElementType.VERSIONBITMAP.getIntValue()) {\r
+ elementsBuilder.setType(HelloElementType.forValue(type));\r
+ int[] versionBitmap = new int[(elementLength - HelloInputMessageFactory.HELLO_ELEMENT_HEADER_SIZE) / 4];\r
+ for (int i = 0; i < versionBitmap.length; i++) {\r
+ versionBitmap[i] = (int) input.readUnsignedInt();\r
+ }\r
+ elementsBuilder.setVersionBitmap(readVersionBitmap(versionBitmap));\r
+ int paddingRemainder = elementLength % EncodeConstants.PADDING;\r
+ if (paddingRemainder != 0) {\r
+ input.readBytes(EncodeConstants.PADDING - paddingRemainder);\r
+ }\r
+ }\r
+ elementsList.add(elementsBuilder.build());\r
}\r
- elementsBuilder.setVersionBitmap(readVersionBitmap(versionBitmap));\r
- elementsList.add(elementsBuilder.build());\r
return elementsList;\r
}\r
\r