From 219ae65ef72c695e05eee9aaa8f6181d7dbbd9af Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 22 Aug 2019 14:47:30 +0200 Subject: [PATCH] more ibb fixes (include sid in transport-accept) --- .../xmpp/jingle/JingleConnection.java | 36 ++++++++++++------- .../xmpp/jingle/JingleInbandTransport.java | 6 ++-- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java index e44d85056..d06c2469f 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java @@ -13,13 +13,11 @@ import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Locale; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import eu.siacs.conversations.Config; import eu.siacs.conversations.crypto.axolotl.AxolotlService; -import eu.siacs.conversations.crypto.axolotl.OnMessageCreatedCallback; import eu.siacs.conversations.crypto.axolotl.XmppAxolotlMessage; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Conversation; @@ -650,9 +648,13 @@ public class JingleConnection implements Transferable { } else if (content.hasIbbTransport()) { String receivedBlockSize = packet.getJingleContent().ibbTransport().getAttribute("block-size"); if (receivedBlockSize != null) { - int bs = Integer.parseInt(receivedBlockSize); - if (bs > this.ibbBlockSize) { - this.ibbBlockSize = bs; + try { + int bs = Integer.parseInt(receivedBlockSize); + if (bs > this.ibbBlockSize) { + this.ibbBlockSize = bs; + } + } catch (Exception e) { + Log.d(Config.LOGTAG,account.getJid().asBareJid()+": unable to parse block size in session-accept"); } } this.transport = new JingleInbandTransport(this, this.transportId, this.ibbBlockSize); @@ -839,12 +841,16 @@ public class JingleConnection implements Transferable { private boolean receiveFallbackToIbb(JinglePacket packet) { - Log.d(Config.LOGTAG, "receiving fallack to ibb"); + Log.d(Config.LOGTAG, "receiving fallback to ibb"); final String receivedBlockSize = packet.getJingleContent().ibbTransport().getAttribute("block-size"); if (receivedBlockSize != null) { - final int bs = Integer.parseInt(receivedBlockSize); - if (bs < this.ibbBlockSize) { - this.ibbBlockSize = bs; + try { + final int bs = Integer.parseInt(receivedBlockSize); + if (bs < this.ibbBlockSize) { + this.ibbBlockSize = bs; + } + } catch (NumberFormatException e) { + Log.d(Config.LOGTAG,account.getJid().asBareJid()+": unable to parse block size in transport-replace"); } } this.transportId = packet.getJingleContent().getTransportId(); @@ -853,8 +859,8 @@ public class JingleConnection implements Transferable { final JinglePacket answer = bootstrapPacket("transport-accept"); final Content content = new Content(contentCreator, contentName); - content.setFileOffer(fileOffer, ftVersion); content.ibbTransport().setAttribute("block-size", this.ibbBlockSize); + content.ibbTransport().setAttribute("sid", this.transportId); answer.setContent(content); @@ -877,9 +883,13 @@ public class JingleConnection implements Transferable { String receivedBlockSize = packet.getJingleContent().ibbTransport() .getAttribute("block-size"); if (receivedBlockSize != null) { - int bs = Integer.parseInt(receivedBlockSize); - if (bs > this.ibbBlockSize) { - this.ibbBlockSize = bs; + try { + int bs = Integer.parseInt(receivedBlockSize); + if (bs < this.ibbBlockSize) { + this.ibbBlockSize = bs; + } + } catch (NumberFormatException e) { + Log.d(Config.LOGTAG, account.getJid().asBareJid()+": unable to parse block size in transport-accept"); } } this.transport = new JingleInbandTransport(this, this.transportId, this.ibbBlockSize); diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java index 34bf5412e..276040979 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java @@ -177,12 +177,10 @@ public class JingleInbandTransport extends JingleTransport { this.account.getXmppConnection().sendIqPacket(iq, this.onAckReceived); this.account.getXmppConnection().r(); //don't fill up stanza queue too much this.seq++; - if (this.remainingSize > 0) { - connection.updateProgress((int) ((((double) (this.fileSize - this.remainingSize)) / this.fileSize) * 100)); - } else { + connection.updateProgress((int) ((((double) (this.fileSize - this.remainingSize)) / this.fileSize) * 100)); + if (this.remainingSize <= 0) { sendClose(); file.setSha1Sum(digest.digest()); - Log.d(Config.LOGTAG,account.getJid().asBareJid()+": sendNextBlock() remaining size"); this.onFileTransmissionStatusChanged.onFileTransmitted(file); fileInputStream.close(); }