fixed bug in ibb delivery introduced in earlier refactoring

This commit is contained in:
Daniel Gultsch 2020-04-01 15:17:38 +02:00
parent 34f42c73bc
commit 7538e387ec
2 changed files with 18 additions and 6 deletions

View file

@ -122,8 +122,8 @@ public class JingleConnectionManager extends AbstractConnectionManager {
} }
public void deliverIbbPacket(Account account, IqPacket packet) { public void deliverIbbPacket(Account account, IqPacket packet) {
String sid = null; final String sid;
Element payload = null; final Element payload;
if (packet.hasChild("open", Namespace.IBB)) { if (packet.hasChild("open", Namespace.IBB)) {
payload = packet.findChild("open", Namespace.IBB); payload = packet.findChild("open", Namespace.IBB);
sid = payload.getAttribute("sid"); sid = payload.getAttribute("sid");
@ -133,6 +133,9 @@ public class JingleConnectionManager extends AbstractConnectionManager {
} else if (packet.hasChild("close", Namespace.IBB)) { } else if (packet.hasChild("close", Namespace.IBB)) {
payload = packet.findChild("close", Namespace.IBB); payload = packet.findChild("close", Namespace.IBB);
sid = payload.getAttribute("sid"); sid = payload.getAttribute("sid");
} else {
payload = null;
sid = null;
} }
if (sid != null) { if (sid != null) {
for (final AbstractJingleConnection connection : this.connections.values()) { for (final AbstractJingleConnection connection : this.connections.values()) {
@ -140,7 +143,10 @@ public class JingleConnectionManager extends AbstractConnectionManager {
final JingleFileTransferConnection fileTransfer = (JingleFileTransferConnection) connection; final JingleFileTransferConnection fileTransfer = (JingleFileTransferConnection) connection;
final JingleTransport transport = fileTransfer.getTransport(); final JingleTransport transport = fileTransfer.getTransport();
if (transport instanceof JingleInBandTransport) { if (transport instanceof JingleInBandTransport) {
((JingleInBandTransport) transport).deliverPayload(packet, payload); final JingleInBandTransport inBandTransport = (JingleInBandTransport) transport;
if (inBandTransport.matches(account, sid)) {
inBandTransport.deliverPayload(packet, payload);
}
return; return;
} }
} }

View file

@ -3,6 +3,8 @@ package eu.siacs.conversations.xmpp.jingle;
import android.util.Base64; import android.util.Base64;
import android.util.Log; import android.util.Log;
import com.google.common.base.Preconditions;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
@ -77,6 +79,10 @@ public class JingleInBandTransport extends JingleTransport {
this.account.getXmppConnection().sendIqPacket(iq, null); this.account.getXmppConnection().sendIqPacket(iq, null);
} }
public boolean matches(final Account account, final String sessionId) {
return this.account == account && this.sessionId.equals(sessionId);
}
public void connect(final OnTransportConnected callback) { public void connect(final OnTransportConnected callback) {
IqPacket iq = new IqPacket(IqPacket.TYPE.SET); IqPacket iq = new IqPacket(IqPacket.TYPE.SET);
iq.setTo(this.counterpart); iq.setTo(this.counterpart);
@ -96,7 +102,7 @@ public class JingleInBandTransport extends JingleTransport {
@Override @Override
public void receive(DownloadableFile file, OnFileTransmissionStatusChanged callback) { public void receive(DownloadableFile file, OnFileTransmissionStatusChanged callback) {
this.onFileTransmissionStatusChanged = callback; this.onFileTransmissionStatusChanged = Preconditions.checkNotNull(callback);
this.file = file; this.file = file;
try { try {
this.digest = MessageDigest.getInstance("SHA-1"); this.digest = MessageDigest.getInstance("SHA-1");
@ -116,7 +122,7 @@ public class JingleInBandTransport extends JingleTransport {
@Override @Override
public void send(DownloadableFile file, OnFileTransmissionStatusChanged callback) { public void send(DownloadableFile file, OnFileTransmissionStatusChanged callback) {
this.onFileTransmissionStatusChanged = callback; this.onFileTransmissionStatusChanged = Preconditions.checkNotNull(callback);
this.file = file; this.file = file;
try { try {
this.remainingSize = this.file.getExpectedSize(); this.remainingSize = this.file.getExpectedSize();
@ -205,7 +211,7 @@ public class JingleInBandTransport extends JingleTransport {
connection.updateProgress((int) ((((double) (this.fileSize - this.remainingSize)) / this.fileSize) * 100)); connection.updateProgress((int) ((((double) (this.fileSize - this.remainingSize)) / this.fileSize) * 100));
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": " + e.getMessage()); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": " + e.getMessage(), e);
FileBackend.close(fileOutputStream); FileBackend.close(fileOutputStream);
this.onFileTransmissionStatusChanged.onFileTransferAborted(); this.onFileTransmissionStatusChanged.onFileTransferAborted();
} }