more ibb fixes (include sid in transport-accept)

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java      | 36 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java |  6 
2 files changed, 25 insertions(+), 17 deletions(-)

Detailed changes

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);

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();
 			}