--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.RateQueueProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.RateQueuePropertyBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueProperties;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutputBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.Queues;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.QueuesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueuePropertyBuilder;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class OF10QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueueConfigOutput> {\r
+\r
+ private static final byte PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER = 6;\r
+ private static final byte PADDING_IN_PACKET_QUEUE_HEADER = 2;\r
+ private static final byte PADDING_IN_QUEUE_PROPERTY_HEADER = 4;\r
+ private static final byte PADDING_IN_RATE_QUEUE_PROPERTY = 6;\r
+ private static final byte PACKET_QUEUE_LENGTH = 16;\r
+\r
+ private static OF10QueueGetConfigReplyMessageFactory instance;\r
+ \r
+ private OF10QueueGetConfigReplyMessageFactory() {\r
+ // singleton\r
+ }\r
+ \r
+ /**\r
+ * \r
+ * @return singleton factory\r
+ */\r
+ public static synchronized OF10QueueGetConfigReplyMessageFactory getInstance(){\r
+ \r
+ if(instance == null){\r
+ instance = new OF10QueueGetConfigReplyMessageFactory();\r
+ }\r
+ return instance;\r
+ }\r
+ \r
+ @Override\r
+ public GetQueueConfigOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
+ GetQueueConfigOutputBuilder builder = new GetQueueConfigOutputBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid((rawMessage.readUnsignedInt()));\r
+ builder.setPort(new PortNumber(new Long(rawMessage.readUnsignedShort())));\r
+ rawMessage.skipBytes(PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER);\r
+ builder.setQueues(createQueuesList(rawMessage));\r
+ return builder.build();\r
+ }\r
+ \r
+ private static List<Queues> createQueuesList(ByteBuf input){\r
+ List<Queues> queuesList = new ArrayList<>();\r
+ while (input.readableBytes() > 0) {\r
+ QueuesBuilder queueBuilder = new QueuesBuilder();\r
+ queueBuilder.setQueueId(new QueueId(input.readUnsignedInt()));\r
+ int length = input.readUnsignedShort();\r
+ input.skipBytes(PADDING_IN_PACKET_QUEUE_HEADER);\r
+ queueBuilder.setQueueProperty(createPropertiesList(input, length - PACKET_QUEUE_LENGTH));\r
+ queuesList.add(queueBuilder.build());\r
+ } \r
+ return queuesList;\r
+ }\r
+ \r
+ private static List<QueueProperty> createPropertiesList(ByteBuf input, int length){\r
+ int propertiesLength = length;\r
+ List<QueueProperty> propertiesList = new ArrayList<>();\r
+ while (propertiesLength > 0) {\r
+ QueuePropertyBuilder propertiesBuilder = new QueuePropertyBuilder();\r
+ QueueProperties property = QueueProperties.forValue(input.readUnsignedShort());\r
+ propertiesBuilder.setProperty(property);\r
+ propertiesLength -= input.readUnsignedShort();\r
+ input.skipBytes(PADDING_IN_QUEUE_PROPERTY_HEADER);\r
+ if (property.equals(QueueProperties.OFPQTMINRATE)) {\r
+ RateQueuePropertyBuilder rateBuilder = new RateQueuePropertyBuilder();\r
+ rateBuilder.setRate(input.readUnsignedShort());\r
+ propertiesBuilder.addAugmentation(RateQueueProperty.class, rateBuilder.build());\r
+ input.skipBytes(PADDING_IN_RATE_QUEUE_PROPERTY);\r
+ }\r
+ propertiesList.add(propertiesBuilder.build());\r
+ }\r
+ return propertiesList;\r
+ }\r
+}
\ No newline at end of file