*/\r
public class OF10ErrorMessageFactory implements OFDeserializer<ErrorMessage> {\r
\r
- private static final String UNKNOWN_TYPE = "UNKNOWN_TYPE";\r
+ private static final String UNKNOWN_TYPE = "UNKNOWN_TYPE";\r
private static final String UNKNOWN_CODE = "UNKNOWN_CODE";\r
- private static final int NO_CORRECT_ENUM_FOUND_VALUE = -1;\r
\r
private static OF10ErrorMessageFactory instance;\r
\r
ErrorMessageBuilder builder = new ErrorMessageBuilder();\r
builder.setVersion(version);\r
builder.setXid(rawMessage.readUnsignedInt());\r
- ErrorTypeV10 type = ErrorTypeV10.forValue(rawMessage.readUnsignedShort());\r
- decodeType(builder, type);\r
- decodeCode(rawMessage, builder, type);\r
+ int type = rawMessage.readUnsignedShort();\r
+ ErrorTypeV10 errorType = ErrorTypeV10.forValue(type);\r
+ decodeType(builder, errorType, type);\r
+ decodeCode(rawMessage, builder, errorType);\r
if (rawMessage.readableBytes() > 0) {\r
builder.setData(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
}\r
return builder.build();\r
}\r
-\r
- private static void decodeCode(ByteBuf rawMessage, ErrorMessageBuilder builder,\r
- ErrorTypeV10 type) {\r
- switch (type) {\r
- case HELLOFAILED:\r
- {\r
- HelloFailedCodeV10 code = HelloFailedCodeV10.forValue(rawMessage.readUnsignedShort());\r
- if (code != null) {\r
- builder.setCode(code.getIntValue());\r
- builder.setCodeString(code.name());\r
- }\r
- break;\r
- }\r
- case BADREQUEST:\r
- {\r
- BadRequestCodeV10 code = BadRequestCodeV10.forValue(rawMessage.readUnsignedShort());\r
- if (code != null) {\r
- builder.setCode(code.getIntValue());\r
- builder.setCodeString(code.name());\r
- }\r
- break;\r
- }\r
- case BADACTION:\r
- {\r
- BadActionCodeV10 code = BadActionCodeV10.forValue(rawMessage.readUnsignedShort());\r
- if (code != null) {\r
- builder.setCode(code.getIntValue());\r
- builder.setCodeString(code.name());\r
- }\r
- break;\r
- }\r
- case FLOWMODFAILED:\r
- {\r
- FlowModFailedCodeV10 code = FlowModFailedCodeV10.forValue(rawMessage.readUnsignedShort());\r
- if (code != null) {\r
- builder.setCode(code.getIntValue());\r
- builder.setCodeString(code.name());\r
- }\r
- break;\r
- }\r
- case PORTMODFAILED:\r
- {\r
- PortModFailedCodeV10 code = PortModFailedCodeV10.forValue(rawMessage.readUnsignedShort());\r
- if (code != null) {\r
- builder.setCode(code.getIntValue());\r
- builder.setCodeString(code.name());\r
- }\r
- break;\r
- }\r
- case QUEUEOPFAILED:\r
- {\r
- QueueOpFailedCodeV10 code = QueueOpFailedCodeV10.forValue(rawMessage.readUnsignedShort());\r
- if (code != null) {\r
- builder.setCode(code.getIntValue());\r
- builder.setCodeString(code.name());\r
- }\r
- break;\r
- }\r
- default:\r
- builder.setCode(NO_CORRECT_ENUM_FOUND_VALUE);\r
- builder.setCodeString(UNKNOWN_CODE);\r
- break;\r
- }\r
- }\r
-\r
- private static void decodeType(ErrorMessageBuilder builder, ErrorTypeV10 type) {\r
+ \r
+ private static void decodeType(ErrorMessageBuilder builder, ErrorTypeV10 type, int readValue) {\r
if (type != null) {\r
builder.setType(type.getIntValue());\r
builder.setTypeString(type.name());\r
} else {\r
- builder.setType(NO_CORRECT_ENUM_FOUND_VALUE);\r
+ builder.setType(readValue);\r
builder.setTypeString(UNKNOWN_TYPE);\r
}\r
}\r
\r
+ private static void decodeCode(ByteBuf rawMessage, ErrorMessageBuilder builder,\r
+ ErrorTypeV10 type) {\r
+ int code = rawMessage.readUnsignedShort();\r
+ if (type != null) {\r
+ switch (type) {\r
+ case HELLOFAILED:\r
+ {\r
+ HelloFailedCodeV10 errorCode = HelloFailedCodeV10.forValue(code);\r
+ if (errorCode != null) {\r
+ setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+ } else {\r
+ setUnknownCode(builder, code);\r
+ }\r
+ break;\r
+ }\r
+ case BADREQUEST:\r
+ {\r
+ BadRequestCodeV10 errorCode = BadRequestCodeV10.forValue(code);\r
+ if (errorCode != null) {\r
+ setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+ } else {\r
+ setUnknownCode(builder, code);\r
+ }\r
+ break;\r
+ }\r
+ case BADACTION:\r
+ {\r
+ BadActionCodeV10 errorCode = BadActionCodeV10.forValue(code);\r
+ if (errorCode != null) {\r
+ setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+ } else {\r
+ setUnknownCode(builder, code);\r
+ }\r
+ break;\r
+ }\r
+ case FLOWMODFAILED:\r
+ {\r
+ FlowModFailedCodeV10 errorCode = FlowModFailedCodeV10.forValue(code);\r
+ if (errorCode != null) {\r
+ setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+ } else {\r
+ setUnknownCode(builder, code);\r
+ }\r
+ break;\r
+ }\r
+ case PORTMODFAILED:\r
+ {\r
+ PortModFailedCodeV10 errorCode = PortModFailedCodeV10.forValue(code);\r
+ if (errorCode != null) {\r
+ setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+ } else {\r
+ setUnknownCode(builder, code);\r
+ }\r
+ break;\r
+ }\r
+ case QUEUEOPFAILED:\r
+ {\r
+ QueueOpFailedCodeV10 errorCode = QueueOpFailedCodeV10.forValue(code);\r
+ if (errorCode != null) {\r
+ setCode(builder, errorCode.getIntValue(), errorCode.name());\r
+ } else {\r
+ setUnknownCode(builder, code);\r
+ }\r
+ break;\r
+ }\r
+ default:\r
+ setUnknownCode(builder, code);\r
+ break;\r
+ }\r
+ } else {\r
+ setUnknownCode(builder, code);\r
+ }\r
+ }\r
+ \r
+ private static void setUnknownCode(ErrorMessageBuilder builder, int readValue) {\r
+ builder.setCode(readValue);\r
+ builder.setCodeString(UNKNOWN_CODE);\r
+ }\r
+ \r
+ private static void setCode(ErrorMessageBuilder builder, int code, String codeString) {\r
+ builder.setCode(code);\r
+ builder.setCodeString(codeString);\r
+ }\r
+\r
}\r