summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/filetransfer
diff options
context:
space:
mode:
authorBjörn Hagemeister2014-07-10 14:09:16 +0200
committerBjörn Hagemeister2014-07-10 14:09:16 +0200
commit2c0f86d04457526375062eeb4a495bd9ac864bd7 (patch)
tree7a5f5587827da73e824eb6b5bc09b8b996b1c799 /src/main/java/org/openslx/filetransfer
parentServeral changes, made hex code for recongnizing what to do as member. (diff)
downloadmaster-sync-shared-2c0f86d04457526375062eeb4a495bd9ac864bd7.tar.gz
master-sync-shared-2c0f86d04457526375062eeb4a495bd9ac864bd7.tar.xz
master-sync-shared-2c0f86d04457526375062eeb4a495bd9ac864bd7.zip
Fixed handling with constant byte[] - length while reading and writing from/to socket.
Plus startet implementing correct Exception handling.
Diffstat (limited to 'src/main/java/org/openslx/filetransfer')
-rw-r--r--src/main/java/org/openslx/filetransfer/ClassTest.java10
-rw-r--r--src/main/java/org/openslx/filetransfer/Downloader.java41
-rw-r--r--src/main/java/org/openslx/filetransfer/Listener.java9
-rw-r--r--src/main/java/org/openslx/filetransfer/Uploader.java24
4 files changed, 63 insertions, 21 deletions
diff --git a/src/main/java/org/openslx/filetransfer/ClassTest.java b/src/main/java/org/openslx/filetransfer/ClassTest.java
index b53c7bf..14fa519 100644
--- a/src/main/java/org/openslx/filetransfer/ClassTest.java
+++ b/src/main/java/org/openslx/filetransfer/ClassTest.java
@@ -31,8 +31,18 @@ import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
+import org.apache.log4j.BasicConfigurator;
+import org.slf4j.LoggerFactory;
+
public class ClassTest
{
+ static {
+ // This is a temporary workaround for this annoying log4j error msg.
+ // Initializing the logger before anything else is done.
+ BasicConfigurator.configure();
+ LoggerFactory.getLogger( "ROOT" );
+ }
+
public static void main( String[] args ) throws Exception
{
String pathToKeyStore =
diff --git a/src/main/java/org/openslx/filetransfer/Downloader.java b/src/main/java/org/openslx/filetransfer/Downloader.java
index 2603a65..4c132e6 100644
--- a/src/main/java/org/openslx/filetransfer/Downloader.java
+++ b/src/main/java/org/openslx/filetransfer/Downloader.java
@@ -5,12 +5,15 @@ import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
+import java.net.SocketTimeoutException;
import java.nio.charset.StandardCharsets;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
+import org.apache.log4j.Logger;
+
public class Downloader
{
// Some instance variables.
@@ -22,6 +25,8 @@ public class Downloader
private String RANGE = null;
private String outputFilename = null;
private String ERROR = null;
+
+ private static Logger log = Logger.getLogger( Downloader.class );
/***********************************************************************/
/**
@@ -212,7 +217,7 @@ public class Downloader
// First get length.
dataFromServer.read( incoming, 0, 1 );
int length = incoming[0];
- System.out.println( "length: " + length );
+ System.out.println( "length (downloader): " + length );
if ( length == 0 )
break;
@@ -255,6 +260,11 @@ public class Downloader
return false;
}
}
+ } catch (SocketTimeoutException ste) {
+ ste.printStackTrace();
+ sendErrorCode("timeout");
+ log.info( "Socket Timeout occured in Downloader." );
+ this.close();
} catch ( Exception e ) {
e.printStackTrace();
return false;
@@ -269,29 +279,41 @@ public class Downloader
*/
public Boolean readBinary()
{
+ RandomAccessFile file = null;
try {
int length = getDiffOfRange();
byte[] incoming = new byte[ 4000 ]; // TODO: größe Problematisch, abchecken.
int hasRead = 0;
+ file = new RandomAccessFile( new File( outputFilename ), "rw" );
+ file.seek( getStartOfRange() );
while ( hasRead < length ) {
- int ret = dataFromServer.read( incoming, hasRead, length - hasRead );
+ int ret = dataFromServer.read( incoming, 0, Math.min( length - hasRead, incoming.length ) );
if ( ret == -1 ) {
System.out.println( "Error occured in Downloader.readBinary(),"
+ " while reading binary." );
return false;
}
hasRead += ret;
- }
+ file.write( incoming, 0, ret );
- RandomAccessFile file;
- file = new RandomAccessFile( new File( outputFilename ), "rw" );
- file.seek( getStartOfRange() );
- file.write( incoming, 0, length );
- file.close();
+ }
+ } catch ( SocketTimeoutException ste ) {
+ ste.printStackTrace();
+ sendErrorCode( "timeout" );
+ log.info( "Socket timeout occured in Downloader." );
+ this.close();
} catch ( Exception e ) {
e.printStackTrace();
return false;
+ } finally {
+ if (file != null) {
+ try {
+ file.close();
+ } catch ( IOException e ) {
+ e.printStackTrace();
+ }
+ }
}
return true;
}
@@ -311,6 +333,7 @@ public class Downloader
dataToServer.write( data );
} catch ( IOException e ) {
e.printStackTrace();
+ this.close();
return false;
}
return true;
@@ -325,6 +348,8 @@ public class Downloader
{
try {
this.satelliteSocket.close();
+ if (dataFromServer != null) dataFromServer.close();
+ if (dataToServer != null) dataToServer.close();
} 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 1092aa1..f00f4bc 100644
--- a/src/main/java/org/openslx/filetransfer/Listener.java
+++ b/src/main/java/org/openslx/filetransfer/Listener.java
@@ -25,13 +25,6 @@ public class Listener extends Thread
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.
- BasicConfigurator.configure();
- LoggerFactory.getLogger( "ROOT" );
- }
-
/***********************************************************************/
/**
* Constructor for class Listener, which gets an instance of IncomingEvent.
@@ -66,7 +59,7 @@ public class Listener extends Thread
byte[] b = new byte[ 1 ];
int length = connectionSocket.getInputStream().read( b );
- System.out.println( length );
+ System.out.println( "Length (Listener): " + length );
if ( b[0] == U ) {
log.info( "recognized U --> starting Downloader" ); // TODO: Use Logger (see masterserver code for example)
diff --git a/src/main/java/org/openslx/filetransfer/Uploader.java b/src/main/java/org/openslx/filetransfer/Uploader.java
index 84e48e7..26f8879 100644
--- a/src/main/java/org/openslx/filetransfer/Uploader.java
+++ b/src/main/java/org/openslx/filetransfer/Uploader.java
@@ -5,6 +5,7 @@ import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
+import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
@@ -16,6 +17,8 @@ import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
+import org.apache.log4j.Logger;
+
public class Uploader
{
// Some member variables.
@@ -27,6 +30,8 @@ public class Uploader
private String RANGE = null;
private String ERROR = null;
+ private static Logger log = Logger.getLogger( Uploader.class );
+
/***********************************************************************/
/**
* Constructor for satellite uploader.
@@ -92,6 +97,7 @@ public class Uploader
dataToServer.write( data );
} catch ( IOException e ) {
e.printStackTrace();
+
return false;
}
return true;
@@ -202,7 +208,7 @@ public class Uploader
// First get length.
dataFromServer.read( incoming, 0, 1 );
- int length = incoming[0];
+ int length = incoming[0] & 0xFF;
// System.out.println("length: " + length);
if ( length == 0 ) // Stop if 0 was read.
@@ -245,7 +251,12 @@ public class Uploader
return false;
}
}
- } catch ( IOException e ) {
+ } catch (SocketTimeoutException ste) {
+ ste.printStackTrace();
+ sendErrorCode("timeout");
+ log.info( "Socket Timeout occured in Downloader." );
+ this.close();
+ } catch ( Exception e ) {
e.printStackTrace();
return false;
}
@@ -274,7 +285,7 @@ public class Uploader
int length = getDiffOfRange();
System.out.println( "diff of Range: " + length );
while ( hasRead < length ) {
- int ret = file.read( data, hasRead, length - hasRead );
+ int ret = file.read( data, 0, Math.min( length - hasRead, data.length ) );
if ( ret == -1 ) {
System.out.println( "Error occured in Uploader.sendFile(),"
+ " while reading from File to send." );
@@ -282,10 +293,10 @@ public class Uploader
return false;
}
hasRead += ret;
+ dataToServer.write( data, 0, ret );
}
file.close();
- dataToServer.write( data, 0, length );
} catch ( Exception e ) {
e.printStackTrace();
return false;
@@ -308,6 +319,7 @@ public class Uploader
dataToServer.write( data );
} catch ( IOException e ) {
e.printStackTrace();
+ this.close();
return false;
}
return true;
@@ -315,13 +327,15 @@ public class Uploader
/***********************************************************************/
/**
- * Method for closing connection, if download has finished.
+ * Method for closing connection, if upload has finished.
*
*/
public void close()
{
try {
this.satelliteSocket.close();
+ if (dataFromServer != null) dataFromServer.close();
+ if (dataToServer != null) dataToServer.close();
} catch ( IOException e ) {
e.printStackTrace();
}