Author: dvaleri
Date: Tue Nov 15 15:29:04 2011
New Revision: 1202242

URL: http://svn.apache.org/viewvc?rev=1202242&view=rev
Log:
[CAMEL-4679] [CAMEL-4664] Corrrected URI parsing issues with password and port 
settings.  Added support for JSSE Config Utility.

Added:
    
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersCometdProducerConsumerTest.java
   (with props)
    
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersInUriCometdProducerConsumerTest.java
   (with props)
    
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/CamelSSLIRCConnection.java
   (with props)
    
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsWithSslContextParamsRouteTest.java
   (with props)
    camel/trunk/components/camel-irc/src/test/resources/localhost.ks   (with 
props)
    camel/trunk/components/camel-irc/src/test/unrealircd/
    camel/trunk/components/camel-irc/src/test/unrealircd/ircd.motd   (with 
props)
    camel/trunk/components/camel-irc/src/test/unrealircd/server.cert.pem   
(with props)
    camel/trunk/components/camel-irc/src/test/unrealircd/server.key.pem   (with 
props)
    camel/trunk/components/camel-irc/src/test/unrealircd/unrealircd.conf   
(with props)
Modified:
    
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
    camel/trunk/components/camel-irc/pom.xml
    
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
    
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java
    
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java
    
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcRouteTest.java
    
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsRouteTest.java
    
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java

Modified: 
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java?rev=1202242&r1=1202241&r2=1202242&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
 (original)
+++ 
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
 Tue Nov 15 15:29:04 2011
@@ -22,12 +22,17 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.net.ssl.SSLContext;
+
 import org.apache.camel.Endpoint;
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.util.jsse.SSLContextParameters;
 import org.cometd.bayeux.server.BayeuxServer;
 import org.cometd.bayeux.server.SecurityPolicy;
 import org.cometd.server.BayeuxServerImpl;
 import org.cometd.server.CometdServlet;
+import org.eclipse.jetty.http.ssl.SslContextFactory;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
@@ -56,6 +61,7 @@ public class CometdComponent extends Def
     private SslSocketConnector sslSocketConnector;
     private SecurityPolicy securityPolicy;
     private List<BayeuxServer.Extension> extensions;
+    private SSLContextParameters sslContextParameters;
 
     class ConnectorRef {
         Connector connector;
@@ -197,16 +203,28 @@ public class CometdComponent extends Def
     }
 
     public synchronized SslSocketConnector getSslSocketConnector() {
-        if (sslSocketConnector == null) {
-            sslSocketConnector = new SslSocketConnector();
-            // with default null values, jetty ssl system properties
-            // and console will be read by jetty implementation
-            
sslSocketConnector.getSslContextFactory().setKeyManagerPassword(sslPassword);
-            
sslSocketConnector.getSslContextFactory().setKeyStorePassword(sslKeyPassword);
-            if (sslKeystore != null) {
-                
sslSocketConnector.getSslContextFactory().setKeyStore(sslKeystore);
+        if (sslContextParameters != null && sslSocketConnector == null) {
+            SslContextFactory sslContextFactory = new 
CometdComponentSslContextFactory();
+            try {
+                
sslContextFactory.setSslContext(sslContextParameters.createSSLContext());
+            } catch (Exception e) {
+               throw new RuntimeCamelException("Error initiating SSLContext.", 
e);
+            }
+            sslSocketConnector = new SslSocketConnector(sslContextFactory);
+        }
+        else {
+            if (sslSocketConnector == null) {
+                sslSocketConnector = new SslSocketConnector();
+                // with default null values, jetty ssl system properties
+                // and console will be read by jetty implementation
+                
sslSocketConnector.getSslContextFactory().setKeyManagerPassword(sslPassword);
+                
sslSocketConnector.getSslContextFactory().setKeyStorePassword(sslKeyPassword);
+                if (sslKeystore != null) {
+                    
sslSocketConnector.getSslContextFactory().setKeyStore(sslKeystore);
+                }
             }
         }
+        
         return sslSocketConnector;
     }
 
@@ -267,6 +285,14 @@ public class CometdComponent extends Def
         }
         extensions.add(extension);
     }
+    
+    public SSLContextParameters getSslContextParameters() {
+        return sslContextParameters;
+    }
+
+    public void setSslContextParameters(SSLContextParameters 
sslContextParameters) {
+        this.sslContextParameters = sslContextParameters;
+    }
 
     protected Server createServer() throws Exception {
         Server server = new Server();
@@ -292,4 +318,14 @@ public class CometdComponent extends Def
     protected void doStart() throws Exception {
         super.doStart();
     }
+    
+    /**
+     * Override the key/trust store check method as it does not account for a 
factory that has
+     * a pre-configured {@link SSLContext}.
+     */
+    private static final class CometdComponentSslContextFactory extends 
SslContextFactory {
+        @Override
+        public void checkKeyStore() {
+        }
+    }
 }

