Merge "Unified Two Phase Commit implementation, fixed BA to BI connection"
[controller.git] / opendaylight / protocol_plugins / openflow / src / main / java / org / opendaylight / controller / protocol_plugin / openflow / core / internal / MessageReadWriteService.java
index fc2e0ee324b2cc4934a1f4181988cf674d6bebc1..9041004605dded75ce2fe44f129c617656ab6e60 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.controller.protocol_plugin.openflow.core.internal;
 
-import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.channels.AsynchronousCloseException;
 import java.nio.channels.ClosedChannelException;
@@ -58,7 +57,7 @@ public class MessageReadWriteService implements IMessageReadWrite {
      * @throws Exception
      */
     @Override
-    public void asyncSend(OFMessage msg) throws IOException {
+    public void asyncSend(OFMessage msg) throws Exception {
         synchronized (outBuffer) {
             int msgLen = msg.getLengthU();
             if (outBuffer.remaining() < msgLen) {
@@ -94,7 +93,7 @@ public class MessageReadWriteService implements IMessageReadWrite {
      * @throws Exception
      */
     @Override
-    public void resumeSend() throws IOException {
+    public void resumeSend() throws Exception {
         synchronized (outBuffer) {
             if (!socket.isOpen()) {
                 return;
@@ -121,7 +120,7 @@ public class MessageReadWriteService implements IMessageReadWrite {
      * @throws Exception
      */
     @Override
-    public List<OFMessage> readMessages() throws IOException {
+    public List<OFMessage> readMessages() throws Exception {
         if (!socket.isOpen()) {
             return null;
         }
@@ -133,12 +132,17 @@ public class MessageReadWriteService implements IMessageReadWrite {
             throw new AsynchronousCloseException();
         }
 
-        inBuffer.flip();
-        msgs = factory.parseMessages(inBuffer);
-        if (inBuffer.hasRemaining()) {
-            inBuffer.compact();
-        } else {
+        try {
+            inBuffer.flip();
+            msgs = factory.parseMessages(inBuffer);
+            if (inBuffer.hasRemaining()) {
+                inBuffer.compact();
+            } else {
+                inBuffer.clear();
+            }
+        } catch (Exception e) {
             inBuffer.clear();
+            logger.debug("Caught exception: ", e);
         }
         return msgs;
     }