From d7f348cd8780b37f01b9c3d76031cafdeebce998 Mon Sep 17 00:00:00 2001 From: Björn Hagemeister Date: Mon, 22 Sep 2014 18:09:05 +0200 Subject: Adapted classes to new filetransfer. --- .../serverconnection/ConnectionHandler.java | 131 +++++++++++++-------- 1 file changed, 85 insertions(+), 46 deletions(-) (limited to 'src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java') 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 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); } } -- cgit v1.2.3-55-g7522