Added: 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersCometdProducerConsumerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersCometdProducerConsumerTest.java?rev=1202242&view=auto
==============================================================================
--- 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersCometdProducerConsumerTest.java
 (added)
+++ 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersCometdProducerConsumerTest.java
 Tue Nov 15 15:29:04 2011
@@ -0,0 +1,120 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cometd;
+
+import java.util.List;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.camel.util.jsse.KeyManagersParameters;
+import org.apache.camel.util.jsse.KeyStoreParameters;
+import org.apache.camel.util.jsse.SSLContextParameters;
+import org.apache.camel.util.jsse.TrustManagersParameters;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit testing for using a CometdProducer and a CometdConsumer
+ */
+public class SslContextParametersCometdProducerConsumerTest extends 
CamelTestSupport {
+
+    private int port;
+    private String uri;
+    
+    @Test
+    public void testProducer() throws Exception {
+        Person person = new Person("David", "Greco");
+        template.requestBody("direct:input", person);
+        MockEndpoint ep = (MockEndpoint) context.getEndpoint("mock:test");
+        List<Exchange> exchanges = ep.getReceivedExchanges();
+        for (Exchange exchange : exchanges) {
+            Person person1 = (Person) exchange.getIn().getBody();
+            assertEquals("David", person1.getName());
+            assertEquals("Greco", person1.getSurname());
+        }
+    }
+
+    @Override
+    @Before
+    public void setUp() throws Exception {
+        port = AvailablePortFinder.getNextAvailable(23500);
+        uri = "cometds://127.0.0.1:" + port + 
"/service/test?baseResource=file:./target/test-classes/webapp&"
+                + 
"timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2";
+
+        super.setUp();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                KeyStoreParameters ksp = new KeyStoreParameters();
+                ksp.setResource("jsse/localhost.ks");
+                ksp.setPassword("changeit");
+                
+                KeyManagersParameters kmp = new KeyManagersParameters();
+                kmp.setKeyPassword("changeit");
+                kmp.setKeyStore(ksp);
+                
+                TrustManagersParameters tmp = new TrustManagersParameters();
+                tmp.setKeyStore(ksp);
+
+                SSLContextParameters sslContextParameters = new 
SSLContextParameters();
+                sslContextParameters.setKeyManagers(kmp);
+                sslContextParameters.setTrustManagers(tmp);
+                
+                CometdComponent component = (CometdComponent) 
context.getComponent("cometds");
+                component.setSslContextParameters(sslContextParameters);
+
+                from("direct:input").to(uri);
+
+                from(uri).to("mock:test");
+            }
+        };
+    }
+
+    public static class Person {
+
+        private String name;
+        private String surname;
+
+        Person(String name, String surname) {
+            this.name = name;
+            this.surname = surname;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getSurname() {
+            return surname;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public void setSurname(String surname) {
+            this.surname = surname;
+        }
+    }
+}

Propchange: 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersCometdProducerConsumerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersInUriCometdProducerConsumerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersInUriCometdProducerConsumerTest.java?rev=1202242&view=auto
==============================================================================
--- 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersInUriCometdProducerConsumerTest.java
 (added)
+++ 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersInUriCometdProducerConsumerTest.java
 Tue Nov 15 15:29:04 2011
@@ -0,0 +1,126 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.cometd;
+
+import java.util.List;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.camel.util.jsse.KeyManagersParameters;
+import org.apache.camel.util.jsse.KeyStoreParameters;
+import org.apache.camel.util.jsse.SSLContextParameters;
+import org.apache.camel.util.jsse.TrustManagersParameters;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit testing for using a CometdProducer and a CometdConsumer
+ */
+public class SslContextParametersInUriCometdProducerConsumerTest extends 
CamelTestSupport {
+
+    private int port;
+    private String uri;
+    
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        KeyStoreParameters ksp = new KeyStoreParameters();
+        ksp.setResource("jsse/localhost.ks");
+        ksp.setPassword("changeit");
+        
+        KeyManagersParameters kmp = new KeyManagersParameters();
+        kmp.setKeyPassword("changeit");
+        kmp.setKeyStore(ksp);
+        
+        TrustManagersParameters tmp = new TrustManagersParameters();
+        tmp.setKeyStore(ksp);
+
+        SSLContextParameters sslContextParameters = new SSLContextParameters();
+        sslContextParameters.setKeyManagers(kmp);
+        sslContextParameters.setTrustManagers(tmp);
+        
+        JndiRegistry registry = super.createRegistry();
+        registry.bind("sslContextParameters", sslContextParameters);
+        return registry;
+    }
+
+    @Test
+    public void testProducer() throws Exception {
+        Person person = new Person("David", "Greco");
+        template.requestBody("direct:input", person);
+        MockEndpoint ep = (MockEndpoint) context.getEndpoint("mock:test");
+        List<Exchange> exchanges = ep.getReceivedExchanges();
+        for (Exchange exchange : exchanges) {
+            Person person1 = (Person) exchange.getIn().getBody();
+            assertEquals("David", person1.getName());
+            assertEquals("Greco", person1.getSurname());
+        }
+    }
+
+    @Override
+    @Before
+    public void setUp() throws Exception {
+        port = AvailablePortFinder.getNextAvailable(23500);
+        uri = "cometds://127.0.0.1:" + port + 
"/service/test?baseResource=file:./target/test-classes/webapp&"
+                + 
"timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2&"
+                + "sslContextParameters=#sslContextParameters";
+
+        super.setUp();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:input").to(uri);
+
+                from(uri).to("mock:test");
+            }
+        };
+    }
+
+    public static class Person {
+
+        private String name;
+        private String surname;
+
+        Person(String name, String surname) {
+            this.name = name;
+            this.surname = surname;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getSurname() {
+            return surname;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public void setSurname(String surname) {
+            this.surname = surname;
+        }
+    }
+}

Propchange: 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/SslContextParametersInUriCometdProducerConsumerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: camel/trunk/components/camel-irc/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/pom.xml?rev=1202242&r1=1202241&r2=1202242&view=diff
==============================================================================
--- camel/trunk/components/camel-irc/pom.xml (original)
+++ camel/trunk/components/camel-irc/pom.xml Tue Nov 15 15:29:04 2011
@@ -70,18 +70,4 @@
         <scope>test</scope>
     </dependency>
   </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>**/IrcsRouteTest.*</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>

Added: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/CamelSSLIRCConnection.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/CamelSSLIRCConnection.java?rev=1202242&view=auto
==============================================================================
--- 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/CamelSSLIRCConnection.java
 (added)
+++ 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/CamelSSLIRCConnection.java
 Tue Nov 15 15:29:04 2011
@@ -0,0 +1,111 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.irc;
+
+import java.io.IOException;
+import java.net.SocketException;
+import java.security.GeneralSecurityException;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.util.jsse.SSLContextParameters;
+import org.schwering.irc.lib.ssl.SSLIRCConnection;
+import org.schwering.irc.lib.ssl.SSLNotSupportedException;
+
+/**
+ * Customized version of {@link SSLIRCConnection} used to support the use of 
an {@link SSLContextParameters} instance
+ * for JSSE configuration.
+ */
+public class CamelSSLIRCConnection extends SSLIRCConnection {
+    
+    private SSLContextParameters sslContextParameters;
+
+    public CamelSSLIRCConnection(String host, int portMin, int portMax, String 
pass, 
+                                 String nick, String username, String realname,
+                                 SSLContextParameters sslContextParameters) {
+        super(host, portMin, portMax, pass, nick, username, realname);
+        this.sslContextParameters = sslContextParameters;
+    }
+
+    public CamelSSLIRCConnection(String host, int[] ports, String pass,
+                                 String nick, String username, String realname,
+                                 SSLContextParameters sslContextParameters) {
+        super(host, ports, pass, nick, username, realname);
+        this.sslContextParameters = sslContextParameters;
+    }
+
+    @Override
+    public void connect() throws IOException {
+        
+        if (sslContextParameters == null) {
+            super.connect();
+        } else {
+            if (level != 0) {
+                throw new SocketException("Socket closed or already open (" + 
level + ")");
+            }
+            
+            IOException exception = null;
+            
+            final SSLContext sslContext;
+            try {
+                sslContext = sslContextParameters.createSSLContext();
+            } catch (GeneralSecurityException e) {
+                throw new RuntimeCamelException("Error in SSLContextParameters 
configuration or instantiation.", e);
+            }
+            
+            final SSLSocketFactory sf = sslContext.getSocketFactory();
+            
+            SSLSocket s = null;
+            
+            for (int i = 0; i < ports.length && s == null; i++) {
+                try {
+                    s = (SSLSocket)sf.createSocket(host, ports[i]);
+                    s.startHandshake();
+                    exception = null;
+                } catch (SSLNotSupportedException exc) {
+                    if (s != null) {
+                        s.close();
+                    }
+                    s = null;
+                    throw exc;
+                } catch (IOException exc) {
+                    if (s != null) {
+                        s.close();
+                    }
+                    s = null;
+                    exception = exc; 
+                }
+            }
+            if (exception != null) {
+                throw exception; // connection wasn't successful at any port
+            }
+            
+            prepare(s);
+        }        
+    }
+
+    public SSLContextParameters getSslContextParameters() {
+        return sslContextParameters;
+    }
+
+    public void setSslContextParameters(SSLContextParameters 
sslContextParameters) {
+        this.sslContextParameters = sslContextParameters;
+    }
+}

Propchange: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/CamelSSLIRCConnection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java?rev=1202242&r1=1202241&r2=1202242&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
 Tue Nov 15 15:29:04 2011
@@ -21,7 +21,6 @@ import java.util.Map;
 
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.DefaultComponent;
-import org.apache.camel.util.UnsafeUriCharactersEncoder;
 import org.schwering.irc.lib.IRCConnection;
 import org.schwering.irc.lib.IRCEventListener;
 import org.schwering.irc.lib.ssl.SSLIRCConnection;
@@ -66,16 +65,23 @@ public class IrcComponent extends Defaul
         IRCEventListener ircLogger;
 
         if (configuration.getUsingSSL()) {
+            
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Creating SSL Connection to {} destination(s): {} 
nick: {} user: {}",
                     new Object[]{configuration.getHostname(), 
configuration.getListOfChannels(), configuration.getNickname(), 
configuration.getUsername()});
             }
-            SSLIRCConnection sconn = new 
SSLIRCConnection(configuration.getHostname(), configuration.getPorts(), 
configuration.getPassword(),
-                    configuration.getNickname(), configuration.getUsername(), 
configuration.getRealname());
-
-            sconn.addTrustManager(configuration.getTrustManager());
-            conn = sconn;
+            
+            if (configuration.getSslContextParameters() != null) {
+                conn = new CamelSSLIRCConnection(configuration.getHostname(), 
configuration.getPorts(), configuration.getPassword(),
+                                                 configuration.getNickname(), 
configuration.getUsername(), configuration.getRealname(),
+                                                 
configuration.getSslContextParameters());
+            } else {
+                SSLIRCConnection sconn = new 
SSLIRCConnection(configuration.getHostname(), configuration.getPorts(), 
configuration.getPassword(),
+                        configuration.getNickname(), 
configuration.getUsername(), configuration.getRealname());
 
+                sconn.addTrustManager(configuration.getTrustManager());
+                conn = sconn;
+            }
         } else {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Creating Connection to {} destination(s): {} nick: 
{} user: {}",

Modified: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java?rev=1202242&r1=1202241&r2=1202242&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcConfiguration.java
 Tue Nov 15 15:29:04 2011
@@ -22,19 +22,14 @@ import java.net.URISyntaxException;
 import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 import org.apache.camel.util.UnsafeUriCharactersEncoder;
+import org.apache.camel.util.jsse.SSLContextParameters;
 import org.schwering.irc.lib.ssl.SSLDefaultTrustManager;
 import org.schwering.irc.lib.ssl.SSLTrustManager;
 import org.slf4j.Logger;
@@ -64,6 +59,7 @@ public class IrcConfiguration implements
     private boolean onPrivmsg = true;
     private boolean autoRejoin = true;
     private int[] ports = {6667, 6668, 6669};
+    private SSLContextParameters sslContextParameters;
 
     public IrcConfiguration() {
     }
@@ -121,9 +117,30 @@ public class IrcConfiguration implements
 
         URI uri = new URI(uriStr);
 
-        setNickname(uri.getUserInfo());
-        setUsername(uri.getUserInfo());
-        setRealname(uri.getUserInfo());
+        // Because we can get a "sanitized" URI, we need to deal with the 
situation where the
+        // user info includes the username and password together or else we 
get a mangled username
+        // that includes the user's secret being sent to the server.
+        String userInfo = uri.getUserInfo();
+        String username = null;
+        String password = null;
+        if (userInfo != null) {
+            int colonIndex = userInfo.indexOf(":");
+            if (colonIndex != -1) {
+                username = userInfo.substring(0, colonIndex);
+                password = userInfo.substring(colonIndex + 1);
+            } else {
+                username = userInfo;
+            }
+        }
+        
+        if (uri.getPort() != -1) {
+            setPorts(new int[] {uri.getPort()});
+        }
+        
+        setNickname(username);
+        setUsername(username);
+        setRealname(username);
+        setPassword(password);
         setHostname(uri.getHost());
 
         String path = uri.getPath();
@@ -314,6 +331,14 @@ public class IrcConfiguration implements
     public void setAutoRejoin(boolean autoRejoin) {
         this.autoRejoin = autoRejoin;
     }
+    
+    public SSLContextParameters getSslContextParameters() {
+        return sslContextParameters;
+    }
+
+    public void setSslContextParameters(SSLContextParameters 
sslContextParameters) {
+        this.sslContextParameters = sslContextParameters;
+    }
 
     public String toString() {
         return "IrcConfiguration[hostname: " + hostname + ", ports=" + 
Arrays.toString(ports) + ", username=" + username + "]";

Modified: 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java?rev=1202242&r1=1202241&r2=1202242&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcEndpoint.java
 Tue Nov 15 15:29:04 2011
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.component.irc;
 
-import java.util.List;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;

Modified: 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcRouteTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcRouteTest.java?rev=1202242&r1=1202241&r2=1202242&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcRouteTest.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcRouteTest.java
 Tue Nov 15 15:29:04 2011
@@ -23,7 +23,6 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -35,7 +34,7 @@ public class IrcRouteTest extends CamelT
     protected String body2 = "Message Two";
     private boolean sentMessages;    
 
-    @Ignore("test manual")
+    
     @Test
     public void testIrcMessages() throws Exception {
         resultEndpoint = (MockEndpoint) context.getEndpoint("mock:result");
@@ -67,11 +66,11 @@ public class IrcRouteTest extends CamelT
     }
 
     protected String sendUri() {
-        return 
"irc://camel-...@irc.codehaus.org:6667/#camel-test?nickname=camel-prd";
+        return 
"irc://camel-prd-u...@irc.codehaus.org:6667/#camel-test?nickname=camel-prd";
     }
 
     protected String fromUri() {
-        return 
"irc://camel-...@irc.codehaus.org:6667/#camel-test?nickname=camel-con";
+        return 
"irc://camel-con-u...@irc.codehaus.org:6667/#camel-test?nickname=camel-con";
     }    
     
     /**

Modified: 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsRouteTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsRouteTest.java?rev=1202242&r1=1202241&r2=1202242&view=diff
==============================================================================
--- 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsRouteTest.java
 (original)
+++ 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsRouteTest.java
 Tue Nov 15 15:29:04 2011
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.irc;
 
+import org.junit.Ignore;
+
+@Ignore
 public class IrcsRouteTest extends IrcRouteTest {
 
     // TODO This test is disabled until we can find a public SSL enabled IRC 

Added: 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsWithSslContextParamsRouteTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsWithSslContextParamsRouteTest.java?rev=1202242&view=auto
==============================================================================
--- 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsWithSslContextParamsRouteTest.java
 (added)
+++ 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsWithSslContextParamsRouteTest.java
 Tue Nov 15 15:29:04 2011
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.irc;
+
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.util.jsse.KeyStoreParameters;
+import org.apache.camel.util.jsse.SSLContextParameters;
+import org.apache.camel.util.jsse.TrustManagersParameters;
+import org.junit.Ignore;
+
+@Ignore
+public class IrcsWithSslContextParamsRouteTest extends IrcRouteTest {
+
+    // TODO This test is disabled until we can find a public SSL enabled IRC 
+    // server to test against. To use this test, follow the following 
procedures:
+    // 1) Download and install UnrealIRCd 3.2.9 from http://www.unrealircd.com/
+    // 2) Copy the contents of the src/test/unrealircd folder into the 
installation
+    //    folder of UnrealIRCd.
+    // 3) Start UnrealIRCd and execute this test.  Often the test executes 
quicker than
+    //    the IRC server responds and the assertion will fail.  In order to 
get the test to
+    //    pass reliably, you may need to set a break point in 
IrcEndpoint#joinChanel in order
+    //    to slow the route creation down enough for the event listener to be 
in place
+    //    when camel-con joins the room.
+    
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        KeyStoreParameters ksp = new KeyStoreParameters();
+        ksp.setResource("localhost.ks");
+        ksp.setPassword("changeit");
+        
+        TrustManagersParameters tmp = new TrustManagersParameters();
+        tmp.setKeyStore(ksp);
+        
+        SSLContextParameters sslContextParameters = new SSLContextParameters();
+        sslContextParameters.setTrustManagers(tmp);
+        
+        
+        JndiRegistry registry = super.createRegistry();
+        registry.bind("sslContextParameters", sslContextParameters);
+
+        return registry;
+    }
+
+    @Override
+    protected String sendUri() {
+        return 
"ircs://camel-prd-user@localhost:6669/#camel-test?nickname=camel-prd&password=password&sslContextParameters=#sslContextParameters";
+    }
+
+    @Override    
+    protected String fromUri() {
+        return 
"ircs://camel-con-user@localhost:6669/#camel-test?nickname=camel-con&password=password&sslContextParameters=#sslContextParameters";
+    }    
+
+}
\ No newline at end of file

Propchange: 
camel/trunk/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsWithSslContextParamsRouteTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: camel/trunk/components/camel-irc/src/test/resources/localhost.ks
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/resources/localhost.ks?rev=1202242&view=auto
==============================================================================
Binary file - no diff available.

Propchange: camel/trunk/components/camel-irc/src/test/resources/localhost.ks
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: camel/trunk/components/camel-irc/src/test/unrealircd/ircd.motd
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/unrealircd/ircd.motd?rev=1202242&view=auto
==============================================================================
--- camel/trunk/components/camel-irc/src/test/unrealircd/ircd.motd (added)
+++ camel/trunk/components/camel-irc/src/test/unrealircd/ircd.motd Tue Nov 15 
15:29:04 2011
@@ -0,0 +1 @@
+Hi!
\ No newline at end of file

Propchange: camel/trunk/components/camel-irc/src/test/unrealircd/ircd.motd
------------------------------------------------------------------------------
    svn:executable = *

Added: camel/trunk/components/camel-irc/src/test/unrealircd/server.cert.pem
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/unrealircd/server.cert.pem?rev=1202242&view=auto
==============================================================================
--- camel/trunk/components/camel-irc/src/test/unrealircd/server.cert.pem (added)
+++ camel/trunk/components/camel-irc/src/test/unrealircd/server.cert.pem Tue 
Nov 15 15:29:04 2011
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICZTCCAc6gAwIBAgIJAKNUHEnxsizpMA0GCSqGSIb3DQEBBQUAMGkxCzAJBgNV
+BAYTAlVTMREwDwYDVQQIEwhWaXJnaW5pYTEQMA4GA1UEBxMHQXNoYnVybjESMBAG
+A1UEChMJSVJDIGdlZWtzMQ0wCwYDVQQLEwRJUkNkMRIwEAYDVQQDEwlsb2NhbGhv
+c3QwHhcNMTExMTE0MTY0MzM5WhcNMTIxMTEzMTY0MzM5WjBpMQswCQYDVQQGEwJV
+UzERMA8GA1UECBMIVmlyZ2luaWExEDAOBgNVBAcTB0FzaGJ1cm4xEjAQBgNVBAoT
+CUlSQyBnZWVrczENMAsGA1UECxMESVJDZDESMBAGA1UEAxMJbG9jYWxob3N0MIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqibJ+VZBEgXjDdnD4fJ+1CW+hKs7s
+Ndxv0LFQTvS67W/WAZHKxuief4UcR8gVNWGxj2TbvM9wWQGkfzZ+sWhiJY/HjgaY
+y9XEh/UtHTZ6pFGY0jp7ZlkNNHMj9qlprGNqz1XcrMghQGlfW7KfZqQ8nOYawjWZ
+1Nwvwqs9vLQXiwIDAQABoxUwEzARBglghkgBhvhCAQEEBAMCBkAwDQYJKoZIhvcN
+AQEFBQADgYEABvJJnG0Q+iHBU3GOLbZ+kW9TylXvOYa0jlV+rPVcjHi/MwZUPjW2
+0ehllVrsm/NnpLq/H9074rVCr2hPl+rShLeQLghyh0kw2QI+wJtXbtht35F241TL
+1kHwODDYx4nclTUR2QT561b3WywECXcPFC49Gp4jv5K77hIcu39jKYA=
+-----END CERTIFICATE-----

Propchange: camel/trunk/components/camel-irc/src/test/unrealircd/server.cert.pem
------------------------------------------------------------------------------
    svn:executable = *

Added: camel/trunk/components/camel-irc/src/test/unrealircd/server.key.pem
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/unrealircd/server.key.pem?rev=1202242&view=auto
==============================================================================
--- camel/trunk/components/camel-irc/src/test/unrealircd/server.key.pem (added)
+++ camel/trunk/components/camel-irc/src/test/unrealircd/server.key.pem Tue Nov 
15 15:29:04 2011
@@ -0,0 +1,16 @@
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKqJsn5VkESBeMN2
+cPh8n7UJb6Eqzuw13G/QsVBO9Lrtb9YBkcrG6J5/hRxHyBU1YbGPZNu8z3BZAaR/
+Nn6xaGIlj8eOBpjL1cSH9S0dNnqkUZjSOntmWQ00cyP2qWmsY2rPVdysyCFAaV9b
+sp9mpDyc5hrCNZnU3C/Cqz28tBeLAgMBAAECgYBLJoLRyULZ7XQaLod5+PEoBhB7
+JTIqRVHutDhu+1w9Q4SU+fwVL7Iypl8yJy+0qOF0LYx0iK+hApgGtUh+bA9i+HNK
+1t7B87M6Tyy3dT3EwP0MTeDtUqQWEJHi4YgtjiHUdVO+86Y2Kj0b+Pusf2zyRdZO
+atYQcJIC3zV956yxgQJBANqZlifOSQUT7aK8sKWYJt/PW2RSKRIIRp14cOhSLqES
+T50mBEUIMZfLV5+x7oI9DvLeCuwS1M8MbyZqrHsmfiUCQQDHtwzb/oJjJdiTdx2R
+Gemw66RxDWGdfIYEQiZ5UrNCNbXeApBuy570Uxb/cfaSxKDN1oatrM91jOu3IB1E
+AxfvAkEA16GfK77h6p9gzyHAQmjXF/kMVuZw2vfM6HKxNYozsvFEFWk11v6hJPIR
+ilbTRieCwnHjZkGhKGhEkCmz4Hr0/QJBAKzi1Hn5J6xmzcZSfkDnGrryMoc/Wzp2
+2pkDHsU2B0IQtuB6fce78110NFtrr1U8bCvkQvBDwc/z7vW3Ej6XIvcCQB3YhPif
+JMZBlWCX9ouOnequEC9BXybeXcb46hWnkTS+KmjwpEXA0lbBwmOpq7Y7yAbsezuY
+xT9i1Ry944+nRLU=
+-----END PRIVATE KEY-----

Propchange: camel/trunk/components/camel-irc/src/test/unrealircd/server.key.pem
------------------------------------------------------------------------------
    svn:executable = *

Added: camel/trunk/components/camel-irc/src/test/unrealircd/unrealircd.conf
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-irc/src/test/unrealircd/unrealircd.conf?rev=1202242&view=auto
==============================================================================
--- camel/trunk/components/camel-irc/src/test/unrealircd/unrealircd.conf (added)
+++ camel/trunk/components/camel-irc/src/test/unrealircd/unrealircd.conf Tue 
Nov 15 15:29:04 2011
@@ -0,0 +1,184 @@
+loadmodule "modules/commands.dll";
+loadmodule "modules/cloak.dll";
+
+include "help.conf";
+include "badwords.channel.conf";
+include "badwords.message.conf";
+include "badwords.quit.conf";
+include "spamfilter.conf";
+
+me
+{
+       name "localhost.net";
+       info "FooNet Server";
+       numeric 1;
+};
+
+admin {
+       "Bob Smith";
+       "bob";
+       "wid...@used.name";
+};
+
+class           clients
+{
+       pingfreq 90;
+       maxclients 500;
+       sendq 100000;
+       recvq 8000;
+};
+
+allow {
+       ip             *@*;
+       hostname       *@*;
+       class          clients;
+       password "password";
+       maxperip 5;
+};
+
+allow           channel {
+       channel "#camel-test";
+};
+
+listen         *:6667
+{
+       options
+       {
+               clientsonly;
+       };
+};
+
+listen         *:6669
+{
+       options
+       {
+               ssl;
+               clientsonly;
+       };
+};
+
+files
+{
+       /* The Message Of The Day shown to users who log in: */
+       motd ircd.motd;
+
+       /*
+        * A short MOTD. If this file exists, it will be displayed to
+        * the user in place of the MOTD. Users can still view the
+        * full MOTD by using the /MOTD command.
+        */
+       /* shortmotd ircd.smotd; */
+
+       /* Shown when an operator /OPERs up */
+       /* opermotd oper.motd; */
+
+       /* Services MOTD append. */
+       /* svsmotd ircd.svsmotd; */
+
+       /* Bot MOTD */
+       /* botmotd bot.motd; */
+
+       /* Shown upon /RULES */
+       /* rules ircd.rules; */
+
+       /*
+        * Where the IRCd stores and loads a few values which should
+        * be persistent across server restarts. Must point to an
+        * existing file which the IRCd has permission to alter or to
+        * a file in a folder within which the IRCd may create files.
+        */
+       /* tunefile ircd.tune; */
+
+       /* Where to save the IRCd's pid. Should be writable by the IRCd. */
+       /* pidfile ircd.pid; */
+};
+
+/* Network configuration */
+set {
+       network-name            "TestNet";
+       default-server          "irc.roxnet.org";
+       services-server         "junk.org";
+       help-channel            "#TestNet";
+       hiddenhost-prefix       "rox";
+       /* prefix-quit          "no"; */
+       /* Cloak keys should be the same at all servers on the network.
+        * They are used for generating masked hosts and should be kept secret.
+        * The keys should be 3 random strings of 5-100 characters
+        * (10-20 chars is just fine) and must consist of lowcase (a-z),
+        * upcase (A-Z) and digits (0-9) [see first key example].
+        * HINT: On *NIX, you can run './unreal gencloak' in your shell to let
+        *       Unreal generate 3 random strings for you.
+        */
+       cloak-keys {
+               "aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
+               "aoAr1HnR6gl3sJ7hVz4Zb7x4YwpD";
+               "aoAr1HnR6gl3sJ7hVz4Zb7x4YwpF";
+       };
+       /* on-oper host */
+       hosts {
+               local           "locop.roxnet.org";
+               global          "ircop.roxnet.org";
+               coadmin         "coadmin.roxnet.org";
+               admin           "admin.roxnet.org";
+               servicesadmin   "csops.roxnet.org";
+               netadmin        "netadmin.roxnet.org";
+               host-on-oper-up "no";
+       };
+};
+
+/* Server specific configuration */
+
+set {
+       kline-address "s...@mailinator.com";
+       modes-on-connect "+xw";
+       modes-on-oper    "+xwgs";
+       oper-auto-join "#opers";
+       options {
+               hide-ulines;
+               /* You can enable ident checking here if you want */
+               /* identd-check; */
+               show-connect-info;
+       };
+
+       maxchannelsperuser 10;
+       /* The minimum time a user must be connected before being allowed to 
use a QUIT message,
+        * This will hopefully help stop spam */
+       anti-spam-quit-message-time 10s;
+       /* Make the message in static-quit show in all quits - meaning no
+           custom quits are allowed on local server */
+       /* static-quit "Client quit";   */
+
+       /* You can also block all part reasons by uncommenting this and say 
'yes',
+        * or specify some other text (eg: "Bye bye!") to always use as a 
comment.. */
+       /* static-part yes; */
+
+       /* This allows you to make certain stats oper only, use * for all stats,
+        * leave it out to allow users to see all stats. Type '/stats' for a 
full list.
+        * Some admins might want to remove the 'kGs' to allow normal users to 
list
+        * klines, glines and shuns.
+        */
+       oper-only-stats "okfGsMRUEelLCXzdD";
+
+       /* Throttling: this example sets a limit of 3 connection attempts per 
60s (per host). */
+       throttle {
+               connections 50;
+               period 60s;
+       };
+
+       /* Anti flood protection */
+       anti-flood {
+               nick-flood 3:60;        /* 3 nickchanges per 60 seconds (the 
default) */
+       };
+
+       /* Spam filter */
+       spamfilter {
+               ban-time 1d; /* default duration of a *line ban set by 
spamfilter */
+               ban-reason "Spam/Advertising"; /* default reason */
+               virus-help-channel "#help"; /* channel to use for 'viruschan' 
action */
+               /* except "#help"; channel to exempt from filtering */
+       };
+       ssl {
+               certificate "C:\Program Files\Unreal3.2\server.cert.pem";
+               key "C:\Program Files\Unreal3.2\server.key.pem";
+       };
+};
\ No newline at end of file

Propchange: camel/trunk/components/camel-irc/src/test/unrealircd/unrealircd.conf
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-irc/src/test/unrealircd/unrealircd.conf
------------------------------------------------------------------------------
    svn:executable = *

Modified: 
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java?rev=1202242&r1=1202241&r2=1202242&view=diff
==============================================================================
--- 
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
 (original)
+++ 
camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
 Tue Nov 15 15:29:04 2011
@@ -24,8 +24,10 @@ import javax.mail.Authenticator;
 import javax.mail.Message;
 import javax.mail.PasswordAuthentication;
 import javax.mail.Session;
+import javax.net.ssl.SSLContext;
 
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.util.jsse.SSLContextParameters;
 import org.springframework.mail.javamail.JavaMailSender;
 import org.springframework.mail.javamail.JavaMailSenderImpl;
 
@@ -63,6 +65,7 @@ public class MailConfiguration implement
     private boolean useInlineAttachments;
     private boolean ignoreUnsupportedCharset;
     private boolean disconnect;
+    private SSLContextParameters sslContextParameters;
 
     public MailConfiguration() {
     }
@@ -176,8 +179,16 @@ public class MailConfiguration implement
             // add more debug for the SSL communication as well
             properties.put("javax.net.debug", "all");
         }
