Avoiding reading of messages that have not been fully received in the channel buffer.
diff --git a/java_gen/templates/of_class.java b/java_gen/templates/of_class.java
index 4ea6ac9..ec398e7 100644
--- a/java_gen/templates/of_class.java
+++ b/java_gen/templates/of_class.java
@@ -171,6 +171,13 @@
//:: else:
// fixme: todo ${prop.name}
//:: #endif
+//:: if prop.is_length_value or prop.is_field_length_value:
+ if(bb.readableBytes() + (bb.readerIndex() - start) < ${prop.name}) {
+ // Buffer does not have all data yet
+ bb.readerIndex(start);
+ return null;
+ }
+//:: #endif
//:: #endfor
//:: if msg.align:
// align message to ${msg.align} bytes
diff --git a/java_gen/templates/of_virtual_class.java b/java_gen/templates/of_virtual_class.java
index fe5c66c..33a6cd2 100644
--- a/java_gen/templates/of_virtual_class.java
+++ b/java_gen/templates/of_virtual_class.java
@@ -52,6 +52,12 @@
static class Reader implements OFMessageReader<${msg.interface.inherited_declaration()}> {
@Override
public ${msg.interface.name} readFrom(ChannelBuffer bb) throws OFParseError {
+//:: if msg.is_fixed_length:
+ if(bb.readableBytes() < LENGTH)
+//:: else:
+ if(bb.readableBytes() < MINIMUM_LENGTH)
+//:: #endif
+ return null;
int start = bb.readerIndex();
//:: fields_with_length_member = {}
//:: for prop in msg.members: