@@ -18,7 +18,6 @@ import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.entities.Transferable;
import eu.siacs.conversations.services.AbstractConnectionManager;
import eu.siacs.conversations.services.XmppConnectionService;
-import eu.siacs.conversations.ui.util.Attachment;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xml.Namespace;
import eu.siacs.conversations.xmpp.OnIqPacketReceived;
@@ -47,7 +46,11 @@ public class JingleConnectionManager extends AbstractConnectionManager {
}
public void deliverPacket(final Account account, final JinglePacket packet) {
- //TODO check that sessionId is not null
+ final String sessionId = packet.getSessionId();
+ if (sessionId == null) {
+ respondWithJingleError(account, packet, "unknown-session", "item-not-found", "cancel");
+ return;
+ }
final AbstractJingleConnection.Id id = AbstractJingleConnection.Id.of(account, packet);
final AbstractJingleConnection existingJingleConnection = connections.get(id);
if (existingJingleConnection != null) {
@@ -78,7 +81,6 @@ public class JingleConnectionManager extends AbstractConnectionManager {
} else {
Log.d(Config.LOGTAG, "unable to route jingle packet: " + packet);
respondWithJingleError(account, packet, "unknown-session", "item-not-found", "cancel");
-
}
}
@@ -30,6 +30,12 @@ import rocks.xmpp.addr.Jid;
public class JingleRtpConnection extends AbstractJingleConnection implements WebRTCWrapper.EventCallback {
+ public static final List<State> STATES_SHOWING_ONGOING_CALL = Arrays.asList(
+ State.PROCEED,
+ State.SESSION_INITIALIZED,
+ State.SESSION_INITIALIZED_PRE_APPROVED,
+ State.SESSION_ACCEPTED
+ );
private static final Map<State, Collection<State>> VALID_TRANSITIONS;
static {
@@ -74,13 +80,6 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
VALID_TRANSITIONS = transitionBuilder.build();
}
- public static final List<State> STATES_SHOWING_ONGOING_CALL = Arrays.asList(
- State.PROCEED,
- State.SESSION_INITIALIZED,
- State.SESSION_INITIALIZED_PRE_APPROVED,
- State.SESSION_ACCEPTED
- );
-
private final WebRTCWrapper webRTCWrapper = new WebRTCWrapper(this);
private final ArrayDeque<IceCandidate> pendingIceCandidates = new ArrayDeque<>();
private State state = State.NULL;
@@ -196,7 +195,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
contentMap.requireDTLSFingerprint();
} catch (final IllegalArgumentException | IllegalStateException | NullPointerException e) {
respondOk(jinglePacket);
- sendSessionTerminate(Reason.FAILED_APPLICATION);
+ sendSessionTerminate(Reason.FAILED_APPLICATION, e.getMessage());
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": improperly formatted contents", e);
return;
}
@@ -238,7 +237,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
respondOk(jinglePacket);
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": improperly formatted contents in session-accept", e);
webRTCWrapper.close();
- sendSessionTerminate(Reason.FAILED_APPLICATION);
+ sendSessionTerminate(Reason.FAILED_APPLICATION, e.getMessage());
return;
}
Log.d(Config.LOGTAG, "processing session-accept with " + contentMap.contents.size() + " contents");