diff options
author | Björn Hagemeister | 2014-07-02 16:22:54 +0200 |
---|---|---|
committer | Björn Hagemeister | 2014-07-02 16:22:54 +0200 |
commit | 2af7714e8672797677628bea1ece6f62bbe75c89 (patch) | |
tree | fbaf28cdebd1b9dd5aa01714a0005f6f4422ecf3 /src/main/java/org/openslx/filetransfer | |
parent | Add getter for port in Listener (diff) | |
download | master-sync-shared-2af7714e8672797677628bea1ece6f62bbe75c89.tar.gz master-sync-shared-2af7714e8672797677628bea1ece6f62bbe75c89.tar.xz master-sync-shared-2af7714e8672797677628bea1ece6f62bbe75c89.zip |
new method for sending error string, usefull for wrong token.
Diffstat (limited to 'src/main/java/org/openslx/filetransfer')
-rw-r--r-- | src/main/java/org/openslx/filetransfer/ClassTest.java | 42 | ||||
-rw-r--r-- | src/main/java/org/openslx/filetransfer/Downloader.java | 50 | ||||
-rw-r--r-- | src/main/java/org/openslx/filetransfer/Uploader.java | 84 |
3 files changed, 104 insertions, 72 deletions
diff --git a/src/main/java/org/openslx/filetransfer/ClassTest.java b/src/main/java/org/openslx/filetransfer/ClassTest.java index 9cd4676..768316b 100644 --- a/src/main/java/org/openslx/filetransfer/ClassTest.java +++ b/src/main/java/org/openslx/filetransfer/ClassTest.java @@ -33,51 +33,41 @@ import javax.net.ssl.TrustManagerFactory; public class ClassTest { public static void main(String[] args) throws Exception { + 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(); - 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); + context.init(keyManagers, null, null); - new Listener(new Test(), context, 6789).listen(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - }).start(); + Listener listener = new Listener(new Test(), context, 6789); + listener.start(); Thread.sleep(5000); String pathToTrustStore = "/home/bjoern/javadev/DataTransfer/mySrvKeyStore.jks"; - char[] passphrase = "test123".toCharArray(); - KeyStore keystore = KeyStore.getInstance("JKS"); + passphrase = "test123".toCharArray(); + keystore = KeyStore.getInstance("JKS"); keystore.load(new FileInputStream(pathToTrustStore), passphrase); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(keystore); - SSLContext context = SSLContext.getInstance("SSLv3"); + context = SSLContext.getInstance("SSLv3"); TrustManager[] trustManagers = tmf.getTrustManagers(); context.init(null, trustManagers, null); Downloader d = new Downloader("localhost", 6789, context); + d.setOutputFilename("output.txt"); d.sendToken("xyz"); while (d.readMetaData()) d.readBinary(); diff --git a/src/main/java/org/openslx/filetransfer/Downloader.java b/src/main/java/org/openslx/filetransfer/Downloader.java index 176b874..58e32f9 100644 --- a/src/main/java/org/openslx/filetransfer/Downloader.java +++ b/src/main/java/org/openslx/filetransfer/Downloader.java @@ -3,12 +3,10 @@ package org.openslx.filetransfer; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.charset.StandardCharsets; import java.security.KeyManagementException; -import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; @@ -16,8 +14,6 @@ import java.security.cert.CertificateException; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManager; -import javax.net.ssl.TrustManagerFactory; public class Downloader { // Some instance variables. @@ -28,6 +24,7 @@ public class Downloader { private String TOKEN = null; private String RANGE = null; private String outputFilename = null; + private String ERROR = null; /***********************************************************************//** * Constructor for satellite downloader. @@ -228,10 +225,17 @@ public class Downloader { RANGE = splitted[1]; System.out.println("RANGE: '" + RANGE + "'"); } + else if (splitted[0].equals("ERROR")) { + if (splitted[1] != null) + ERROR = splitted[1]; + System.err.println("ERROR: " + ERROR); + this.close(); + return false; + } } - } catch (IOException e) { - throw e; - // return false; + } catch (Exception e) { + e.printStackTrace(); + return false; } return true; } @@ -255,17 +259,37 @@ public class Downloader { hasRead += ret; } - RandomAccessFile file = new RandomAccessFile(new File(outputFilename), "rw"); - file.seek(getStartOfRange()); - file.write(incoming, 0, length); - file.close(); + RandomAccessFile file; + try { + file = new RandomAccessFile(new File(outputFilename), "rw"); + file.seek(getStartOfRange()); + file.write(incoming, 0, length); + file.close(); + + } catch (Exception e) { + e.printStackTrace(); + return false; + } return true; } /***********************************************************************//** + * Method for sending error Code to server. For example in case of wrong + * token, send code for wrong token. + * @throws IOException + */ + public void sendErrorCode(String errString) throws IOException { + String sendError = "ERROR=" + errString; + byte[] data = sendError.getBytes(StandardCharsets.UTF_8); + dataToServer.writeByte(data.length); + dataToServer.write(data); + } + + /***********************************************************************//** * Method for closing connection, if download has finished. + * @throws IOException */ - public void close() { - + public void close() throws IOException { + this.satelliteSocket.close(); } } diff --git a/src/main/java/org/openslx/filetransfer/Uploader.java b/src/main/java/org/openslx/filetransfer/Uploader.java index 6fbb656..befa9bf 100644 --- a/src/main/java/org/openslx/filetransfer/Uploader.java +++ b/src/main/java/org/openslx/filetransfer/Uploader.java @@ -3,14 +3,11 @@ package org.openslx.filetransfer; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.security.KeyManagementException; -import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; @@ -18,8 +15,6 @@ import java.security.cert.CertificateException; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManager; -import javax.net.ssl.TrustManagerFactory; public class Uploader { // Some member variables. @@ -29,6 +24,7 @@ public class Uploader { private DataInputStream dataFromServer; private String TOKEN = null; private String RANGE = null; + private String ERROR = null; /***********************************************************************//** * Constructor for satellite uploader. @@ -196,6 +192,13 @@ public class Uploader { RANGE = splitted[1]; System.out.println("RANGE: " + RANGE); } + else if (splitted[0].equals("ERROR")) { + if (splitted[1] != null) + ERROR = splitted[1]; + System.err.println("ERROR: " + ERROR); + this.close(); + return false; + } } } catch (IOException e) { e.printStackTrace(); @@ -209,42 +212,57 @@ public class Uploader { * @param filename * @throws IOException */ - public Boolean sendFile(String filename) throws IOException { - RandomAccessFile file; + public Boolean sendFile(String filename) { try { - file = new RandomAccessFile(new File(filename), "r"); - } catch (FileNotFoundException e) { - e.printStackTrace(); - return false; - } - - if (getStartOfRange() == -1) { - file.close(); - return false; - } - file.seek(getStartOfRange()); - - byte[] data = new byte[255]; - int hasRead = 0; - int length = getDiffOfRange(); - System.out.println("diff of Range: " + length); - while (hasRead < length) { - int ret = file.read(data, hasRead, length - hasRead); - if (ret == -1) { - System.out.println("Error occured in Uploader.sendFile()," - + " while reading from File to send."); + RandomAccessFile file = new RandomAccessFile(new File(filename), "r"); + + if (getStartOfRange() == -1) { file.close(); return false; } - hasRead += ret; - } - file.close(); - try { + file.seek(getStartOfRange()); + + byte[] data = new byte[255]; + int hasRead = 0; + int length = getDiffOfRange(); + System.out.println("diff of Range: " + length); + while (hasRead < length) { + int ret = file.read(data, hasRead, length - hasRead); + if (ret == -1) { + System.out.println("Error occured in Uploader.sendFile()," + + " while reading from File to send."); + file.close(); + return false; + } + hasRead += ret; + } + file.close(); + dataToServer.write(data, 0, length); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); return false; } return true; } + + /***********************************************************************//** + * Method for sending error Code to server. For example in case of wrong + * token, send code for wrong token. + * @throws IOException + */ + public void sendErrorCode(String errString) throws IOException { + String sendError = "ERROR=" + errString; + byte[] data = sendError.getBytes(StandardCharsets.UTF_8); + dataToServer.writeByte(data.length); + dataToServer.write(data); + } + + /***********************************************************************//** + * Method for closing connection, if download has finished. + * @throws IOException + */ + public void close() throws IOException { + this.satelliteSocket.close(); + } } |