Author: davsclaus Date: Fri Jun 4 13:56:49 2010 New Revision: 951412 URL: http://svn.apache.org/viewvc?rev=951412&view=rev Log: CAMEL-2790: FTPS now allows to use secure data channel for transfering file data. Added options to set protection level and buffer size as well.
Added: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsOperations.java (with props) Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsComponent.java camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsConfiguration.java camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsEndpoint.java Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java?rev=951412&r1=951411&r2=951412&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java Fri Jun 4 13:56:49 2010 @@ -436,6 +436,10 @@ public class FtpOperations implements Re } } + protected FTPClient getFtpClient() { + return client; + } + private boolean buildDirectoryChunks(String dirName) throws IOException { final StringBuilder sb = new StringBuilder(dirName.length()); final String[] dirs = dirName.split("/|\\\\"); @@ -457,5 +461,5 @@ public class FtpOperations implements Re return success; } - + } Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsComponent.java?rev=951412&r1=951411&r2=951412&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsComponent.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsComponent.java Fri Jun 4 13:56:49 2010 @@ -27,10 +27,9 @@ import org.apache.commons.net.ftp.FTPFil /** * FTP Secure (FTP over SSL/TLS) Component. * <p/> - * If desired, the JVM property -Djavax.net.debug=all can be used to see wire-level SSL details. + * If desired, the JVM property <tt>-Djavax.net.debug=all</tt> can be used to see wire-level SSL details. * * @version $Revision$ - * @author muellerc */ public class FtpsComponent extends FtpComponent { Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsConfiguration.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsConfiguration.java?rev=951412&r1=951411&r2=951412&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsConfiguration.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsConfiguration.java Fri Jun 4 13:56:49 2010 @@ -22,12 +22,14 @@ import java.net.URI; * FTP Secure (FTP over SSL/TLS) configuration * * @version $Revision$ - * @author muellerc */ public class FtpsConfiguration extends FtpConfiguration { private String securityProtocol = "TLS"; private boolean isImplicit; + private boolean useSecureDataChannel; + private String execProt = "P"; + private long execPbsz; public FtpsConfiguration() { setProtocol("ftps"); @@ -71,4 +73,51 @@ public class FtpsConfiguration extends F public void setIsImplicit(boolean isImplicit) { this.isImplicit = isImplicit; } + + public boolean isUseSecureDataChannel() { + return useSecureDataChannel; + } + + /** + * Sets whether to use secure data channel when transferring file content + * <p/> + * Default is <tt>false</tt> + * @see #setExecPbsz(long) + * @see #setExecProt(String) + */ + public void setUseSecureDataChannel(boolean useSecureDataChannel) { + this.useSecureDataChannel = useSecureDataChannel; + } + + public String getExecProt() { + return execProt; + } + + /** + * When using secure data channel you can set the exec protection level + * <p/> + * PROT command. C - Clear S - Safe(SSL protocol only) E - Confidential(SSL protocol only) P - Private + * <p/> + * Default value is <tt>P</tt> + * + * @param execProt either C, S, E or P + */ + public void setExecProt(String execProt) { + this.execProt = execProt; + } + + public long getExecPbsz() { + return execPbsz; + } + + /** + * When using secure data channel you can set the exec protection buffer size + * <p/> + * Default value is <tt>0</tt> + * + * @param execPbsz the buffer size + */ + public void setExecPbsz(long execPbsz) { + this.execPbsz = execPbsz; + } } \ No newline at end of file Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsEndpoint.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsEndpoint.java?rev=951412&r1=951411&r2=951412&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsEndpoint.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsEndpoint.java Fri Jun 4 13:56:49 2010 @@ -25,8 +25,9 @@ import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.TrustManagerFactory; import org.apache.camel.util.IOHelper; -import org.apache.camel.util.ObjectHelper; +import org.apache.camel.util.IntrospectionSupport; import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPSClient; @@ -34,7 +35,6 @@ import org.apache.commons.net.ftp.FTPSCl * FTP Secure (FTP over SSL/TLS) endpoint * * @version $Revision$ - * @author muellerc */ public class FtpsEndpoint extends FtpEndpoint<FTPFile> { @@ -110,6 +110,33 @@ public class FtpsEndpoint extends FtpEnd return client; } + @Override + protected RemoteFileOperations<FTPFile> createRemoteFileOperations() throws Exception { + // configure ftp client + FTPSClient client = getFtpsClient(); + + if (client == null) { + // must use a new client if not explicit configured to use a custom client + client = (FTPSClient) createFtpClient(); + } + + if (ftpClientParameters != null) { + IntrospectionSupport.setProperties(client, ftpClientParameters); + } + + if (ftpClientConfigParameters != null) { + // client config is optional so create a new one if we have parameter for it + if (ftpClientConfig == null) { + ftpClientConfig = new FTPClientConfig(); + } + IntrospectionSupport.setProperties(ftpClientConfig, ftpClientConfigParameters); + } + + FtpsOperations operations = new FtpsOperations(client, getFtpClientConfig()); + operations.setEndpoint(this); + return operations; + } + /** * Returns the FTPSClient. This method exists only for convenient. * Added: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsOperations.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsOperations.java?rev=951412&view=auto ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsOperations.java (added) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsOperations.java Fri Jun 4 13:56:49 2010 @@ -0,0 +1,70 @@ +/** + * 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.file.remote; + +import java.io.IOException; +import javax.net.ssl.SSLException; + +import org.apache.camel.component.file.GenericFileOperationFailedException; +import org.apache.camel.util.ObjectHelper; +import org.apache.commons.net.ftp.FTPClientConfig; +import org.apache.commons.net.ftp.FTPSClient; + +/** + * FTP Secure (FTP over SSL/TLS) operations + * + * @version $Revision$ + */ +public class FtpsOperations extends FtpOperations { + + public FtpsOperations(FTPSClient client, FTPClientConfig clientConfig) { + super(client, clientConfig); + } + + @Override + public boolean connect(RemoteFileConfiguration configuration) throws GenericFileOperationFailedException { + boolean answer = super.connect(configuration); + + FtpsConfiguration config = (FtpsConfiguration) configuration; + if (answer && config.isUseSecureDataChannel()) { + try { + // execProt must be configured + ObjectHelper.notEmpty(config.getExecProt(), "execProt", config); + + if (log.isDebugEnabled()) { + log.debug("Secure data channel being initialized with execPbsz=" + config.getExecPbsz() + ", execPort=" + config.getExecProt()); + } + getFtpClient().execPBSZ(config.getExecPbsz()); + getFtpClient().execPROT(config.getExecProt()); + } catch (SSLException e) { + throw new GenericFileOperationFailedException(client.getReplyCode(), + client.getReplyString(), e.getMessage(), e); + } catch (IOException e) { + throw new GenericFileOperationFailedException(client.getReplyCode(), + client.getReplyString(), e.getMessage(), e); + } + } + + return answer; + } + + @Override + protected FTPSClient getFtpClient() { + return (FTPSClient) super.getFtpClient(); + } + +} Propchange: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsOperations.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpsOperations.java ------------------------------------------------------------------------------ svn:keywords = Rev Date