@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(); }
@Override public ErrorMessage deserialize(ByteBuf rawMessage) { int startIndex = rawMessage.readerIndex(); ErrorMessageBuilder builder = new ErrorMessageBuilder(); 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<ErrorMessage> 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); int remainingBytes = rawMessage.readableBytes(); if (remainingBytes > 0) { byte[] data = new byte[remainingBytes]; rawMessage.readBytes(data); builder.setData(data); } return builder.build(); }