Double the SSL input packet buffer size
[controller.git] / opendaylight / protocol_plugins / openflow / src / main / java / org / opendaylight / controller / protocol_plugin / openflow / core / internal / SecureMessageReadWriteService.java
index 1a9dfdad95d94ea00ad733de6cca8987ced0b535..d60bcab8b32fdf299d68505c348fe5b4fc5ec831 100644 (file)
@@ -19,13 +19,15 @@ import java.nio.channels.SocketChannel;
 import java.security.KeyStore;
 import java.security.SecureRandom;
 import java.util.List;
+
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.SSLEngineResult;
+import javax.net.ssl.SSLEngineResult.HandshakeStatus;
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.SSLEngineResult.HandshakeStatus;
+
 import org.opendaylight.controller.protocol_plugin.openflow.core.IMessageReadWrite;
 import org.openflow.protocol.OFMessage;
 import org.openflow.protocol.factory.BasicFactory;
@@ -88,35 +90,31 @@ public class SecureMessageReadWriteService implements IMessageReadWrite {
             keyStoreFile = keyStoreFile.trim();
         }
         if ((keyStoreFile == null) || keyStoreFile.isEmpty()) {
-            throw new FileNotFoundException(
-                    "controllerKeyStore not specified in ./configuration/config.ini");
+            throw new FileNotFoundException("TLS KeyStore file not found.");
         }
         if (keyStorePassword != null) {
             keyStorePassword = keyStorePassword.trim();
         }
         if ((keyStorePassword == null) || keyStorePassword.isEmpty()) {
-            throw new FileNotFoundException(
-                    "controllerKeyStorePassword not specified in ./configuration/config.ini");
+            throw new FileNotFoundException("TLS KeyStore Password not provided.");
         }
         if (trustStoreFile != null) {
             trustStoreFile = trustStoreFile.trim();
         }
         if ((trustStoreFile == null) || trustStoreFile.isEmpty()) {
-            throw new FileNotFoundException(
-                    "controllerTrustStore not specified in ./configuration/config.ini");
+            throw new FileNotFoundException("TLS TrustStore file not found");
         }
         if (trustStorePassword != null) {
             trustStorePassword = trustStorePassword.trim();
         }
         if ((trustStorePassword == null) || trustStorePassword.isEmpty()) {
-            throw new FileNotFoundException(
-                    "controllerTrustStorePassword not specified in ./configuration/config.ini");
+            throw new FileNotFoundException("TLS TrustStore Password not provided.");
         }
 
         KeyStore ks = KeyStore.getInstance("JKS");
         KeyStore ts = KeyStore.getInstance("JKS");
-        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
-        TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
+        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
         kfd = new FileInputStream(keyStoreFile);
         tfd = new FileInputStream(trustStoreFile);
         ks.load(kfd, keyStorePassword.toCharArray());
@@ -284,12 +282,17 @@ public class SecureMessageReadWriteService implements IMessageReadWrite {
                     peerNetData.position(), peerNetData.limit());
         }
 
-        peerAppData.flip();
-        msgs = factory.parseMessages(peerAppData);
-        if (peerAppData.hasRemaining()) {
-            peerAppData.compact();
-        } else {
+        try {
+            peerAppData.flip();
+            msgs = factory.parseMessages(peerAppData);
+            if (peerAppData.hasRemaining()) {
+                peerAppData.compact();
+            } else {
+                peerAppData.clear();
+            }
+        } catch (Exception e) {
             peerAppData.clear();
+            logger.debug("Caught exception: ", e);
         }
 
         this.socket.register(this.selector, SelectionKey.OP_READ, this);
@@ -404,9 +407,9 @@ public class SecureMessageReadWriteService implements IMessageReadWrite {
         this.myAppData = ByteBuffer
                 .allocate(session.getApplicationBufferSize());
         this.peerAppData = ByteBuffer.allocate(session
-                .getApplicationBufferSize());
+                .getApplicationBufferSize() * 2);
         this.myNetData = ByteBuffer.allocate(session.getPacketBufferSize());
-        this.peerNetData = ByteBuffer.allocate(session.getPacketBufferSize());
+        this.peerNetData = ByteBuffer.allocate(session.getPacketBufferSize() * 2);
     }
 
     @Override