summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java')
-rw-r--r--src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java104
1 files changed, 66 insertions, 38 deletions
diff --git a/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java b/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java
index 13f3ae8..3ee624e 100644
--- a/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java
+++ b/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java
@@ -1,23 +1,23 @@
package org.openslx.satellitedaemon.ftp;
-import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
+import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.util.List;
-import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
-import org.apache.commons.net.ftp.FTP;
-import org.apache.commons.net.ftp.FTPSClient;
import org.apache.log4j.Logger;
-import org.openslx.imagemaster.thrift.iface.FtpCredentials;
+import org.openslx.filetransfer.Uploader;
import org.openslx.imagemaster.thrift.iface.ImageData;
+import org.openslx.imagemaster.thrift.iface.UploadInfos;
import org.openslx.satellitedaemon.Globals;
import org.openslx.satellitedaemon.Globals.PropInt;
import org.openslx.satellitedaemon.Globals.PropString;
@@ -31,50 +31,78 @@ public class FtpUploadWorker implements Runnable
public void run()
{
while ( true ) {
+ // This List contains all Images in the Database that should be uploaded.
List<DbImage> imageList = DbImage.getAllMarkedForUpload();
log.info( "FtpUploadWorker: imageList Contains " + imageList.size() + " items." );
+
+ // Upload one Image after the other.
for ( DbImage image : imageList ) {
// TODO: still some fields for ImageData, which i can't fill with info from DbImage.
ImageData imDat = new ImageData( image.guid, image.rid,
image.name, System.currentTimeMillis(), System.currentTimeMillis(), image.creator, "anyThing",
true, false, "best", "theVeryBest", image.fileSize );
-
- FtpCredentials ftpc = ThriftConnection.getFtpCredentials( imDat );
- if ( ftpc == null ) {
- log.error( "The FtpCredentials are null" );
- }
-
+ char[] passphrase = Globals.getPropertyString( PropString.FTPSKEYSTOREPWD ).toCharArray();
+ KeyStore keystore;
try {
- TrustManagerFactory trustManagerFactory = TrustManagerFactory
- .getInstance( KeyManagerFactory.getDefaultAlgorithm() );
- KeyStore keystore = KeyStore.getInstance( Globals.getPropertyString( PropString.KEYSTORETYPE ) );
- keystore.load( new FileInputStream( new File(
- Globals.getPropertyString( PropString.FTPSKEYSTOREPATH ) ) ),
- Globals.getPropertyString( PropString.FTPSKEYSTOREPWD ).toCharArray() );
- trustManagerFactory.init( keystore );
- TrustManager trustManager = trustManagerFactory.getTrustManagers()[0];
- FTPSClient ftpClient = new FTPSClient( "SSL", true );
- ftpClient.setTrustManager( trustManager );
- try {
- ftpClient.connect( Globals.getPropertyString( PropString.FTPSERVERIP ), Globals.getPropertyInt( PropInt.FTPPORT ) );
- if ( !ftpClient.login( ftpc.username, ftpc.password ) ) {
- log.error( "FTP problem. Coundn't log in!" );
- }
- File file = new File( image.path );
- FileInputStream fis = new FileInputStream( file );
- ftpClient.setFileType( FTP.BINARY_FILE_TYPE );
- ftpClient.storeFile( image.name, fis );
- ThriftConnection.finishedUpload( ftpc.username, imDat );
+
+ // All the necessary KeyStore handling for the "context"-item.
+ keystore = KeyStore.getInstance( "JKS" );
+ keystore.load( new FileInputStream( Globals.getPropertyString( PropString.FTPSKEYSTOREPATH ) ), passphrase );
+ TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm() );
+ tmf.init( keystore );
+ SSLContext context = SSLContext.getInstance( "SSLv3" );
+ TrustManager[] trustManagers = tmf.getTrustManagers();
+ context.init( null, trustManagers, null );
- } catch ( IOException e ) {
- log.error( "FtpUploadWorker: Error creating the FileInputStream" );
- } finally {
- ftpClient.disconnect();
- log.info( "FtpUploadWorker: ftpClient disconnected" );
+ // uploadInfo and ThriftAuthentication
+ UploadInfos upInfos = ThriftConnection.getUploadInfos( imDat );
+ if ( upInfos == null ) {
+ log.error( "The UploadInfos returned by ThriftConnection Class are null" );
}
- } catch ( NoSuchAlgorithmException | KeyStoreException | CertificateException | IOException e ) {
- log.debug( "FtpUploadWorker: Problem with Keystore ore FtpsClient creation." );
+
+ // creating the uploader with the "context"-item.
+ Uploader u = new Uploader( Globals.getPropertyString( PropString.FTPSERVERIP ), Globals.getPropertyInt( PropInt.FTPPORT ), context );
+ u.sendToken( upInfos.token );
+
+ // continue sending Blocks until getMissingBlocks is empty.
+ while ( !upInfos.getMissingBlocks().isEmpty() ) {
+ // Send all Blocks from upInfos.getMissingBlocks() in ranges.
+ List<Integer> blocks = upInfos.getMissingBlocks();
+ int start = 0;
+ for ( int i = 0; i < blocks.size() - 1; i++ ) {
+ if ( blocks.get( i ) != ( blocks.get( i + 1 ) - 1 ) ) {
+ u.sendRange( start, i );
+ u.sendFile( image.path );
+ start = i + 1;
+ }
+ if ( i == blocks.size() - 2 ) {
+ u.sendRange( start, blocks.size() - 1 );
+ u.sendFile( image.path );
+ }
+ }
+ }
+ upInfos = ThriftConnection.getUploadInfos( imDat );
+
+ } catch ( NoSuchAlgorithmException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch ( CertificateException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch ( FileNotFoundException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch ( IOException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch ( KeyStoreException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch ( KeyManagementException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
}
+
}
try {
Thread.sleep( 5 * 60 * 1000 );