BUG-4283: experimenter msg support - deserialization part
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / VendorMessageFactory.java
index be6d0004d52ba064df3fa2c935a65a016213020c..9461da1c9ca6f6738be09dad69e0f3cbccffd13f 100644 (file)
@@ -9,31 +9,39 @@
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
 import io.netty.buffer.ByteBuf;
-
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.util.ExperimenterDeserializerKeyFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessageBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
 
 /**
  * @author michal.polkorab
- *
  */
 public class VendorMessageFactory implements OFDeserializer<ExperimenterMessage>,
         DeserializerRegistryInjector {
 
-    private static final byte VENDOR_ID_INDEX = 8;
     private DeserializerRegistry deserializerRegistry;
 
     @Override
     public ExperimenterMessage deserialize(ByteBuf message) {
-        long expId = message.getUnsignedInt(message.readerIndex() + VENDOR_ID_INDEX);
-        OFDeserializer<ExperimenterMessage> deserializer = deserializerRegistry.getDeserializer(
-                ExperimenterDeserializerKeyFactory.createExperimenterMessageDeserializerKey(
+        final long xid = message.readUnsignedInt();
+        final long expId = message.readUnsignedInt();
+        OFDeserializer<ExperimenterDataOfChoice> deserializer = deserializerRegistry.getDeserializer(
+                ExperimenterDeserializerKeyFactory.createVendorMessageDeserializerKey(
                         EncodeConstants.OF10_VERSION_ID, expId));
-        return deserializer.deserialize(message);
+        final ExperimenterDataOfChoice vendorData = deserializer.deserialize(message);
+
+        final ExperimenterMessageBuilder messageBld = new ExperimenterMessageBuilder()
+                .setVersion((short) EncodeConstants.OF10_VERSION_ID)
+                .setXid(xid)
+                .setExperimenter(new ExperimenterId(expId))
+                .setExperimenterDataOfChoice(vendorData);
+        return messageBld.build();
     }
 
     @Override