import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
import org.opendaylight.openflowjava.protocol.impl.util.OF10MatchSerializer;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessage;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregate;\r
ByteBufUtils.writeOFHeader(instance, message, out);\r
out.writeShort(message.getType().getIntValue());\r
out.writeShort(createMultipartRequestFlagsBitmask(message.getFlags()));\r
- \r
if (message.getMultipartRequestBody() instanceof MultipartRequestFlow) {\r
encodeFlowBody(message.getMultipartRequestBody(), out);\r
} else if (message.getMultipartRequestBody() instanceof MultipartRequestAggregate) {\r
\r
@Override\r
public int computeLength(MultipartRequestMessage message) {\r
- // TODO\r
- return MESSAGE_LENGTH;\r
+ return MESSAGE_LENGTH + computeBodyLength(message);\r
}\r
@Override\r
public byte getMessageType() {\r
return MESSAGE_TYPE;\r
}\r
\r
+ /**\r
+ * \r
+ * @param message\r
+ * @return length of MultipartRequestMessage\r
+ */\r
+ public int computeBodyLength(MultipartRequestMessage message) {\r
+ int length = 0;\r
+ MultipartType type = message.getType();\r
+ if (type.equals(MultipartType.OFPMPFLOW)) {\r
+ final byte FLOW_BODY_LENGTH = 44;\r
+ length += FLOW_BODY_LENGTH;\r
+ } else if (type.equals(MultipartType.OFPMPAGGREGATE)) {\r
+ final byte AGGREGATE_BODY_LENGTH = 44;\r
+ length += AGGREGATE_BODY_LENGTH;\r
+ } else if (type.equals(MultipartType.OFPMPPORTSTATS)) {\r
+ final byte PORT_STATS_BODY_LENGTH = 8;\r
+ length += PORT_STATS_BODY_LENGTH;\r
+ } else if (type.equals(MultipartType.OFPMPQUEUE)) {\r
+ final byte QUEUE_BODY_LENGTH = 8;\r
+ length += QUEUE_BODY_LENGTH;\r
+ } else if (type.equals(MultipartType.OFPMPEXPERIMENTER)) {\r
+ final byte EXPERIMENTER_BODY_LENGTH = 4;\r
+ MultipartRequestExperimenter body = (MultipartRequestExperimenter) message.getMultipartRequestBody();\r
+ length += EXPERIMENTER_BODY_LENGTH;\r
+ if (body.getData() != null) {\r
+ length += body.getData().length;\r
+ }\r
+ }\r
+ return length;\r
+ }\r
+ \r
private static int createMultipartRequestFlagsBitmask(MultipartRequestFlags flags) {\r
int multipartRequestFlagsBitmask = 0;\r
Map<Integer, Boolean> multipartRequestFlagsMap = new HashMap<>();\r