diff options
author | Björn Hagemeister | 2014-07-10 14:09:16 +0200 |
---|---|---|
committer | Björn Hagemeister | 2014-07-10 14:09:16 +0200 |
commit | 2c0f86d04457526375062eeb4a495bd9ac864bd7 (patch) | |
tree | 7a5f5587827da73e824eb6b5bc09b8b996b1c799 /src/main/java/org/openslx/filetransfer/Uploader.java | |
parent | Serveral changes, made hex code for recongnizing what to do as member. (diff) | |
download | master-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/Uploader.java')
-rw-r--r-- | src/main/java/org/openslx/filetransfer/Uploader.java | 24 |
1 files changed, 19 insertions, 5 deletions
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(); } |