@@ -12,20 +12,6 @@ import com.google.common.collect.Collections2;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.ImmutableSet;
-import java.lang.ref.WeakReference;
-import java.security.SecureRandom;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-
import eu.siacs.conversations.Config;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Contact;
@@ -39,7 +25,6 @@ import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xml.Namespace;
import eu.siacs.conversations.xmpp.Jid;
-import eu.siacs.conversations.xmpp.OnIqPacketReceived;
import eu.siacs.conversations.xmpp.XmppConnection;
import eu.siacs.conversations.xmpp.jingle.stanzas.Content;
import eu.siacs.conversations.xmpp.jingle.stanzas.FileTransferDescription;
@@ -51,6 +36,19 @@ import eu.siacs.conversations.xmpp.jingle.stanzas.RtpDescription;
import eu.siacs.conversations.xmpp.stanzas.IqPacket;
import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
+import java.lang.ref.WeakReference;
+import java.security.SecureRandom;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
public class JingleConnectionManager extends AbstractConnectionManager {
static final ScheduledExecutorService SCHEDULED_EXECUTOR_SERVICE =
Executors.newSingleThreadScheduledExecutor();
@@ -170,8 +168,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
public boolean hasJingleRtpConnection(final Account account) {
for (AbstractJingleConnection connection : this.connections.values()) {
- if (connection instanceof JingleRtpConnection) {
- final JingleRtpConnection rtpConnection = (JingleRtpConnection) connection;
+ if (connection instanceof JingleRtpConnection rtpConnection) {
if (rtpConnection.isTerminated()) {
continue;
}
@@ -185,8 +182,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
public void notifyPhoneCallStarted() {
for (AbstractJingleConnection connection : connections.values()) {
- if (connection instanceof JingleRtpConnection) {
- final JingleRtpConnection rtpConnection = (JingleRtpConnection) connection;
+ if (connection instanceof JingleRtpConnection rtpConnection) {
if (rtpConnection.isTerminated()) {
continue;
}
@@ -195,7 +191,6 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
}
-
private Optional<RtpSessionProposal> findMatchingSessionProposal(
final Account account, final Jid with, final Set<Media> media) {
synchronized (this.rtpSessionProposals) {
@@ -221,8 +216,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
private boolean hasMatchingRtpSession(
final Account account, final Jid with, final Set<Media> media) {
for (AbstractJingleConnection connection : this.connections.values()) {
- if (connection instanceof JingleRtpConnection) {
- final JingleRtpConnection rtpConnection = (JingleRtpConnection) connection;
+ if (connection instanceof JingleRtpConnection rtpConnection) {
if (rtpConnection.isTerminated()) {
continue;
}
@@ -282,8 +276,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
if ("accept".equals(message.getName())) {
for (AbstractJingleConnection connection : connections.values()) {
- if (connection instanceof JingleRtpConnection) {
- final JingleRtpConnection rtpConnection = (JingleRtpConnection) connection;
+ if (connection instanceof JingleRtpConnection rtpConnection) {
final AbstractJingleConnection.Id id = connection.getId();
if (id.account == account && id.sessionId.equals(sessionId)) {
rtpConnection.deliveryMessage(from, message, serverMsgId, timestamp);
@@ -645,7 +638,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
final AbstractJingleConnection.Id id = connection.getId();
if (this.connections.remove(id) == null) {
throw new IllegalStateException(
- String.format("Unable to finish connection with id=%s", id.toString()));
+ String.format("Unable to finish connection with id=%s", id));
}
// update chat UI to remove 'ongoing call' icon
mXmppConnectionService.updateConversationUi();
@@ -654,8 +647,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
public boolean fireJingleRtpConnectionStateUpdates() {
boolean firedUpdates = false;
for (final AbstractJingleConnection connection : this.connections.values()) {
- if (connection instanceof JingleRtpConnection) {
- final JingleRtpConnection jingleRtpConnection = (JingleRtpConnection) connection;
+ if (connection instanceof JingleRtpConnection jingleRtpConnection) {
if (jingleRtpConnection.isTerminated()) {
continue;
}
@@ -674,63 +666,50 @@ public class JingleConnectionManager extends AbstractConnectionManager {
listener.onPrimaryCandidateFound(false, null);
return;
}
- if (!this.primaryCandidates.containsKey(account.getJid().asBareJid())) {
- final Jid proxy =
- account.getXmppConnection().findDiscoItemByFeature(Namespace.BYTE_STREAMS);
- if (proxy != null) {
- IqPacket iq = new IqPacket(IqPacket.TYPE.GET);
- iq.setTo(proxy);
- iq.query(Namespace.BYTE_STREAMS);
- account.getXmppConnection()
- .sendIqPacket(
- iq,
- new OnIqPacketReceived() {
-
- @Override
- public void onIqPacketReceived(
- Account account, IqPacket packet) {
- final Element streamhost =
- packet.query()
- .findChild(
- "streamhost",
- Namespace.BYTE_STREAMS);
- final String host =
- streamhost == null
- ? null
- : streamhost.getAttribute("host");
- final String port =
- streamhost == null
- ? null
- : streamhost.getAttribute("port");
- if (host != null && port != null) {
- try {
- JingleCandidate candidate =
- new JingleCandidate(nextRandomId(), true);
- candidate.setHost(host);
- candidate.setPort(Integer.parseInt(port));
- candidate.setType(JingleCandidate.TYPE_PROXY);
- candidate.setJid(proxy);
- candidate.setPriority(
- 655360 + (initiator ? 30 : 0));
- primaryCandidates.put(
- account.getJid().asBareJid(), candidate);
- listener.onPrimaryCandidateFound(true, candidate);
- } catch (final NumberFormatException e) {
- listener.onPrimaryCandidateFound(false, null);
- }
- } else {
- listener.onPrimaryCandidateFound(false, null);
- }
- }
- });
- } else {
- listener.onPrimaryCandidateFound(false, null);
- }
-
- } else {
+ if (this.primaryCandidates.containsKey(account.getJid().asBareJid())) {
listener.onPrimaryCandidateFound(
true, this.primaryCandidates.get(account.getJid().asBareJid()));
+ return;
}
+
+ final Jid proxy =
+ account.getXmppConnection().findDiscoItemByFeature(Namespace.BYTE_STREAMS);
+ if (proxy == null) {
+ listener.onPrimaryCandidateFound(false, null);
+ return;
+ }
+ final IqPacket iq = new IqPacket(IqPacket.TYPE.GET);
+ iq.setTo(proxy);
+ iq.query(Namespace.BYTE_STREAMS);
+ account.getXmppConnection()
+ .sendIqPacket(
+ iq,
+ (a, response) -> {
+ final Element streamhost =
+ response.query()
+ .findChild("streamhost", Namespace.BYTE_STREAMS);
+ final String host =
+ streamhost == null ? null : streamhost.getAttribute("host");
+ final String port =
+ streamhost == null ? null : streamhost.getAttribute("port");
+ if (host != null && port != null) {
+ try {
+ JingleCandidate candidate =
+ new JingleCandidate(nextRandomId(), true);
+ candidate.setHost(host);
+ candidate.setPort(Integer.parseInt(port));
+ candidate.setType(JingleCandidate.TYPE_PROXY);
+ candidate.setJid(proxy);
+ candidate.setPriority(655360 + (initiator ? 30 : 0));
+ primaryCandidates.put(a.getJid().asBareJid(), candidate);
+ listener.onPrimaryCandidateFound(true, candidate);
+ } catch (final NumberFormatException e) {
+ listener.onPrimaryCandidateFound(false, null);
+ }
+ } else {
+ listener.onPrimaryCandidateFound(false, null);
+ }
+ });
}
public void retractSessionProposal(final Account account, final Jid with) {
@@ -849,13 +828,9 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
if (sid != null) {
for (final AbstractJingleConnection connection : this.connections.values()) {
- if (connection instanceof JingleFileTransferConnection) {
- final JingleFileTransferConnection fileTransfer =
- (JingleFileTransferConnection) connection;
+ if (connection instanceof JingleFileTransferConnection fileTransfer) {
final JingleTransport transport = fileTransfer.getTransport();
- if (transport instanceof JingleInBandTransport) {
- final JingleInBandTransport inBandTransport =
- (JingleInBandTransport) transport;
+ if (transport instanceof JingleInBandTransport inBandTransport) {
if (inBandTransport.matches(account, sid)) {
inBandTransport.deliverPayload(packet, payload);
}
@@ -864,7 +839,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
}
}
- Log.d(Config.LOGTAG, "unable to deliver ibb packet: " + packet.toString());
+ Log.d(Config.LOGTAG, "unable to deliver ibb packet: " + packet);
account.getXmppConnection()
.sendIqPacket(packet.generateResponse(IqPacket.TYPE.ERROR), null);
}
@@ -970,7 +945,8 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
}
- public void failProceed(Account account, final Jid with, final String sessionId, final String message) {
+ public void failProceed(
+ Account account, final Jid with, final String sessionId, final String message) {
final AbstractJingleConnection.Id id =
AbstractJingleConnection.Id.of(account, with, sessionId);
final AbstractJingleConnection existingJingleConnection = connections.get(id);
@@ -1044,15 +1020,11 @@ public class JingleConnectionManager extends AbstractConnectionManager {
FAILED;
public RtpEndUserState toEndUserState() {
- switch (this) {
- case SEARCHING:
- case SEARCHING_ACKNOWLEDGED:
- return RtpEndUserState.FINDING_DEVICE;
- case DISCOVERED:
- return RtpEndUserState.RINGING;
- default:
- return RtpEndUserState.CONNECTIVITY_ERROR;
- }
+ return switch (this) {
+ case SEARCHING, SEARCHING_ACKNOWLEDGED -> RtpEndUserState.FINDING_DEVICE;
+ case DISCOVERED -> RtpEndUserState.RINGING;
+ default -> RtpEndUserState.CONNECTIVITY_ERROR;
+ };
}
}
@@ -1062,10 +1034,6 @@ public class JingleConnectionManager extends AbstractConnectionManager {
public final Set<Media> media;
private final Account account;
- private RtpSessionProposal(Account account, Jid with, String sessionId) {
- this(account, with, sessionId, Collections.emptySet());
- }
-
private RtpSessionProposal(Account account, Jid with, String sessionId, Set<Media> media) {
this.account = account;
this.with = with;