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%2FOF10ErrorMessageFactory.java;h=aa8b9c8d535b0f9838b53663c562e5317fa37f85;hb=HEAD;hp=e9e37284e9c66c16cadc05e5230280b06411aace;hpb=58d3805deba3b135427167cdd5bea1024a4e3c91;p=openflowjava.git diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10ErrorMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10ErrorMessageFactory.java index e9e37284..aa8b9c8d 100644 --- a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10ErrorMessageFactory.java +++ b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10ErrorMessageFactory.java @@ -1,151 +1,146 @@ -/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */ -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.common.types.rev130731.BadActionCodeV10; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadRequestCodeV10; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ErrorTypeV10; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFailedCodeV10; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloFailedCodeV10; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortModFailedCodeV10; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueOpFailedCodeV10; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessageBuilder; - -/** - * Translates Error messages (OpenFlow v1.0) - * @author michal.polkorab - */ -public class OF10ErrorMessageFactory implements OFDeserializer { - - private static final String UNKNOWN_TYPE = "UNKNOWN_TYPE"; - private static final String UNKNOWN_CODE = "UNKNOWN_CODE"; - - private static OF10ErrorMessageFactory instance; - - private OF10ErrorMessageFactory() { - // do nothing, just singleton - } - - /** - * @return singleton factory - */ - public static synchronized OF10ErrorMessageFactory getInstance() { - if (instance == null) { - instance = new OF10ErrorMessageFactory(); - } - return instance; - } - - @Override - public ErrorMessage bufferToMessage(ByteBuf rawMessage, short version) { - ErrorMessageBuilder builder = new ErrorMessageBuilder(); - builder.setVersion(version); - builder.setXid(rawMessage.readUnsignedInt()); - int type = rawMessage.readUnsignedShort(); - ErrorTypeV10 errorType = ErrorTypeV10.forValue(type); - decodeType(builder, errorType, type); - decodeCode(rawMessage, builder, errorType); - if (rawMessage.readableBytes() > 0) { - builder.setData(rawMessage.readBytes(rawMessage.readableBytes()).array()); - } - return builder.build(); - } - - private static void decodeType(ErrorMessageBuilder builder, ErrorTypeV10 type, int readValue) { - if (type != null) { - builder.setType(type.getIntValue()); - builder.setTypeString(type.name()); - } else { - builder.setType(readValue); - builder.setTypeString(UNKNOWN_TYPE); - } - } - - private static void decodeCode(ByteBuf rawMessage, ErrorMessageBuilder builder, - ErrorTypeV10 type) { - int code = rawMessage.readUnsignedShort(); - if (type != null) { - switch (type) { - case HELLOFAILED: - { - HelloFailedCodeV10 errorCode = HelloFailedCodeV10.forValue(code); - if (errorCode != null) { - setCode(builder, errorCode.getIntValue(), errorCode.name()); - } else { - setUnknownCode(builder, code); - } - break; - } - case BADREQUEST: - { - BadRequestCodeV10 errorCode = BadRequestCodeV10.forValue(code); - if (errorCode != null) { - setCode(builder, errorCode.getIntValue(), errorCode.name()); - } else { - setUnknownCode(builder, code); - } - break; - } - case BADACTION: - { - BadActionCodeV10 errorCode = BadActionCodeV10.forValue(code); - if (errorCode != null) { - setCode(builder, errorCode.getIntValue(), errorCode.name()); - } else { - setUnknownCode(builder, code); - } - break; - } - case FLOWMODFAILED: - { - FlowModFailedCodeV10 errorCode = FlowModFailedCodeV10.forValue(code); - if (errorCode != null) { - setCode(builder, errorCode.getIntValue(), errorCode.name()); - } else { - setUnknownCode(builder, code); - } - break; - } - case PORTMODFAILED: - { - PortModFailedCodeV10 errorCode = PortModFailedCodeV10.forValue(code); - if (errorCode != null) { - setCode(builder, errorCode.getIntValue(), errorCode.name()); - } else { - setUnknownCode(builder, code); - } - break; - } - case QUEUEOPFAILED: - { - QueueOpFailedCodeV10 errorCode = QueueOpFailedCodeV10.forValue(code); - if (errorCode != null) { - setCode(builder, errorCode.getIntValue(), errorCode.name()); - } else { - setUnknownCode(builder, code); - } - break; - } - default: - setUnknownCode(builder, code); - break; - } - } else { - 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); - } - -} +/* + * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.openflowjava.protocol.impl.deserialization.factories; + +import io.netty.buffer.ByteBuf; + +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.BadActionCodeV10; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadRequestCodeV10; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ErrorTypeV10; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFailedCodeV10; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloFailedCodeV10; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortModFailedCodeV10; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueOpFailedCodeV10; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessageBuilder; + +/** + * Translates Error messages (OpenFlow v1.0) + * @author michal.polkorab + */ +public class OF10ErrorMessageFactory implements OFDeserializer { + + private static final String UNKNOWN_TYPE = "UNKNOWN_TYPE"; + private static final String UNKNOWN_CODE = "UNKNOWN_CODE"; + + @Override + public ErrorMessage deserialize(ByteBuf rawMessage) { + ErrorMessageBuilder builder = new ErrorMessageBuilder(); + builder.setVersion((short) EncodeConstants.OF10_VERSION_ID); + builder.setXid(rawMessage.readUnsignedInt()); + int type = rawMessage.readUnsignedShort(); + ErrorTypeV10 errorType = ErrorTypeV10.forValue(type); + decodeType(builder, errorType, type); + decodeCode(rawMessage, builder, errorType); + int remainingBytes = rawMessage.readableBytes(); + if (remainingBytes > 0) { + byte[] data = new byte[remainingBytes]; + rawMessage.readBytes(data); + builder.setData(data); + } + return builder.build(); + } + + private static void decodeType(ErrorMessageBuilder builder, ErrorTypeV10 type, int readValue) { + if (type != null) { + builder.setType(type.getIntValue()); + builder.setTypeString(type.name()); + } else { + builder.setType(readValue); + builder.setTypeString(UNKNOWN_TYPE); + } + } + + private static void decodeCode(ByteBuf rawMessage, ErrorMessageBuilder builder, + ErrorTypeV10 type) { + int code = rawMessage.readUnsignedShort(); + if (type != null) { + switch (type) { + case HELLOFAILED: + { + HelloFailedCodeV10 errorCode = HelloFailedCodeV10.forValue(code); + if (errorCode != null) { + setCode(builder, errorCode.getIntValue(), errorCode.name()); + } else { + setUnknownCode(builder, code); + } + break; + } + case BADREQUEST: + { + BadRequestCodeV10 errorCode = BadRequestCodeV10.forValue(code); + if (errorCode != null) { + setCode(builder, errorCode.getIntValue(), errorCode.name()); + } else { + setUnknownCode(builder, code); + } + break; + } + case BADACTION: + { + BadActionCodeV10 errorCode = BadActionCodeV10.forValue(code); + if (errorCode != null) { + setCode(builder, errorCode.getIntValue(), errorCode.name()); + } else { + setUnknownCode(builder, code); + } + break; + } + case FLOWMODFAILED: + { + FlowModFailedCodeV10 errorCode = FlowModFailedCodeV10.forValue(code); + if (errorCode != null) { + setCode(builder, errorCode.getIntValue(), errorCode.name()); + } else { + setUnknownCode(builder, code); + } + break; + } + case PORTMODFAILED: + { + PortModFailedCodeV10 errorCode = PortModFailedCodeV10.forValue(code); + if (errorCode != null) { + setCode(builder, errorCode.getIntValue(), errorCode.name()); + } else { + setUnknownCode(builder, code); + } + break; + } + case QUEUEOPFAILED: + { + QueueOpFailedCodeV10 errorCode = QueueOpFailedCodeV10.forValue(code); + if (errorCode != null) { + setCode(builder, errorCode.getIntValue(), errorCode.name()); + } else { + setUnknownCode(builder, code); + } + break; + } + default: + setUnknownCode(builder, code); + break; + } + } else { + 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); + } + +}