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 {