You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/05/11 09:11:06 UTC

svn commit: r943023 - in /camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty: ClientPipelineFactory.java NettyProducer.java

Author: davsclaus
Date: Tue May 11 07:11:05 2010
New Revision: 943023

URL: http://svn.apache.org/viewvc?rev=943023&view=rev
Log:
CAMEL-2699: Fixed SSL re-connection with thanks to Gareth Collins

Modified:
    camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ClientPipelineFactory.java
    camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java

Modified: camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ClientPipelineFactory.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ClientPipelineFactory.java?rev=943023&r1=943022&r2=943023&view=diff
==============================================================================
--- camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ClientPipelineFactory.java (original)
+++ camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/ClientPipelineFactory.java Tue May 11 07:11:05 2010
@@ -17,7 +17,6 @@
 package org.apache.camel.component.netty;
 
 import java.util.List;
-
 import javax.net.ssl.SSLEngine;
 
 import org.apache.camel.component.netty.handlers.ClientChannelHandler;
@@ -37,22 +36,33 @@ public class ClientPipelineFactory imple
     private ChannelPipeline channelPipeline;
 
     public ClientPipelineFactory(NettyProducer producer) {
-        this.producer = producer; 
-    }    
-    
+        this.producer = producer;
+    }
+
     public ChannelPipeline getPipeline() throws Exception {
         if (channelPipeline != null) {
+            // http://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/ssl/SslHandler.html
+            // To restart the SSL session, you must remove the existing closed SslHandler
+            // from the ChannelPipeline, insert a new SslHandler with a new SSLEngine into
+            // the pipeline, and start the handshake process as described in the first section.
+            if (channelPipeline.remove("ssl") != null) {
+                // reinitialize and add SSL first
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Client SSL handler re-initialized on the ChannelPipeline");
+                }
+                channelPipeline.addFirst("ssl", configureClientSSLOnDemand());
+            }
             return channelPipeline;
         }
-        
+
         channelPipeline = Channels.pipeline();
 
         SslHandler sslHandler = configureClientSSLOnDemand();
         if (sslHandler != null) {
             if (LOG.isDebugEnabled()) {
-                LOG.debug("Client SSL handler configured and added as an interceptor against the ChannelPipeline");
+                LOG.debug("Client SSL handler configured and added to the ChannelPipeline");
             }
-            channelPipeline.addLast("ssl", sslHandler);            
+            channelPipeline.addLast("ssl", sslHandler);
         }
 
         List<ChannelUpstreamHandler> decoders = producer.getConfiguration().getDecoders();
@@ -84,7 +94,7 @@ public class ClientPipelineFactory imple
         } else {
             if (producer.getConfiguration().getKeyStoreFile() == null) {
                 LOG.debug("keystorefile is null");
-            } 
+            }
             if (producer.getConfiguration().getTrustStoreFile() == null) {
                 LOG.debug("truststorefile is null");
             }
@@ -94,11 +104,12 @@ public class ClientPipelineFactory imple
             SSLEngineFactory sslEngineFactory = new SSLEngineFactory(
                 producer.getConfiguration().getKeyStoreFormat(),
                 producer.getConfiguration().getSecurityProvider(),
-                producer.getConfiguration().getKeyStoreFile(), 
-                producer.getConfiguration().getTrustStoreFile(), 
+                producer.getConfiguration().getKeyStoreFile(),
+                producer.getConfiguration().getTrustStoreFile(),
                 producer.getConfiguration().getPassphrase().toCharArray());
             SSLEngine sslEngine = sslEngineFactory.createClientSSLEngine();
             return new SslHandler(sslEngine);
         }
     }
+
 }

Modified: camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java?rev=943023&r1=943022&r2=943023&view=diff
==============================================================================
--- camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java (original)
+++ camel/trunk/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyProducer.java Tue May 11 07:11:05 2010
@@ -191,11 +191,6 @@ public class NettyProducer extends Defau
             clientBootstrap.setOption("child.reuseAddress", configuration.isReuseAddress());
             clientBootstrap.setOption("child.connectTimeoutMillis", configuration.getConnectTimeout());
         }
-        if (clientPipelineFactory == null) {
-            clientPipelineFactory = new ClientPipelineFactory(this);
-            clientPipeline = clientPipelineFactory.getPipeline();
-            clientBootstrap.setPipeline(clientPipeline);
-        }
     }
 
     protected void setupUDPCommunication() throws Exception {
@@ -215,19 +210,23 @@ public class NettyProducer extends Defau
             connectionlessClientBootstrap.setOption("receiveBufferSize", configuration.getReceiveBufferSize());
 
         }
-        if (clientPipelineFactory == null) {
-            clientPipelineFactory = new ClientPipelineFactory(this);
-            clientPipeline = clientPipelineFactory.getPipeline();
-            connectionlessClientBootstrap.setPipeline(clientPipeline);
-        }
     }
 
     private void openConnection() throws Exception {
         ChannelFuture channelFuture;
 
+        // initialize client pipeline factory
+        if (clientPipelineFactory == null) {
+            clientPipelineFactory = new ClientPipelineFactory(this);
+        }
+        // must get the pipeline from the factory when opening a new connection
+        clientPipeline = clientPipelineFactory.getPipeline();
+
         if (clientBootstrap != null) {
+            clientBootstrap.setPipeline(clientPipeline);
             channelFuture = clientBootstrap.connect(new InetSocketAddress(configuration.getHost(), configuration.getPort()));
         } else if (connectionlessClientBootstrap != null) {
+            connectionlessClientBootstrap.setPipeline(clientPipeline);
             connectionlessClientBootstrap.bind(new InetSocketAddress(0));
             channelFuture = connectionlessClientBootstrap.connect(new InetSocketAddress(configuration.getHost(), configuration.getPort()));
         } else {