@@ -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);
}
@@ -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;