summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/filetransfer/Uploader.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/Uploader.java')
-rw-r--r--src/main/java/org/openslx/filetransfer/Uploader.java44
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;
}