summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNils Schwabe2014-07-10 17:00:52 +0200
committerNils Schwabe2014-07-10 17:00:52 +0200
commit43bbdb3808f8c78f76e17a7ecc0dea9c9cad6541 (patch)
treec70d72697df5e952b2951c545deb9d6dfaec9bdb /src
parentAdd refreshing of server session (diff)
downloadmasterserver-43bbdb3808f8c78f76e17a7ecc0dea9c9cad6541.tar.gz
masterserver-43bbdb3808f8c78f76e17a7ecc0dea9c9cad6541.tar.xz
masterserver-43bbdb3808f8c78f76e17a7ecc0dea9c9cad6541.zip
Start to implement download functionallity
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/openslx/imagemaster/serverconnection/Connection.java1
-rw-r--r--src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java44
-rw-r--r--src/main/java/org/openslx/imagemaster/serverconnection/DownloadingClient.java13
-rw-r--r--src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java19
-rw-r--r--src/main/java/org/openslx/imagemaster/serverconnection/UploadingImage.java1
5 files changed, 43 insertions, 35 deletions
diff --git a/src/main/java/org/openslx/imagemaster/serverconnection/Connection.java b/src/main/java/org/openslx/imagemaster/serverconnection/Connection.java
index c6606ac..28a9838 100644
--- a/src/main/java/org/openslx/imagemaster/serverconnection/Connection.java
+++ b/src/main/java/org/openslx/imagemaster/serverconnection/Connection.java
@@ -13,6 +13,7 @@ public class Connection
*/
protected final boolean type;
public UploadingImage image = null;
+ public DownloadingClient client = null;
public final static boolean UPLOADING = true;
public final static boolean DOWNLOADING = false;
diff --git a/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java b/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java
index 439087a..7a3bf12 100644
--- a/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java
+++ b/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java
@@ -10,6 +10,7 @@ import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -115,28 +116,31 @@ public class ConnectionHandler implements IncomingEvent
public void incomingUploader( Uploader uploader ) throws IOException
{
// try to read meta data
- while ( uploader.readMetaData() ) {
- String token = uploader.getToken();
- log.debug( "Got token :'" + token + "'" );
- // check token to identify the client
- if ( !connections.containsKey( token ) ) {
- uploader.sendErrorCode( "Token not accepted." );
- uploader.close();
- return;
- }
-
- // check if he was a downloading client
- if ( connections.get( token ).type == Connection.UPLOADING ) {
- uploader.sendErrorCode( "You can not download, if you are uploading." );
- uploader.close();
- return;
- }
- // TODO: check which range needs to be sent and send this range
- long length = ( new File( connections.get( token ).filepath ) ).length();
+ if ( !uploader.readMetaData() ) return;
+ String token = uploader.getToken();
+ log.debug( "Got token :'" + token + "'" );
+ // check token to identify the client
+ if ( !connections.containsKey( token ) ) {
+ uploader.sendErrorCode( "Token not accepted." );
+ uploader.close();
+ return;
+ }
- uploader.sendRange( 0, (int)length );
- uploader.sendFile( connections.get( token ).filepath );
+ // check if he was a downloading client
+ if ( connections.get( token ).type == Connection.UPLOADING ) {
+ uploader.sendErrorCode( "You can not download, if you are uploading." );
+ uploader.close();
+ return;
}
+
+ List<Integer> list = connections.get( token ).client.getLastRequestedBlocks( token );
+ // TODO: check which range needs to be sent and send this range
+ // logik von michael
+
+ long length = ( new File( connections.get( token ).filepath ) ).length();
+
+ uploader.sendRange( 0, (int)length );
+ uploader.sendFile( connections.get( token ).filepath );
uploader.close();
}
diff --git a/src/main/java/org/openslx/imagemaster/serverconnection/DownloadingClient.java b/src/main/java/org/openslx/imagemaster/serverconnection/DownloadingClient.java
index 0acfa42..5754a6b 100644
--- a/src/main/java/org/openslx/imagemaster/serverconnection/DownloadingClient.java
+++ b/src/main/java/org/openslx/imagemaster/serverconnection/DownloadingClient.java
@@ -2,6 +2,7 @@ package org.openslx.imagemaster.serverconnection;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* Helper class for the ImageProcessor to know some things about the downloading client
@@ -10,7 +11,7 @@ import java.util.List;
public class DownloadingClient
{
- public final HashMap<String, ImageInfos> downloadingImages = new HashMap<>();
+ private final HashMap<String, ImageInfos> downloadingImages = new HashMap<>();
DownloadingClient()
{
@@ -36,11 +37,12 @@ public class DownloadingClient
return (downloadingImages.size() > 0);
}
- public List<Integer> getLastRequestedBlocks( String uuid )
+ public List<Integer> getLastRequestedBlocks( String token )
{
- if ( !downloadingImages.containsKey( uuid ) )
- return null;
- return downloadingImages.get( uuid ).lastRequestedBlocks;
+ for (Map.Entry<String, ImageInfos> entry : downloadingImages.entrySet() ) {
+ if (entry.getValue().token.equals( token )) return entry.getValue().lastRequestedBlocks;
+ }
+ return null;
}
public void requestBlocks( String uuid, List<Integer> list )
@@ -59,7 +61,6 @@ public class DownloadingClient
class ImageInfos
{
-
public final String uuid;
public final String token;
private List<Integer> lastRequestedBlocks;
diff --git a/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java b/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java
index 8306280..10580a7 100644
--- a/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java
+++ b/src/main/java/org/openslx/imagemaster/serverconnection/ImageProcessor.java
@@ -64,8 +64,6 @@ public class ImageProcessor
// check image data
// TODO: do security checks
- log.debug( "Trying to answer request:" + serverSessionId + ", " + imageData + ", " + crcSums );
-
String uuid = imageData.uuid;
String token;
String filepath;
@@ -77,7 +75,7 @@ public class ImageProcessor
synchronized ( uploadingImages ) {
// check if image is already uploading TODO: what if two clients call this at the same time? -> Good question.. (Thought about not sending the last requested. But then the upload will never finish...)
if ( ( image = uploadingImages.get( uuid ) ) != null ) {
- log.debug( "Image is already uploading" );
+ log.debug( "Image is already uploading.. returning some missing blocks" );
List<Integer> missing = getNMissingBlocks( image, AMOUNT );
if ( missing.isEmpty() ) {
uploadDone( uuid );
@@ -87,7 +85,6 @@ public class ImageProcessor
}
// insert new image
- log.debug( "Inserting new download" );
filepath = Globals.getImageDir() + "/" + uuid + ".vmdk";
token = RandomString.generate( 100, false );
crcPath = Globals.getImageDir() + "/" + uuid + ".crc";
@@ -103,7 +100,7 @@ public class ImageProcessor
try {
new CRCFile( crcSums, crcPath);
} catch (IOException e) {
- log.debug( "Could not create crc file" );
+ log.error( "Could not create crc file", e );
return null; // TODO: what to do if we can not write the crc file to disk? Give object to crcscheduler?
}
@@ -111,7 +108,7 @@ public class ImageProcessor
DbImage.insert( imageData, System.currentTimeMillis(), token, allBlocks, serverSessionId, filepath );
imagesToCheck.add( uuid );
- log.debug( "Returning UploadInfos" );
+ log.debug( "Returning UploadInfos. Client should goint to start the upload. " );
return new UploadInfos( token, Globals.getSslSocketPort(), getNMissingBlocks( image, AMOUNT ) );
}
@@ -148,13 +145,14 @@ public class ImageProcessor
// insert new client and start listener
synchronized ( downloadingClients ) {
- DownloadingClient client = new DownloadingClient();
String token = RandomString.generate( 100, false );
String filepath = DbImage.getImageByUUID( uuid ).imagePath;
- ConnectionHandler.addConnection( token, filepath, Connection.DOWNLOADING );
+ DownloadingClient client = new DownloadingClient();
client.addDownload( uuid, requestedBlocks, token );
downloadingClients.put( serverSessionId, client );
+
+ ConnectionHandler.addConnection( token, filepath, Connection.DOWNLOADING ).client = client;
return new DownloadInfos( token, Globals.getSslSocketPort() );
}
}
@@ -226,6 +224,11 @@ public class ImageProcessor
return result;
}
+ public static List<Integer> getRequestedBlocks( String token) {
+
+ return null;
+ }
+
/**
* Checks pending uploads in database and adds them to process list again.
*/
diff --git a/src/main/java/org/openslx/imagemaster/serverconnection/UploadingImage.java b/src/main/java/org/openslx/imagemaster/serverconnection/UploadingImage.java
index e6acb78..0e36175 100644
--- a/src/main/java/org/openslx/imagemaster/serverconnection/UploadingImage.java
+++ b/src/main/java/org/openslx/imagemaster/serverconnection/UploadingImage.java
@@ -39,7 +39,6 @@ public class UploadingImage
this.ts = ts;
this.uuid = uuid;
this.crcFilename = crcFilename;
- log.debug(missingBlocks);
}
protected void removeBlock( int number )