summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/filetransfer
diff options
context:
space:
mode:
authorBjörn Hagemeister2014-07-07 17:25:41 +0200
committerBjörn Hagemeister2014-07-07 17:25:41 +0200
commitf1cbc4a2285758d26137a2331f6e8a81ba7ea97d (patch)
tree91ec504bf96a2e6f6ce272595baa59890e98b1e3 /src/main/java/org/openslx/filetransfer
parentUsed logger instead of system.out.println for system status. (diff)
downloadmaster-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')
-rw-r--r--src/main/java/org/openslx/filetransfer/ClassTest.java4
-rw-r--r--src/main/java/org/openslx/filetransfer/Downloader.java109
-rw-r--r--src/main/java/org/openslx/filetransfer/Listener.java70
-rw-r--r--src/main/java/org/openslx/filetransfer/Uploader.java65
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();
}
}