X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflow-protocol-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fimpl%2Fdeserialization%2Ffactories%2FErrorMessageFactory.java;h=daae36346d58ea860967695a699cba89ede61775;hb=07de1ed897da9d7dc70c6d550f38c59339ed751e;hp=09ec1088d69bcdb8a1e8ad5428b4bd9e3950fdf6;hpb=0d942e8fb70b2c21f97eea3ed8904336ab5c54a4;p=openflowjava.git diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactory.java index 09ec1088..daae3634 100644 --- a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactory.java +++ b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactory.java @@ -10,9 +10,11 @@ package org.opendaylight.openflowjava.protocol.impl.deserialization.factories; import io.netty.buffer.ByteBuf; -import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterError; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterErrorBuilder; +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.BadActionCode; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadInstructionCode; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadMatchCode; @@ -36,34 +38,29 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731 * @author michal.polkorab * @author timotej.kubas */ -public class ErrorMessageFactory implements OFDeserializer { +public class ErrorMessageFactory implements OFDeserializer, + DeserializerRegistryInjector { private static final String UNKNOWN_CODE = "UNKNOWN_CODE"; private static final String UNKNOWN_TYPE = "UNKNOWN_TYPE"; - - private static ErrorMessageFactory instance; - - private ErrorMessageFactory() { - // do nothing, just singleton - } - - /** - * @return singleton factory - */ - public static synchronized ErrorMessageFactory getInstance() { - if (instance == null) { - instance = new ErrorMessageFactory(); - } - return instance; - } - + private DeserializerRegistry registry; + @Override - public ErrorMessage bufferToMessage(ByteBuf rawMessage, short version) { + public ErrorMessage deserialize(ByteBuf rawMessage) { + int startIndex = rawMessage.readerIndex(); ErrorMessageBuilder builder = new ErrorMessageBuilder(); - builder.setVersion(version); + builder.setVersion((short) EncodeConstants.OF13_VERSION_ID); builder.setXid(rawMessage.readUnsignedInt()); int type = rawMessage.readUnsignedShort(); ErrorType errorType = ErrorType.forValue(type); + if (ErrorType.EXPERIMENTER.equals(errorType)) { + OFDeserializer deserializer = registry.getDeserializer( + ExperimenterDeserializerKeyFactory.createExperimenterErrorDeserializerKey( + EncodeConstants.OF13_VERSION_ID, rawMessage.getUnsignedInt( + rawMessage.readerIndex() + EncodeConstants.SIZE_OF_SHORT_IN_BYTES))); + rawMessage.readerIndex(startIndex); + return deserializer.deserialize(rawMessage); + } decodeType(builder, errorType, type); decodeCode(rawMessage, builder, errorType); if (rawMessage.readableBytes() > 0) { @@ -71,7 +68,7 @@ public class ErrorMessageFactory implements OFDeserializer { } return builder.build(); } - + private static void decodeType(ErrorMessageBuilder builder, ErrorType type, int readValue) { if (type != null) { builder.setType(type.getIntValue()); @@ -227,12 +224,6 @@ public class ErrorMessageFactory implements OFDeserializer { } break; } - case EXPERIMENTER: - ExperimenterErrorBuilder expBuilder = new ExperimenterErrorBuilder(); - expBuilder.setExpType(code); - expBuilder.setExperimenter(rawMessage.readUnsignedInt()); - builder.addAugmentation(ExperimenterError.class, expBuilder.build()); - break; default: setUnknownCode(builder, code); break; @@ -241,15 +232,20 @@ public class ErrorMessageFactory implements OFDeserializer { setUnknownCode(builder, code); } } - + private static void setUnknownCode(ErrorMessageBuilder builder, int readValue) { builder.setCode(readValue); builder.setCodeString(UNKNOWN_CODE); } - + private static void setCode(ErrorMessageBuilder builder, int code, String codeString) { builder.setCode(code); builder.setCodeString(codeString); } + @Override + public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) { + this.registry = deserializerRegistry; + } + }