do not include link local in direct candidates

This commit is contained in:
Daniel Gultsch 2019-09-05 13:17:45 +02:00
parent 571c29f92a
commit 0e1c26c569
4 changed files with 19 additions and 22 deletions

View file

@ -26,6 +26,7 @@ import eu.siacs.conversations.Config;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.DownloadableFile; import eu.siacs.conversations.entities.DownloadableFile;
import eu.siacs.conversations.utils.Compatibility; import eu.siacs.conversations.utils.Compatibility;
import eu.siacs.conversations.utils.CryptoHelper;
public class AbstractConnectionManager { public class AbstractConnectionManager {

View file

@ -26,9 +26,10 @@ public class DirectConnectionUtils {
final Enumeration<InetAddress> inetAddressEnumeration = networkInterface.getInetAddresses(); final Enumeration<InetAddress> inetAddressEnumeration = networkInterface.getInetAddresses();
while (inetAddressEnumeration.hasMoreElements()) { while (inetAddressEnumeration.hasMoreElements()) {
final InetAddress inetAddress = inetAddressEnumeration.nextElement(); final InetAddress inetAddress = inetAddressEnumeration.nextElement();
if (!inetAddress.isLoopbackAddress()) { if (inetAddress.isLoopbackAddress() || inetAddress.isLinkLocalAddress()) {
addresses.add(inetAddress); continue;
} }
addresses.add(inetAddress);
} }
} }
return addresses; return addresses;

View file

@ -110,15 +110,12 @@ public class JingleCandidate {
} }
public static JingleCandidate parse(Element candidate) { public static JingleCandidate parse(Element candidate) {
JingleCandidate parsedCandidate = new JingleCandidate( JingleCandidate parsedCandidate = new JingleCandidate(candidate.getAttribute("cid"), false);
candidate.getAttribute("cid"), false);
parsedCandidate.setHost(candidate.getAttribute("host")); parsedCandidate.setHost(candidate.getAttribute("host"));
parsedCandidate.setJid(InvalidJid.getNullForInvalid(candidate.getAttributeAsJid("jid"))); parsedCandidate.setJid(InvalidJid.getNullForInvalid(candidate.getAttributeAsJid("jid")));
parsedCandidate.setType(candidate.getAttribute("type")); parsedCandidate.setType(candidate.getAttribute("type"));
parsedCandidate.setPriority(Integer.parseInt(candidate parsedCandidate.setPriority(Integer.parseInt(candidate.getAttribute("priority")));
.getAttribute("priority"))); parsedCandidate.setPort(Integer.parseInt(candidate.getAttribute("port")));
parsedCandidate
.setPort(Integer.parseInt(candidate.getAttribute("port")));
return parsedCandidate; return parsedCandidate;
} }

View file