-
-        if (dummyTrustManager && isSecureProtocol()) {
+        
+        if (sslContextParameters != null && isSecureProtocol()) {
+            SSLContext sslContext;
+            try {
+                sslContext = sslContextParameters.createSSLContext();
+            } catch (Exception e) {
+                throw new RuntimeCamelException("Error initializing 
SSLContext.", e);
+            }
+            properties.put("mail." + protocol + ".socketFactory", 
sslContext.getSocketFactory());
+        } else if (dummyTrustManager && isSecureProtocol()) {
             // set the custom SSL properties
             properties.put("mail." + protocol + ".socketFactory.class", 
"org.apache.camel.component.mail.security.DummySSLSocketFactory");
             properties.put("mail." + protocol + ".socketFactory.fallback", 
"false");
@@ -463,7 +474,7 @@ public class MailConfiguration implement
     public void setIgnoreUnsupportedCharset(boolean ignoreUnsupportedCharset) {
         this.ignoreUnsupportedCharset = ignoreUnsupportedCharset;
     }
-
+    
     public boolean isDisconnect() {
         return disconnect;
     }
@@ -471,4 +482,12 @@ public class MailConfiguration implement
     public void setDisconnect(boolean disconnect) {
         this.disconnect = disconnect;
     }
+
+    public SSLContextParameters getSslContextParameters() {
+        return sslContextParameters;
+    }
+
+    public void setSslContextParameters(SSLContextParameters 
sslContextParameters) {
+        this.sslContextParameters = sslContextParameters;
+    }
 }


Reply via email to