diff options
author | Björn Hagemeister | 2014-07-07 17:25:41 +0200 |
---|---|---|
committer | Björn Hagemeister | 2014-07-07 17:25:41 +0200 |
commit | f1cbc4a2285758d26137a2331f6e8a81ba7ea97d (patch) | |
tree | 91ec504bf96a2e6f6ce272595baa59890e98b1e3 /src/main/java/org/openslx/filetransfer | |
parent | Used logger instead of system.out.println for system status. (diff) | |
download | master-sync-shared-f1cbc4a2285758d26137a2331f6e8a81ba7ea97d.tar.gz master-sync-shared-f1cbc4a2285758d26137a2331f6e8a81ba7ea97d.tar.xz master-sync-shared-f1cbc4a2285758d26137a2331f6e8a81ba7ea97d.zip |
Serveral changes, made hex code for recongnizing what to do as member.
Plus some TODOs for fixing problems which occured during testing.
Diffstat (limited to 'src/main/java/org/openslx/filetransfer')
4 files changed, 121 insertions, 127 deletions
diff --git a/src/main/java/org/openslx/filetransfer/ClassTest.java b/src/main/java/org/openslx/filetransfer/ClassTest.java index e18358a..b53c7bf 100644 --- a/src/main/java/org/openslx/filetransfer/ClassTest.java +++ b/src/main/java/org/openslx/filetransfer/ClassTest.java @@ -123,8 +123,8 @@ class Test implements IncomingEvent file.close(); int diff = 0; - for ( int i = 0; ( i + 5 ) < length; i += 5 ) { - uploader.sendRange( i, i + 5 ); + for ( int i = 0; ( i + 254 ) < length; i += 254 ) { + uploader.sendRange( i, i + 254 ); uploader.sendFile( "test.txt" ); diff = (int) ( length - i ); } diff --git a/src/main/java/org/openslx/filetransfer/Downloader.java b/src/main/java/org/openslx/filetransfer/Downloader.java index 1bbb1dc..2603a65 100644 --- a/src/main/java/org/openslx/filetransfer/Downloader.java +++ b/src/main/java/org/openslx/filetransfer/Downloader.java @@ -6,10 +6,6 @@ import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.charset.StandardCharsets; -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocket; @@ -34,25 +30,21 @@ public class Downloader * * @param ip * @param port - * @throws IOException - * @throws KeyStoreException - * @throws CertificateException - * @throws NoSuchAlgorithmException - * @throws KeyManagementException */ public Downloader( String ip, int port, SSLContext context ) { try { - // TODO: Remove old code, that's why we have git.. ;) - // create socket. - sslSocketFactory = context.getSocketFactory(); - - satelliteSocket = (SSLSocket)sslSocketFactory.createSocket( ip, port ); - - dataToServer = new DataOutputStream( satelliteSocket.getOutputStream() ); - dataToServer.writeByte( 'D' ); - dataFromServer = new DataInputStream( satelliteSocket.getInputStream() ); - } catch (Exception e) { + // TODO: Remove old code, that's why we have git.. ;) + // create socket. + sslSocketFactory = context.getSocketFactory(); + + satelliteSocket = (SSLSocket)sslSocketFactory.createSocket( ip, port ); + satelliteSocket.setSoTimeout( 2000 ); // set socket timeout. + + dataToServer = new DataOutputStream( satelliteSocket.getOutputStream() ); + dataToServer.writeByte( 'D' ); + dataFromServer = new DataInputStream( satelliteSocket.getInputStream() ); + } catch ( Exception e ) { e.printStackTrace(); } } @@ -67,10 +59,10 @@ public class Downloader public Downloader( SSLSocket socket ) { try { - satelliteSocket = socket; - dataToServer = new DataOutputStream( satelliteSocket.getOutputStream() ); - dataFromServer = new DataInputStream( satelliteSocket.getInputStream() ); - } catch (IOException e) { + satelliteSocket = socket; + dataToServer = new DataOutputStream( satelliteSocket.getOutputStream() ); + dataFromServer = new DataInputStream( satelliteSocket.getInputStream() ); + } catch ( IOException e ) { e.printStackTrace(); } } @@ -90,6 +82,7 @@ public class Downloader /** * Method for getting outputFilename. * + * @return outputFilename */ public String getOutputFilename() { @@ -105,12 +98,12 @@ public class Downloader public Boolean sendToken( String token ) { try { - TOKEN = token; - String sendToken = "TOKEN=" + TOKEN; - byte[] data = sendToken.getBytes( StandardCharsets.UTF_8 ); - dataToServer.writeByte( data.length ); - dataToServer.write( data ); - } catch (IOException e) { + TOKEN = token; + String sendToken = "TOKEN=" + TOKEN; + byte[] data = sendToken.getBytes( StandardCharsets.UTF_8 ); + dataToServer.writeByte( data.length ); + dataToServer.write( data ); + } catch ( IOException e ) { e.printStackTrace(); return false; } @@ -129,12 +122,12 @@ public class Downloader public Boolean sendRange( int a, int b ) { try { - RANGE = a + ":" + b; - String sendRange = "RANGE=" + RANGE; - byte[] data = sendRange.getBytes( StandardCharsets.UTF_8 ); - dataToServer.writeByte( data.length ); - dataToServer.write( data ); - } catch (IOException e) { + RANGE = a + ":" + b; + String sendRange = "RANGE=" + RANGE; + byte[] data = sendRange.getBytes( StandardCharsets.UTF_8 ); + dataToServer.writeByte( data.length ); + dataToServer.write( data ); + } catch ( IOException e ) { e.printStackTrace(); return false; } @@ -214,7 +207,7 @@ public class Downloader { try { while ( true ) { - byte[] incoming = new byte[ 255 ]; + byte[] incoming = new byte[ 255 ]; // TODO: problematische Größe. // First get length. dataFromServer.read( incoming, 0, 1 ); @@ -277,26 +270,26 @@ public class Downloader public Boolean readBinary() { try { - int length = getDiffOfRange(); - byte[] incoming = new byte[ 4000 ]; - - int hasRead = 0; - while ( hasRead < length ) { - int ret = dataFromServer.read( incoming, hasRead, length - hasRead ); - if ( ret == -1 ) { - System.out.println( "Error occured in Downloader.readBinary()," - + " while reading binary." ); - return false; - } - hasRead += ret; - } - - RandomAccessFile file; + int length = getDiffOfRange(); + byte[] incoming = new byte[ 4000 ]; // TODO: größe Problematisch, abchecken. + + int hasRead = 0; + while ( hasRead < length ) { + int ret = dataFromServer.read( incoming, hasRead, length - hasRead ); + if ( ret == -1 ) { + System.out.println( "Error occured in Downloader.readBinary()," + + " while reading binary." ); + return false; + } + hasRead += ret; + } + + RandomAccessFile file; file = new RandomAccessFile( new File( outputFilename ), "rw" ); file.seek( getStartOfRange() ); file.write( incoming, 0, length ); file.close(); - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); return false; } @@ -312,11 +305,11 @@ public class Downloader public Boolean sendErrorCode( String errString ) { try { - String sendError = "ERROR=" + errString; - byte[] data = sendError.getBytes( StandardCharsets.UTF_8 ); - dataToServer.writeByte( data.length ); - dataToServer.write( data ); - } catch (IOException e) { + String sendError = "ERROR=" + errString; + byte[] data = sendError.getBytes( StandardCharsets.UTF_8 ); + dataToServer.writeByte( data.length ); + dataToServer.write( data ); + } catch ( IOException e ) { e.printStackTrace(); return false; } @@ -332,7 +325,7 @@ public class Downloader { try { this.satelliteSocket.close(); - } catch (IOException e) { + } catch ( IOException e ) { e.printStackTrace(); } } diff --git a/src/main/java/org/openslx/filetransfer/Listener.java b/src/main/java/org/openslx/filetransfer/Listener.java index cd4a242..1092aa1 100644 --- a/src/main/java/org/openslx/filetransfer/Listener.java +++ b/src/main/java/org/openslx/filetransfer/Listener.java @@ -22,9 +22,9 @@ public class Listener extends Thread private int port; final private int U = 85; // hex - code 'U' = 85. final private int D = 68; // hex - code 'D' = 68. - + private static Logger log = Logger.getLogger( Listener.class ); - + static { // This is a temporary workaround for this annoying log4j error msg. // Initializing the logger before anything else is done. @@ -52,40 +52,40 @@ public class Listener extends Thread * */ private void listen() - { + { try { - SSLServerSocketFactory sslServerSocketFactory = context.getServerSocketFactory(); - SSLServerSocket welcomeSocket = - (SSLServerSocket)sslServerSocketFactory.createServerSocket( this.port ); - - while ( !isInterrupted() ) { - SSLSocket connectionSocket = (SSLSocket)welcomeSocket.accept(); - connectionSocket.setSoTimeout( 2000 ); // 2 second timeout enough? Maybe even use a small thread pool for handling accepted connections - // TODO: Handle SocketTimeoutException for all reads and writes in Downloader and Uploader - - byte[] b = new byte[ 1 ]; - int length = connectionSocket.getInputStream().read( b ); - - System.out.println( length ); - - if ( b[0] == U ) { - log.info( "recognized U --> starting Downloader" ); // TODO: Use Logger (see masterserver code for example) - // --> start Downloader(socket). - Downloader d = new Downloader( connectionSocket ); - incomingEvent.incomingDownloader( d ); - } - else if ( b[0] == D ) { - log.info( "recognized D --> starting Uploader" ); - // --> start Uploader(socket). - Uploader u = new Uploader( connectionSocket ); - incomingEvent.incomingUploader( u ); - } - else { - log.info( "Got invalid option ... close connection" ); - connectionSocket.close(); - } - } - } catch (Exception e) { + SSLServerSocketFactory sslServerSocketFactory = context.getServerSocketFactory(); + SSLServerSocket welcomeSocket = + (SSLServerSocket)sslServerSocketFactory.createServerSocket( this.port ); + + while ( !isInterrupted() ) { + SSLSocket connectionSocket = (SSLSocket)welcomeSocket.accept(); + connectionSocket.setSoTimeout( 2000 ); // 2 second timeout enough? Maybe even use a small thread pool for handling accepted connections + // TODO: Handle SocketTimeoutException for all reads and writes in Downloader and Uploader + + byte[] b = new byte[ 1 ]; + int length = connectionSocket.getInputStream().read( b ); + + System.out.println( length ); + + if ( b[0] == U ) { + log.info( "recognized U --> starting Downloader" ); // TODO: Use Logger (see masterserver code for example) + // --> start Downloader(socket). + Downloader d = new Downloader( connectionSocket ); + incomingEvent.incomingDownloader( d ); + } + else if ( b[0] == D ) { + log.info( "recognized D --> starting Uploader" ); + // --> start Uploader(socket). + Uploader u = new Uploader( connectionSocket ); + incomingEvent.incomingUploader( u ); + } + else { + log.info( "Got invalid option ... close connection" ); + connectionSocket.close(); + } + } + } catch ( Exception e ) { e.printStackTrace(); // same as writing to System.err.println(e.toString). } } diff --git a/src/main/java/org/openslx/filetransfer/Uploader.java b/src/main/java/org/openslx/filetransfer/Uploader.java index 5aaa7ef..84e48e7 100644 --- a/src/main/java/org/openslx/filetransfer/Uploader.java +++ b/src/main/java/org/openslx/filetransfer/Uploader.java @@ -44,14 +44,15 @@ public class Uploader public Uploader( String ip, int port, SSLContext context ) { try { - sslSocketFactory = context.getSocketFactory(); - - satelliteSocket = (SSLSocket)sslSocketFactory.createSocket( ip, port ); - - dataToServer = new DataOutputStream( satelliteSocket.getOutputStream() ); - dataToServer.writeByte( 'U' ); - dataFromServer = new DataInputStream( satelliteSocket.getInputStream() ); - } catch (Exception e) { + sslSocketFactory = context.getSocketFactory(); + + satelliteSocket = (SSLSocket)sslSocketFactory.createSocket( ip, port ); + satelliteSocket.setSoTimeout( 2000 ); // set socket timeout. + + dataToServer = new DataOutputStream( satelliteSocket.getOutputStream() ); + dataToServer.writeByte( 'U' ); + dataFromServer = new DataInputStream( satelliteSocket.getInputStream() ); + } catch ( Exception e ) { e.printStackTrace(); } } @@ -66,10 +67,10 @@ public class Uploader public Uploader( SSLSocket socket ) { try { - satelliteSocket = socket; - dataToServer = new DataOutputStream( satelliteSocket.getOutputStream() ); - dataFromServer = new DataInputStream( satelliteSocket.getInputStream() ); - } catch (IOException e) { + satelliteSocket = socket; + dataToServer = new DataOutputStream( satelliteSocket.getOutputStream() ); + dataFromServer = new DataInputStream( satelliteSocket.getInputStream() ); + } catch ( IOException e ) { e.printStackTrace(); } } @@ -84,12 +85,12 @@ public class Uploader public Boolean sendToken( String token ) { try { - TOKEN = token; - String sendToken = "TOKEN=" + TOKEN; - byte[] data = sendToken.getBytes( StandardCharsets.UTF_8 ); - dataToServer.writeByte( data.length ); - dataToServer.write( data ); - } catch (IOException e) { + TOKEN = token; + String sendToken = "TOKEN=" + TOKEN; + byte[] data = sendToken.getBytes( StandardCharsets.UTF_8 ); + dataToServer.writeByte( data.length ); + dataToServer.write( data ); + } catch ( IOException e ) { e.printStackTrace(); return false; } @@ -117,13 +118,13 @@ public class Uploader public Boolean sendRange( int a, int b ) { try { - RANGE = a + ":" + b; - String sendRange = "RANGE=" + RANGE; - byte[] data = sendRange.getBytes( StandardCharsets.UTF_8 ); - dataToServer.writeByte( data.length ); - dataToServer.write( data ); - dataToServer.writeByte( 0 ); - } catch (IOException e) { + RANGE = a + ":" + b; + String sendRange = "RANGE=" + RANGE; + byte[] data = sendRange.getBytes( StandardCharsets.UTF_8 ); + dataToServer.writeByte( data.length ); + dataToServer.write( data ); + dataToServer.writeByte( 0 ); + } catch ( IOException e ) { e.printStackTrace(); return false; } @@ -268,7 +269,7 @@ public class Uploader } file.seek( getStartOfRange() ); - byte[] data = new byte[ 255 ]; + byte[] data = new byte[ 255 ]; // TODO: problematische Größe. int hasRead = 0; int length = getDiffOfRange(); System.out.println( "diff of Range: " + length ); @@ -301,11 +302,11 @@ public class Uploader public Boolean sendErrorCode( String errString ) { try { - String sendError = "ERROR=" + errString; - byte[] data = sendError.getBytes( StandardCharsets.UTF_8 ); - dataToServer.writeByte( data.length ); - dataToServer.write( data ); - } catch (IOException e) { + String sendError = "ERROR=" + errString; + byte[] data = sendError.getBytes( StandardCharsets.UTF_8 ); + dataToServer.writeByte( data.length ); + dataToServer.write( data ); + } catch ( IOException e ) { e.printStackTrace(); return false; } @@ -321,7 +322,7 @@ public class Uploader { try { this.satelliteSocket.close(); - } catch (IOException e) { + } catch ( IOException e ) { e.printStackTrace(); } } |