@ -174,7 +174,7 @@ public class JingleConnection implements Transferable {
@Override @Override
public void failed() { public void failed() {
Log.d(Config.LOGTAG, account.getJid().asBareJid()+": proxy activation failed"); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": proxy activation failed");
if (initiating()) { if (initiating()) {
sendFallbackToIbb(); sendFallbackToIbb();
} }
@ -320,22 +320,20 @@ public class JingleConnection implements Transferable {
@Override @Override
public void failed() { public void failed() {
Log.d(Config.LOGTAG, Log.d(Config.LOGTAG, "connection to our own proxy65 candidate failed");
"connection to our own primary candidete failed");
sendInitRequest(); sendInitRequest();
} }
@Override @Override
public void established() { public void established() {
Log.d(Config.LOGTAG, Log.d(Config.LOGTAG, "successfully connected to our own proxy65 candidate");
"successfully connected to our own primary candidate");
mergeCandidate(candidate); mergeCandidate(candidate);
sendInitRequest(); sendInitRequest();
} }
}); });
mergeCandidate(candidate); mergeCandidate(candidate);
} else { } else {
Log.d(Config.LOGTAG, "no primary candidate of our own was found"); Log.d(Config.LOGTAG, "no proxy65 candidate of our own was found");
sendInitRequest(); sendInitRequest();
} }
}); });
@ -437,7 +435,7 @@ public class JingleConnection implements Transferable {
if (encrypted == null) { if (encrypted == null) {
final Element security = content.findChild("security", Namespace.JINGLE_ENCRYPTED_TRANSPORT); final Element security = content.findChild("security", Namespace.JINGLE_ENCRYPTED_TRANSPORT);
if (security != null && AxolotlService.PEP_PREFIX.equals(security.getAttribute("type"))) { if (security != null && AxolotlService.PEP_PREFIX.equals(security.getAttribute("type"))) {
Log.d(Config.LOGTAG, account.getJid().asBareJid()+": received jingle file offer with JET"); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received jingle file offer with JET");
encrypted = security.findChild("encrypted", AxolotlService.PEP_PREFIX); encrypted = security.findChild("encrypted", AxolotlService.PEP_PREFIX);
} }
} }
@ -533,7 +531,7 @@ public class JingleConnection implements Transferable {
this.file.setExpectedSize(file.getSize() + 16); this.file.setExpectedSize(file.getSize() + 16);
final Element file = content.setFileOffer(this.file, false, this.ftVersion); final Element file = content.setFileOffer(this.file, false, this.ftVersion);
if (remoteSupportsOmemoJet) { if (remoteSupportsOmemoJet) {
Log.d(Config.LOGTAG, account.getJid().asBareJid()+": remote announced support for JET"); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": remote announced support for JET");
final Element security = new Element("security", Namespace.JINGLE_ENCRYPTED_TRANSPORT); final Element security = new Element("security", Namespace.JINGLE_ENCRYPTED_TRANSPORT);
security.setAttribute("name", this.contentName); security.setAttribute("name", this.contentName);
security.setAttribute("cipher", JET_OMEMO_CIPHER); security.setAttribute("cipher", JET_OMEMO_CIPHER);
@ -619,7 +617,7 @@ public class JingleConnection implements Transferable {
@Override @Override
public void failed() { public void failed() {
Log.d(Config.LOGTAG, "connection to our own primary candidate failed"); Log.d(Config.LOGTAG, "connection to our own proxy65 candidate failed");
content.socks5transport().setChildren(getCandidatesAsElements()); content.socks5transport().setChildren(getCandidatesAsElements());
packet.setContent(content); packet.setContent(content);
sendJinglePacket(packet); sendJinglePacket(packet);
@ -628,7 +626,7 @@ public class JingleConnection implements Transferable {
@Override @Override
public void established() { public void established() {
Log.d(Config.LOGTAG, "connected to primary candidate"); Log.d(Config.LOGTAG, "connected to proxy65 candidate");
mergeCandidate(candidate); mergeCandidate(candidate);
content.socks5transport().setChildren(getCandidatesAsElements()); content.socks5transport().setChildren(getCandidatesAsElements());
packet.setContent(content); packet.setContent(content);
@ -637,7 +635,7 @@ public class JingleConnection implements Transferable {
} }
}); });
} else { } else {
Log.d(Config.LOGTAG, "did not find a primary candidate for ourselves"); Log.d(Config.LOGTAG, "did not find a proxy65 candidate for ourselves");
content.socks5transport().setChildren(getCandidatesAsElements()); content.socks5transport().setChildren(getCandidatesAsElements());
packet.setContent(content); packet.setContent(content);
sendJinglePacket(packet); sendJinglePacket(packet);
@ -770,14 +768,14 @@ public class JingleConnection implements Transferable {
final JingleSocks5Transport connection = chooseConnection(); final JingleSocks5Transport connection = chooseConnection();
this.transport = connection; this.transport = connection;
if (connection == null) { if (connection == null) {
Log.d(Config.LOGTAG, account.getJid().asBareJid()+": could not find suitable candidate"); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": could not find suitable candidate");
this.disconnectSocks5Connections(); this.disconnectSocks5Connections();
if (initiating()) { if (initiating()) {
this.sendFallbackToIbb(); this.sendFallbackToIbb();
} }
} else { } else {
final JingleCandidate candidate = connection.getCandidate(); final JingleCandidate candidate = connection.getCandidate();
Log.d(Config.LOGTAG, account.getJid().asBareJid()+": elected candidate "+candidate.getHost()+":"+candidate.getPort()); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": elected candidate " + candidate.getHost() + ":" + candidate.getPort());
this.mJingleStatus = JINGLE_STATUS_TRANSMITTING; this.mJingleStatus = JINGLE_STATUS_TRANSMITTING;
if (connection.needsActivation()) { if (connection.needsActivation()) {
if (connection.getCandidate().isOurs()) { if (connection.getCandidate().isOurs()) {
@ -888,7 +886,7 @@ public class JingleConnection implements Transferable {
private boolean receiveFallbackToIbb(JinglePacket packet) { private boolean receiveFallbackToIbb(JinglePacket packet) {
Log.d(Config.LOGTAG, account.getJid().asBareJid()+": receiving fallback to ibb"); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": receiving fallback to ibb");
final String receivedBlockSize = packet.getJingleContent().ibbTransport().getAttribute("block-size"); final String receivedBlockSize = packet.getJingleContent().ibbTransport().getAttribute("block-size");
if (receivedBlockSize != null) { if (receivedBlockSize != null) {
try { try {