trim hostname for tor

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java                      |  3 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java | 46 
2 files changed, 23 insertions(+), 26 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -303,7 +303,7 @@ public class XmppConnection implements Runnable {
             // TODO collapse Tor usage into normal connection code path
             if (useTor) {
                 final var seeOtherHost = this.seeOtherHostResolverResult;
-                final var hostname = account.getHostname();
+                final var hostname = account.getHostname().trim();
                 final var port = account.getPort();
                 final Resolver.Result resume = streamId == null ? null : streamId.location;
                 final Resolver.Result viaTor;
@@ -446,7 +446,6 @@ public class XmppConnection implements Runnable {
                         localSocket = new Socket();
                         localSocket.connect(addr, Config.SOCKET_TIMEOUT * 1000);
 
-                        // TODO use result.isDirect() as condition and set encryptionEnabled after
                         if (features.encryptionEnabled) {
                             localSocket = upgradeSocketToTls(localSocket);
                         }

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java 🔗

@@ -1,9 +1,7 @@
 package eu.siacs.conversations.xmpp.jingle;
 
 import android.util.Log;
-
 import androidx.annotation.NonNull;
-
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.base.Throwables;
@@ -16,7 +14,6 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
-
 import eu.siacs.conversations.Config;
 import eu.siacs.conversations.crypto.axolotl.XmppAxolotlMessage;
 import eu.siacs.conversations.entities.Conversation;
@@ -38,19 +35,8 @@ import eu.siacs.conversations.xmpp.jingle.transports.InbandBytestreamsTransport;
 import eu.siacs.conversations.xmpp.jingle.transports.SocksByteStreamsTransport;
 import eu.siacs.conversations.xmpp.jingle.transports.Transport;
 import eu.siacs.conversations.xmpp.jingle.transports.WebRTCDataChannelTransport;
-
 import im.conversations.android.xmpp.model.jingle.Jingle;
 import im.conversations.android.xmpp.model.stanza.Iq;
-
-import org.bouncycastle.crypto.engines.AESEngine;
-import org.bouncycastle.crypto.io.CipherInputStream;
-import org.bouncycastle.crypto.io.CipherOutputStream;
-import org.bouncycastle.crypto.modes.AEADBlockCipher;
-import org.bouncycastle.crypto.modes.GCMBlockCipher;
-import org.bouncycastle.crypto.params.AEADParameters;
-import org.bouncycastle.crypto.params.KeyParameter;
-import org.webrtc.IceCandidate;
-
 import java.io.Closeable;
 import java.io.EOFException;
 import java.io.File;
@@ -68,6 +54,14 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.Queue;
 import java.util.concurrent.CountDownLatch;
+import org.bouncycastle.crypto.engines.AESEngine;
+import org.bouncycastle.crypto.io.CipherInputStream;
+import org.bouncycastle.crypto.io.CipherOutputStream;
+import org.bouncycastle.crypto.modes.AEADBlockCipher;
+import org.bouncycastle.crypto.modes.GCMBlockCipher;
+import org.bouncycastle.crypto.params.AEADParameters;
+import org.bouncycastle.crypto.params.KeyParameter;
+import org.webrtc.IceCandidate;
 
 public class JingleFileTransferConnection extends AbstractJingleConnection
         implements Transport.Callback, Transferable {
@@ -871,7 +865,8 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
             if (isTerminated()) {
                 Log.d(
                         Config.LOGTAG,
-                        "failed to set up file transceiver but session has already been terminated");
+                        "failed to set up file transceiver but session has already been"
+                                + " terminated");
             } else {
                 Log.d(Config.LOGTAG, "failed to set up file transceiver", e);
                 sendSessionTerminate(Reason.ofThrowable(e), e.getMessage());
@@ -1005,11 +1000,13 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
     public void onTransportSetupFailed() {
         final var transport = this.transport;
         if (transport == null) {
-            // this can happen on IQ timeouts
-            if (isTerminated()) {
-                return;
+            synchronized (this) {
+                // this can happen on IQ timeouts
+                if (isTerminated()) {
+                    return;
+                }
+                sendSessionTerminate(Reason.FAILED_APPLICATION, null);
             }
-            sendSessionTerminate(Reason.FAILED_APPLICATION, null);
             return;
         }
         Log.d(Config.LOGTAG, "onTransportSetupFailed");
@@ -1183,12 +1180,13 @@ public class JingleFileTransferConnection extends AbstractJingleConnection
         }
         final var state = getState();
         return switch (state) {
-            case NULL, SESSION_INITIALIZED, SESSION_INITIALIZED_PRE_APPROVED -> Transferable
-                    .STATUS_OFFER;
+            case NULL, SESSION_INITIALIZED, SESSION_INITIALIZED_PRE_APPROVED ->
+                    Transferable.STATUS_OFFER;
             case TERMINATED_APPLICATION_FAILURE,
-                    TERMINATED_CONNECTIVITY_ERROR,
-                    TERMINATED_DECLINED_OR_BUSY,
-                    TERMINATED_SECURITY_ERROR -> Transferable.STATUS_FAILED;
+                            TERMINATED_CONNECTIVITY_ERROR,
+                            TERMINATED_DECLINED_OR_BUSY,
+                            TERMINATED_SECURITY_ERROR ->
+                    Transferable.STATUS_FAILED;
             case TERMINATED_CANCEL_OR_TIMEOUT -> Transferable.STATUS_CANCELLED;
             case SESSION_ACCEPTED -> Transferable.STATUS_DOWNLOADING;
             default -> Transferable.STATUS_UNKNOWN;