summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/openslx/filetransfer/ClassTest.java
blob: 6d9f4e930a42cf7840df6362b9907a6545e235a0 (plain) (tree)










































































































































                                                                                                                                   
/**
 * File transfer between master server and satellite server.
 * The connection should always be from satellite to master, because of
 * open port knowledge on master server.
 * 
 * For uploading file to master, satellite should send a request with
 * token "U" for want upload. --> start Uploader(IP, PORT).
 * 
 * For downloading a file from master, satellite should send a request
 * with token "D" for want download. --> start Downloader(IP, PORT).
 * 
 * Means the master server has to start the opposite part:
 * If master receives token "U" --> start Downloader(socket)
 * If master receives token "D" --> start Uploader(socket)
 */

//TODO Björn Hagemeister. SSLConfiguration!

package org.openslx.filetransfer;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.security.KeyStore;

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

public class ClassTest {
	public static void main(String[] args) throws Exception {

		new Thread(new Runnable() {
			
			@Override
			public void run() {
				try {
					String pathToKeyStore =
							"/home/bjoern/javadev/DataTransfer/mySrvKeyStore.jks";
				    char[] passphrase = "test123".toCharArray();
				    KeyStore keystore = KeyStore.getInstance("JKS");
				    keystore.load(new FileInputStream(pathToKeyStore), passphrase);
				    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
				    kmf.init(keystore, passphrase);
				    SSLContext context = SSLContext.getInstance("SSLv3");
				    KeyManager[] keyManagers = kmf.getKeyManagers();

				    context.init(keyManagers, null, null);

					new Listener(new Test(), context).listen();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}	
			}
		}).start();
		
		Thread.sleep(5000);
		
		String pathToTrustStore =
				"/home/bjoern/javadev/DataTransfer/mySrvKeyStore.jks";

	    char[] passphrase = "test123".toCharArray();
	    KeyStore keystore = KeyStore.getInstance("JKS");
	    keystore.load(new FileInputStream(pathToTrustStore), passphrase);

	    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
	    tmf.init(keystore);

	    SSLContext context = SSLContext.getInstance("SSLv3");
	    TrustManager[] trustManagers = tmf.getTrustManagers();

	    context.init(null, trustManagers, null);

		
		Downloader d = new Downloader("localhost", 6789, "output.txt", context);
		d.sendToken("xyz");
		while (d.readMetaData())
			d.readBinary();
		
		/*
		String pathToKeyStore =
				"/home/bjoern/javadev/DataTransfer/mySrvKeyStore.jks";
	    char[] passphrase = "test123".toCharArray();
	    KeyStore keystore = KeyStore.getInstance("JKS");
	    keystore.load(new FileInputStream(pathToKeyStore), passphrase);
	    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
	    kmf.init(keystore, passphrase);
	    SSLContext context = SSLContext.getInstance("SSLv3");
	    KeyManager[] keyManagers = kmf.getKeyManagers();

	    context.init(keyManagers, null, null);

		Uploader u = new Uploader("localhost", 6789, context);
		u.sendToken("xyz");
		
		RandomAccessFile file = new RandomAccessFile(new File("test.txt"), "rw");
		long length = file.length();
		file.close();
		
		int diff = 0;
		for (int i = 0; (i + 5) < length; i += 5) {
			u.sendRange(i, i + 5);
			u.sendFile("test.txt");
			diff = (int) (length - i);
		}
		
		u.sendRange((int)(length - diff), (int)length);
		u.sendFile("test.txt");
		*/
	}
}

// Implementing IncomingEvent for testing case.
class Test implements IncomingEvent {
	public void incomingUploader(Uploader uploader) throws IOException {
		RandomAccessFile file = new RandomAccessFile(new File("test.txt"), "rw");
		long length = file.length();
		file.close();
		
		int diff = 0;
		for (int i = 0; (i + 5) < length; i += 5) {
			uploader.sendRange(i, i + 5);
			uploader.sendFile("test.txt");
			diff = (int) (length - i);
		}
		
		uploader.sendRange((int)(length - diff), (int)length);
		uploader.sendFile("test.txt");
	}
	
	public void incomingDownloader(Downloader downloader) throws IOException {
		while (downloader.readMetaData())
			downloader.readBinary();
	}
}