package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
+import io.netty.buffer.ByteBuf;
+
import java.util.ArrayList;
import java.util.List;
-import io.netty.buffer.ByteBuf;
-
-import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;
-import org.opendaylight.openflowjava.protocol.impl.serialization.factories.HelloInputMessageFactory;
-import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloElementType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloMessageBuilder;
*/
public class HelloMessageFactory implements OFDeserializer<HelloMessage> {
- private static HelloMessageFactory instance;
-
- private HelloMessageFactory() {
- // do nothing, just singleton
- }
-
- /**
- * @return singleton factory
- */
- public static synchronized HelloMessageFactory getInstance() {
- if (instance == null) {
- instance = new HelloMessageFactory();
- }
- return instance;
- }
-
+ private static final byte HELLO_ELEMENT_HEADER_SIZE = 4;
@Override
- public HelloMessage bufferToMessage(ByteBuf rawMessage, short version) {
+ public HelloMessage deserialize(ByteBuf rawMessage) {
HelloMessageBuilder builder = new HelloMessageBuilder();
- builder.setVersion(version);
+ builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
builder.setXid(rawMessage.readUnsignedInt());
if (rawMessage.readableBytes() > 0) {
builder.setElements(readElement(rawMessage));
}
return builder.build();
}
-
+
private static List<Elements> readElement(ByteBuf input) {
List<Elements> elementsList = new ArrayList<>();
while (input.readableBytes() > 0) {
int elementLength = input.readUnsignedShort();
if (type == HelloElementType.VERSIONBITMAP.getIntValue()) {
elementsBuilder.setType(HelloElementType.forValue(type));
- int[] versionBitmap = new int[(elementLength - HelloInputMessageFactory.HELLO_ELEMENT_HEADER_SIZE) / 4];
+ int[] versionBitmap = new int[(elementLength - HELLO_ELEMENT_HEADER_SIZE) / 4];
for (int i = 0; i < versionBitmap.length; i++) {
versionBitmap[i] = (int) input.readUnsignedInt();
}
if (paddingRemainder != 0) {
input.readBytes(EncodeConstants.PADDING - paddingRemainder);
}
+ } else {
+ return elementsList;
}
elementsList.add(elementsBuilder.build());
}
return elementsList;
}
-
+
private static List<Boolean> readVersionBitmap(int[] input){
List<Boolean> versionBitmapList = new ArrayList<>();
for (int i = 0; i < input.length; i++) {