diff options
author | Simon Rettberg | 2023-09-22 15:39:48 +0200 |
---|---|---|
committer | Simon Rettberg | 2023-09-22 15:39:48 +0200 |
commit | 79a4bdc9eca1635ff036191bb50670f6a51654dc (patch) | |
tree | f6d7696e6479e55dc5a24533bfaac9b8a75559a6 /dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java | |
parent | [server] Force update of os, virt and org lists every 3 hours (diff) | |
download | tutor-module-79a4bdc9eca1635ff036191bb50670f6a51654dc.tar.gz tutor-module-79a4bdc9eca1635ff036191bb50670f6a51654dc.tar.xz tutor-module-79a4bdc9eca1635ff036191bb50670f6a51654dc.zip |
[client] Add config option to set transfer type (SSL or plain)
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.java | 72 |
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; |