order canditates by priority before attempting to connect
This commit is contained in:
parent
7d6bd540d9
commit
783ed53d3a
|
@ -11,6 +11,7 @@ import java.io.OutputStream;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
@ -303,7 +304,7 @@ public class JingleConnection implements Transferable {
|
|||
if (this.initialTransport == Transport.IBB) {
|
||||
this.sendInitRequest();
|
||||
} else if (this.candidates.size() > 0) {
|
||||
this.sendInitRequest();
|
||||
this.sendInitRequest(); //TODO we will never get here? Can probably be removed
|
||||
} else {
|
||||
this.mJingleConnectionManager.getPrimaryCandidate(account, (success, candidate) -> {
|
||||
if (success) {
|
||||
|
@ -635,7 +636,7 @@ public class JingleConnection implements Transferable {
|
|||
|
||||
private boolean receiveAccept(JinglePacket packet) {
|
||||
if (this.mJingleStatus != JINGLE_STATUS_INITIATED) {
|
||||
Log.d(Config.LOGTAG,account.getJid().asBareJid()+": received out of order session-accept");
|
||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received out of order session-accept");
|
||||
return false;
|
||||
}
|
||||
this.mJingleStatus = JINGLE_STATUS_ACCEPTED;
|
||||
|
@ -654,7 +655,7 @@ public class JingleConnection implements Transferable {
|
|||
this.ibbBlockSize = bs;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.d(Config.LOGTAG,account.getJid().asBareJid()+": unable to parse block size in session-accept");
|
||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": unable to parse block size in session-accept");
|
||||
}
|
||||
}
|
||||
this.transport = new JingleInbandTransport(this, this.transportId, this.ibbBlockSize);
|
||||
|
@ -850,7 +851,7 @@ public class JingleConnection implements Transferable {
|
|||
this.ibbBlockSize = bs;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
Log.d(Config.LOGTAG,account.getJid().asBareJid()+": unable to parse block size in transport-replace");
|
||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": unable to parse block size in transport-replace");
|
||||
}
|
||||
}
|
||||
this.transportId = packet.getJingleContent().getTransportId();
|
||||
|
@ -889,7 +890,7 @@ public class JingleConnection implements Transferable {
|
|||
this.ibbBlockSize = bs;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
Log.d(Config.LOGTAG, account.getJid().asBareJid()+": unable to parse block size in transport-accept");
|
||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": unable to parse block size in transport-accept");
|
||||
}
|
||||
}
|
||||
this.transport = new JingleInbandTransport(this, this.transportId, this.ibbBlockSize);
|
||||
|
@ -1087,6 +1088,7 @@ public class JingleConnection implements Transferable {
|
|||
}
|
||||
|
||||
private void mergeCandidates(List<JingleCandidate> candidates) {
|
||||
Collections.sort(candidates, (a, b) -> Integer.compare(b.getPriority(), a.getPriority()));
|
||||
for (JingleCandidate c : candidates) {
|
||||
mergeCandidate(c);
|
||||
}
|
||||
|
|
|
@ -22,9 +22,9 @@ import eu.siacs.conversations.utils.WakeLockHelper;
|
|||
import eu.siacs.conversations.xmpp.jingle.stanzas.Content;
|
||||
|
||||
public class JingleSocks5Transport extends JingleTransport {
|
||||
private JingleCandidate candidate;
|
||||
private JingleConnection connection;
|
||||
private String destination;
|
||||
private final JingleCandidate candidate;
|
||||
private final JingleConnection connection;
|
||||
private final String destination;
|
||||
private OutputStream outputStream;
|
||||
private InputStream inputStream;
|
||||
private boolean isEstablished = false;
|
||||
|
@ -32,11 +32,15 @@ public class JingleSocks5Transport extends JingleTransport {
|
|||
private Socket socket;
|
||||
|
||||
JingleSocks5Transport(JingleConnection jingleConnection, JingleCandidate candidate) {
|
||||
final MessageDigest messageDigest;
|
||||
try {
|
||||
messageDigest = MessageDigest.getInstance("SHA-1");
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
this.candidate = candidate;
|
||||
this.connection = jingleConnection;
|
||||
try {
|
||||
MessageDigest mDigest = MessageDigest.getInstance("SHA-1");
|
||||
StringBuilder destBuilder = new StringBuilder();
|
||||
final StringBuilder destBuilder = new StringBuilder();
|
||||
if (jingleConnection.getFtVersion() == Content.Version.FT_3) {
|
||||
Log.d(Config.LOGTAG, this.connection.getAccount().getJid().asBareJid() + ": using session Id instead of transport Id for proxy destination");
|
||||
destBuilder.append(jingleConnection.getSessionId());
|
||||
|
@ -50,12 +54,8 @@ public class JingleSocks5Transport extends JingleTransport {
|
|||
destBuilder.append(jingleConnection.getCounterPart());
|
||||
destBuilder.append(jingleConnection.getAccount().getJid());
|
||||
}
|
||||
mDigest.reset();
|
||||
this.destination = CryptoHelper.bytesToHex(mDigest
|
||||
.digest(destBuilder.toString().getBytes()));
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
|
||||
}
|
||||
messageDigest.reset();
|
||||
this.destination = CryptoHelper.bytesToHex(messageDigest.digest(destBuilder.toString().getBytes()));
|
||||
}
|
||||
|
||||
public void connect(final OnTransportConnected callback) {
|
||||
|
|
Loading…
Reference in New Issue