OpenFlow message processing for new loxi

Depends-On: Id69c8597eb4564653c56cdc90f2dcec50afbdd25

Change-Id: Ib14fbadd3debf98ce1d56343179f8e7929f8ade8
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java
index 26f7221..c5cb9f7 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageDecoder.java
@@ -17,6 +17,8 @@
 package org.onosproject.openflow.controller.impl;
 
 
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandlerContext;
@@ -47,7 +49,15 @@
         // a list of the parsed messages to the controller.
         // The performance *may or may not* not be as good as before.
         OFMessageReader<OFMessage> reader = OFFactories.getGenericReader();
-        OFMessage message = reader.readFrom(buffer);
+
+        //toByteBuffer is optimized to avoid copying.
+        ByteBuf byteBuf = Unpooled.wrappedBuffer(buffer.toByteBuffer());
+        OFMessage message = reader.readFrom(byteBuf);
+
+        if (message != null) {
+            //set buffer's read index, as it has not been changed.
+            buffer.readerIndex(buffer.readerIndex() + byteBuf.readerIndex());
+        }
 
         return message;
     }
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java
index abb63f1..727301f 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFMessageEncoder.java
@@ -18,6 +18,8 @@
 
 import java.util.List;
 
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.channel.Channel;
@@ -46,13 +48,16 @@
             size += ofm.getLengthU();
         }*/
 
-        ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
+        ByteBuf bb = Unpooled.buffer();
 
         for (OFMessage ofm : msglist) {
             if (ofm != null) {
-                ofm.writeTo(buf);
+                ofm.writeTo(bb);
             }
         }
+
+        ChannelBuffer buf = ChannelBuffers.wrappedBuffer(bb.nioBuffer());
+
         return buf;
     }