summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java131
1 files changed, 85 insertions, 46 deletions
diff --git a/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java b/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java
index 2faa9b9..0fb52f5 100644
--- a/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java
+++ b/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java
@@ -20,9 +20,11 @@ import javax.net.ssl.SSLContext;
import org.apache.log4j.Logger;
import org.openslx.filetransfer.Downloader;
+import org.openslx.filetransfer.FileRange;
import org.openslx.filetransfer.IncomingEvent;
import org.openslx.filetransfer.Listener;
import org.openslx.filetransfer.Uploader;
+import org.openslx.filetransfer.WantRangeCallback;
import org.openslx.imagemaster.Globals;
/**
@@ -116,12 +118,15 @@ public class ConnectionHandler implements IncomingEvent
@Override
public void incomingUploader( Uploader uploader ) throws IOException
{
- // try to read meta data
- if ( !uploader.readMetaData() )
- return;
String token = uploader.getToken();
log.debug( "Got token :'" + token + "'" );
// check token to identify the client
+ if (token == null)
+ {
+ uploader.sendErrorCode( "No token available." );
+ uploader.close(null);
+ return;
+ }
if ( !connections.containsKey( token ) ) {
uploader.sendErrorCode( "Token not accepted." );
uploader.close(null);
@@ -135,17 +140,8 @@ public class ConnectionHandler implements IncomingEvent
return;
}
- List<Integer> blocks = connections.get( token ).client.getLastRequestedBlocks( token );
String fileName = connections.get( token ).filepath;
- long fileSize = new File( fileName ).length();
- long actual;
- for ( Integer block : blocks ) {
- actual = block * Globals.blockSize;
- uploader.prepareSendRange( actual, ( ( fileSize - actual ) < Globals.blockSize ) ? fileSize : ( block + 1 ) * Globals.blockSize );
- uploader.sendFile( fileName );
- }
- uploader.close(null);
-
+ uploader.upload(fileName);
}
/**
@@ -155,40 +151,83 @@ public class ConnectionHandler implements IncomingEvent
public void incomingDownloader( Downloader downloader ) throws IOException
{
log.debug( "Client wants to upload" );
- long startOfRange = 0;
- String token = "";
- // try to read meta data
- while ( downloader.readMetaData() ) {
- // check token to identify the client
- token = downloader.getToken();
- if ( !connections.containsKey( token ) ) {
- downloader.sendErrorCode( "Token not accepted." );
- downloader.close(null);
- return;
- }
-
- startOfRange = downloader.getStartOfRange();
-
- if ( downloader.getDiffOfRange() <= 0 ) {
- return;
- }
-
- // check if he was a uploading client
- if ( connections.get( token ).type == Connection.DOWNLOADING ) {
- downloader.sendErrorCode( "You can not upload, if you are downloading." );
- downloader.close(null);
- return;
- }
-
- int blockNumber = (int) ( startOfRange / Globals.blockSize );
- UploadingImage image = connections.get( token ).image;
- image.setNeedsCheck( blockNumber );
- image.increaseTransmittedTimes( blockNumber );
- log.debug( "Block " + blockNumber + " was transmitted " + image.getTimesTransmitted( blockNumber ) + " time(s)." );
-
- downloader.setOutputFilename( connections.get( token ).filepath );
- downloader.receiveBinary();
+ String token = downloader.getToken();
+ if (token == null)
+ {
+ downloader.sendErrorCode( "No token available." );
+ downloader.close(null);
+ return;
+ }
+ // Check token to identify the client.
+ if ( !connections.containsKey( token ) ) {
+ downloader.sendErrorCode( "Token not accepted." );
+ downloader.close(null);
+ return;
}
+
+ // check if he was a uploading client
+ if ( connections.get( token ).type == Connection.DOWNLOADING ) {
+ downloader.sendErrorCode( "You can not upload, if you are downloading." );
+ downloader.close(null);
+ return;
+ }
+
+ String destinationFileName = connections.get( token ).filepath;
+ final UploadingImage image = connections.get( token ).image;
+ downloader.download( destinationFileName, new WantRangeCallback() {
+
+ @Override
+ public FileRange get() {
+ // get start of range.
+ int blockNumber = image.getNextMissingBlock();
+ if (blockNumber == -1)
+ return null;
+
+ image.setNeedsCheck( blockNumber );
+ image.increaseTransmittedTimes( blockNumber );
+ log.debug( "Block " + blockNumber + " was transmitted " + image.getTimesTransmitted( blockNumber ) + " time(s)." );
+
+ long startOfRange = image.getNextMissingBlock() * Globals.blockSize;
+ long endOfRange = Math.min(startOfRange + Globals.blockSize, image.getImageFile().length());
+ FileRange range = new FileRange(startOfRange, endOfRange);
+ return range;
+ }
+ });
+// long startOfRange = 0;
+// String token = "";
+// // try to read meta data
+// while ( downloader.readMetaData() ) {
+// // check token to identify the client
+// token = downloader.getToken();
+// if ( !connections.containsKey( token ) ) {
+// downloader.sendErrorCode( "Token not accepted." );
+// downloader.close(null);
+// return;
+// }
+//
+// startOfRange = downloader.getStartOfRange();
+//
+// if ( downloader.getDiffOfRange() <= 0 ) {
+// return;
+// }
+//
+// // check if he was a uploading client
+// if ( connections.get( token ).type == Connection.DOWNLOADING ) {
+// downloader.sendErrorCode( "You can not upload, if you are downloading." );
+// downloader.close(null);
+// return;
+// }
+//
+//
+// int blockNumber = (int) ( startOfRange / Globals.blockSize );
+// UploadingImage image = connections.get( token ).image;
+// image.setNeedsCheck( blockNumber );
+// image.increaseTransmittedTimes( blockNumber );
+// log.debug( "Block " + blockNumber + " was transmitted " + image.getTimesTransmitted( blockNumber ) + " time(s)." );
+//
+// downloader.setOutputFilename( connections.get( token ).filepath );
+// downloader.receiveBinary();
+// }
downloader.close(null);
}
}