summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/openslx/satellitedaemon/ftp/FtpUploadWorker.java
blob: 4fe2d61007935d83574a73f185aa2291b1d92a11 (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                        
                               
                                     
                           
                                            



                                               
                      
                      
 
                                


                                         
                               
                                         
                                                      
                                                        
                                           
                                                      



                                                
                                                                              



                         
                                
                                                                                                 
                                                                                  
                                                                                                          
 
                                                            
                                                           
                                                                                                                    




                                                                                                                                              

                                                                                                                                              

                                                                                                                          
                                     
 







                                                                                                                                                     
 
                                                                              

                                                                                                                

                                                                                                                           
                                                       
                                         

                                                                                                                          
                                                                                         
                                                                                                                                                
                                                                     
 
                                                                                                   























                                                                                                                                    


















                                                                          
                                 
 


                                                              
                                                                                     
                                                            
                                                                                  




                                                    
 
package org.openslx.satellitedaemon.ftp;

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 java.util.UUID;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;

import org.apache.log4j.Logger;
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.PropString;
import org.openslx.satellitedaemon.db.DbImage;

public class FtpUploadWorker implements Runnable
{
	private static Logger log = Logger.getLogger( FtpUploadWorker.class );

	@Override
	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 );
				
				ImageData imDat = new ImageData( UUID.randomUUID().toString(), image.rid,
						image.name, System.currentTimeMillis(), System.currentTimeMillis(), image.creator, "anyThing",
						true, false, "best", "theVeryBest", image.fileSize );
				char[] passphrase = Globals.getPropertyString( PropString.FTPSKEYSTOREPWD ).toCharArray();
				KeyStore keystore;
				try {

					// 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 );

					// uploadInfo and ThriftAuthentication
					String crcPath = image.path.concat( ".crc" );
					UploadInfos upInfos = ThriftConnection.getUploadInfos( imDat, crcPath );
					if ( upInfos == null ) {
						log.error( "The UploadInfos returned by ThriftConnection Class are null" );
						return;
					}
					log.info( "Got upInfos. Trying to create Uploader with token: " + upInfos.token );

					// creating the uploader with the "context"-item.
					Uploader u = new Uploader( Globals.getPropertyString( PropString.FTPSERVERIP ), upInfos.port, 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 ) ) {
//								log.info( "Sending Blocks numbered from " + start + " up to " + i );
//								u.sendRange( start *16*1024*1024, i*16*1024*1024 );
//								u.sendFile( image.path );
//								log.info( "... DONE!" );
//								start = i + 1;
//							}
//							if ( i == blocks.size() - 2 ) {
//								log.info( "Sending Blocks numbered from " + start + " up to " + i );
//								u.sendRange( start*16*1024*1024, (blocks.size() - 1)*16*1024*1024 );
//								u.sendFile( image.path );
//							}
//						}
//					}
//					upInfos = ThriftConnection.getUploadInfos( imDat );
					log.info("Using file:" + image.path );
					u.sendRange( 254, 254 + 255 );
					u.sendFile( image.path );
					

				} 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 );
				//				Thread.sleep( 1000 );
			} catch ( InterruptedException e ) {
				log.error( "FtpUploadWorker: Sleep interrupted" );
				e.printStackTrace();
			}
		}

	}
}