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;
     }
 
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java
index 564ca7b..c49acbb 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OFDescStatsReplyAdapter.java
@@ -17,7 +17,7 @@
 
 import java.util.Set;
 
-import org.jboss.netty.buffer.ChannelBuffer;
+import io.netty.buffer.ByteBuf;
 import org.projectfloodlight.openflow.protocol.OFDescStatsReply;
 import org.projectfloodlight.openflow.protocol.OFStatsReplyFlags;
 import org.projectfloodlight.openflow.protocol.OFStatsType;
@@ -81,11 +81,23 @@
     }
 
     @Override
-    public void writeTo(ChannelBuffer channelBuffer) {
+    public void writeTo(ByteBuf byteBuf) {
 
     }
 
     @Override
+    public boolean equalsIgnoreXid(Object obj) {
+     // Do nothing here for now
+        return true;
+    }
+
+    @Override
+    public int hashCodeIgnoreXid() {
+     // Do nothing here for now
+        return 0;
+    }
+
+    @Override
     public Builder createBuilder() {
         return null;
     }
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java
index 6c9ddde..f0737e5 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/OfMessageAdapter.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.openflow;
 
-import org.jboss.netty.buffer.ChannelBuffer;
+import io.netty.buffer.ByteBuf;
 import org.projectfloodlight.openflow.protocol.OFMessage;
 import org.projectfloodlight.openflow.protocol.OFType;
 import org.projectfloodlight.openflow.protocol.OFVersion;
@@ -50,7 +50,19 @@
     }
 
     @Override
-    public void writeTo(ChannelBuffer channelBuffer) { }
+    public void writeTo(ByteBuf byteBuf) { }
+
+    @Override
+    public boolean equalsIgnoreXid(Object obj) {
+     // Do nothing here for now
+        return true;
+    }
+
+    @Override
+    public int hashCodeIgnoreXid() {
+     // Do nothing here for now
+        return 0;
+    }
 
     @Override
     public Builder createBuilder() {
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java
index 43b5f3d..e62345c 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OFMessageEncoderTest.java
@@ -18,6 +18,7 @@
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
+import io.netty.buffer.ByteBuf;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.junit.Test;
 import org.onosproject.openflow.OfMessageAdapter;
@@ -45,9 +46,9 @@
         }
 
         @Override
-        public void writeTo(ChannelBuffer channelBuffer) {
+        public void writeTo(ByteBuf byteBuf) {
             String message = "message" + Integer.toString(id) + " ";
-            channelBuffer.writeBytes(message.getBytes(StandardCharsets.UTF_8));
+            byteBuf.writeBytes(message.getBytes(StandardCharsets.UTF_8));
         }
     }