summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java72
1 files changed, 63 insertions, 9 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java
index fc13f113..06736619 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java
@@ -4,9 +4,12 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.util.concurrent.atomic.AtomicInteger;
+import javax.net.ssl.SSLContext;
+
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openslx.bwlp.thrift.iface.TInvalidTokenException;
+import org.openslx.bwlp.thrift.iface.TransferInformation;
import org.openslx.bwlp.thrift.iface.TransferState;
import org.openslx.bwlp.thrift.iface.TransferStatus;
import org.openslx.dozmod.Config;
@@ -35,8 +38,10 @@ public class UploadTask extends TransferTask {
private static final int THRIFT_INTERVAL_MS = (int) (THRIFT_INTERVAL_SECONDS * 1000);
private final String host;
- private final int port;
private final String uploadToken;
+ private final int portPlain;
+ private final int portSsl;
+ private final SSLContext sslCtx;
private final long startTime;
private String transferConnectionError = null;
@@ -54,15 +59,16 @@ public class UploadTask extends TransferTask {
return numConnections.get();
}
- public UploadTask(String host, int port, String uploadToken, File uploadFile)
+ public UploadTask(String host, TransferInformation ti, SSLContext ctx, File uploadFile)
throws FileNotFoundException {
super(uploadFile, uploadFile.length());
if (!uploadFile.canRead())
throw new FileNotFoundException();
- // TODO: SSL
+ this.sslCtx = ctx;
this.host = host;
- this.port = port;
- this.uploadToken = uploadToken;
+ this.portPlain = ti.plainPort;
+ this.portSsl = ti.sslPort;
+ this.uploadToken = ti.token;
this.startTime = System.currentTimeMillis();
}
@@ -86,15 +92,63 @@ public class UploadTask extends TransferTask {
}
}
- public void run2() {
+ private Exception initPlain(Exception ex) {
+ if (portPlain <= 0 || portPlain > 65535)
+ return ex;
+ LOGGER.info("Establishing plain upload connection to " + host + ":" + portPlain);
+ try {
+ uploader = new Uploader(host, portPlain, Config.TRANSFER_TIMEOUT, null, uploadToken);
+ } catch (Exception e) {
+ LOGGER.info("Connection failed");
+ return e;
+ }
+ return null;
+ }
+
+ private Exception initSsl(Exception ex) {
+ if (portSsl <= 0 || portSsl > 65535 || sslCtx == null)
+ return ex;
+ LOGGER.info("Establishing SSL upload connection to " + host + ":" + portSsl);
try {
- uploader = new Uploader(host, port, Config.TRANSFER_TIMEOUT, null, uploadToken);
+ uploader = new Uploader(host, portSsl, Config.TRANSFER_TIMEOUT, sslCtx, uploadToken);
} catch (Exception e) {
- LOGGER.warn("Could not initialize new uploader", e);
+ LOGGER.info("Connection failed");
+ return e;
+ }
+ return null;
+ }
+
+ public void run2() {
+ Exception ex = null;
+ switch (Config.getFileTransferMode()) {
+ case SSL:
+ ex = initSsl(ex);
+ if (uploader == null) {
+ ex = initPlain(ex);
+ }
+ break;
+ case SSL_ONLY:
+ ex = initSsl(ex);
+ break;
+ case PLAIN:
+ default:
+ ex = initPlain(ex);
+ if (uploader == null) {
+ ex = initSsl(ex);
+ }
+ break;
+ }
+ if (uploader == null) {
+ if (ex == null) {
+ LOGGER.warn("Could not initialize new uploader because neither plain"
+ + " nor SSL transfer data is given");
+ } else {
+ LOGGER.warn("Could not initialize new uploader, all connection methods failed", ex);
+ }
consecutiveInitFails.incrementAndGet();
connectFailed(this);
return;
- } // TODO: SSL
+ }
connectSucceeded(this);
final UploadThread thread = this;