diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 23508a82022776562bd46dd0d61904cfaed497d7..ba800163258ef9137b922cf788f9fcbaba4ddfe2 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/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); } diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java index e2f8be3393a806a2eb4fc0dc58569db8c61cccd9..ca035d5dfc7a7ab00c165c14e6b6db78d95a9f35 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java +++ b/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;