diff options
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/Uploader.java')
-rw-r--r-- | src/main/java/org/openslx/filetransfer/Uploader.java | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/src/main/java/org/openslx/filetransfer/Uploader.java b/src/main/java/org/openslx/filetransfer/Uploader.java index 87845fa..748b1e2 100644 --- a/src/main/java/org/openslx/filetransfer/Uploader.java +++ b/src/main/java/org/openslx/filetransfer/Uploader.java @@ -4,9 +4,9 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; +import java.net.Socket; import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocket; import org.apache.log4j.Logger; @@ -39,7 +39,7 @@ public class Uploader extends Transfer * * @throws IOException */ - public Uploader( SSLSocket socket ) throws IOException + public Uploader( Socket socket ) throws IOException { super( socket, log ); } @@ -52,6 +52,12 @@ public class Uploader extends Transfer */ public boolean upload( String filename ) { + return upload( filename, null ); + } + + @SuppressWarnings( "resource" ) + public boolean upload( String filename, UploadStatusCallback callback ) + { if ( shouldGetToken() ) { log.error( "You didn't call getToken yet!" ); return false; @@ -61,14 +67,14 @@ public class Uploader extends Transfer try { file = new RandomAccessFile( new File( filename ), "r" ); } catch ( FileNotFoundException e ) { - log.error( "Could not open " + filename + " for reading." ); + this.close( "Could not open given file for reading.", callback, true ); return false; } for ( ;; ) { // Loop as long as remote peer is requesting chunks from this file // Read meta data of remote peer - either new range, or it's telling us it's done MetaData meta = readMetaData(); if ( meta == null ) { - log.error( "Did not get meta data from remote peer." ); + this.close( "Did not get meta data from remote peer.", callback, true ); return false; } if ( meta.isDone() ) // Download complete? @@ -76,37 +82,35 @@ public class Uploader extends Transfer // Not complete, so there must be another range request FileRange requestedRange = meta.getRange(); if ( requestedRange == null ) { - log.error( "Remote peer did not include RANGE in meta data." ); - sendErrorCode( "no (valid) range in request" ); + this.close( "Peer did not include RANGE in meta data.", callback, true ); return false; } // Range inside file? try { if ( requestedRange.endOffset > file.length() ) { - log.error( "Requested range is larger than file size, aborting." ); - sendErrorCode( "range out of file bounds" ); + this.close( "Requested range is larger than file size, aborting.", callback, true ); return false; } } catch ( IOException e ) { - log.error( "Could not get current length of file " + filename ); + this.close( "Could not get current length of file " + filename, callback, false ); return false; } // Seek to requested chunk try { file.seek( requestedRange.startOffset ); } catch ( IOException e ) { - log.error( "Could not seek to start of requested range in " + filename + " (" + requestedRange.startOffset + ")" ); + this.close( "Could not seek to start of requested range in given file (" + requestedRange.startOffset + ")", callback, true ); return false; } // Send confirmation of range we're about to send try { long ptr = file.getFilePointer(); if ( !sendRange( ptr, ptr + requestedRange.getLength() ) || !sendEndOfMeta() ) { - log.error( "Could not send range confirmation" ); + this.close( "Could not send range confirmation" ); return false; } } catch ( IOException e ) { - log.error( "Could not determine current position in file " + filename ); + this.close( "Could not determine current position in file " + filename ); return false; } // Finally send requested chunk @@ -118,30 +122,26 @@ public class Uploader extends Transfer try { ret = file.read( data, 0, Math.min( length - hasRead, data.length ) ); } catch ( IOException e ) { - log.error( "Error reading from file " + filename ); + this.close( "Error reading from file ", callback, true ); return false; } if ( ret == -1 ) { - this.close( "Error occured in Uploader.sendFile()," - + " while reading from File to send." ); + this.close( "Error occured in Uploader.sendFile() while reading from File to send.", callback, true ); return false; } hasRead += ret; try { outStream.write( data, 0, ret ); } catch ( IOException e ) { - log.error( "Sending payload failed" ); + this.close( "Sending payload failed" ); return false; } + if ( callback != null ) + callback.uploadProgress( ret ); } } } finally { - if ( file != null ) { - try { - file.close(); - } catch ( IOException e ) { - } - } + Transfer.safeClose( file ); } return true; } |