Ordered message execution ensured
[openflowjava.git] / simple-client / src / main / java / org / opendaylight / openflowjava / protocol / impl / clients / SimpleClientHandler.java
index 110570cdd842c0cd372be4c48a05a2a8522e1ff9..04147af06470a639d3cc75ba2d19ee6217e27f7e 100644 (file)
@@ -19,6 +19,7 @@ import com.google.common.util.concurrent.SettableFuture;
 public class SimpleClientHandler extends ChannelInboundHandlerAdapter {\r
 \r
     protected static final Logger LOGGER = LoggerFactory.getLogger(SimpleClientHandler.class);\r
+    private static final int OFP_HEADER_LENGTH = 8;\r
     private SettableFuture<Boolean> isOnlineFuture;\r
     protected ScenarioHandler scenarioHandler;\r
 \r
@@ -38,10 +39,15 @@ public class SimpleClientHandler extends ChannelInboundHandlerAdapter {
         if (LOGGER.isDebugEnabled()) {\r
             LOGGER.debug("<< " + ByteBufUtils.byteBufToHexString(bb));\r
         }\r
-        byte[] message = new byte[8];\r
+        \r
+        if (bb.readableBytes() < OFP_HEADER_LENGTH) {\r
+            LOGGER.debug("too few bytes received: "+bb.readableBytes()+" - wait for next data portion");\r
+            return;\r
+        }\r
+        int msgSize = bb.getUnsignedShort(2);\r
+        byte[] message = new byte[msgSize];\r
         bb.readBytes(message);\r
         scenarioHandler.addOfMsg(message);\r
-        skipMsg(bb);\r
         LOGGER.info("end of read");\r
     }\r
 \r
@@ -57,12 +63,6 @@ public class SimpleClientHandler extends ChannelInboundHandlerAdapter {
         \r
     }\r
 \r
-    private static void skipMsg(ByteBuf bb) {\r
-        if (bb.readableBytes() > 0) {\r
-            bb.skipBytes(bb.getShort(2));\r
-        }\r
-    }\r
-\r
     /**\r
      * @param scenarioHandler handler of scenario events\r
      */\r