diff options
author | Christian Schneppe <christian@pix-art.de> | 2017-01-25 19:46:45 +0100 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2017-01-25 19:46:45 +0100 |
commit | 09218b3c500d72d7c4af3fd9e6bf7a9c56627ce6 (patch) | |
tree | 2f2fa95995d4db0f40c7001d2f62c287c7c63783 /src/main/java/de/pixart/messenger/xmpp/jingle/JingleInbandTransport.java | |
parent | c1a3c789a75949374a5444ba5b66302c871bf53e (diff) |
fixed some issues around ibb
Diffstat (limited to 'src/main/java/de/pixart/messenger/xmpp/jingle/JingleInbandTransport.java')
-rw-r--r-- | src/main/java/de/pixart/messenger/xmpp/jingle/JingleInbandTransport.java | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/main/java/de/pixart/messenger/xmpp/jingle/JingleInbandTransport.java b/src/main/java/de/pixart/messenger/xmpp/jingle/JingleInbandTransport.java index b19910c9f..fbf494295 100644 --- a/src/main/java/de/pixart/messenger/xmpp/jingle/JingleInbandTransport.java +++ b/src/main/java/de/pixart/messenger/xmpp/jingle/JingleInbandTransport.java @@ -47,7 +47,9 @@ public class JingleInbandTransport extends JingleTransport { @Override public void onIqPacketReceived(Account account, IqPacket packet) { if (connected && packet.getType() == IqPacket.TYPE.RESULT) { - sendNextBlock(); + if (remainingSize > 0) { + sendNextBlock(); + } } } }; @@ -60,6 +62,14 @@ public class JingleInbandTransport extends JingleTransport { this.sessionId = sid; } + private void sendClose() { + IqPacket iq = new IqPacket(IqPacket.TYPE.SET); + iq.setTo(this.counterpart); + Element close = iq.addChild("close", "http://jabber.org/protocol/ibb"); + close.setAttribute("sid", this.sessionId); + this.account.getXmppConnection().sendIqPacket(iq, null); + } + public void connect(final OnTransportConnected callback) { IqPacket iq = new IqPacket(IqPacket.TYPE.SET); iq.setTo(this.counterpart); @@ -155,6 +165,7 @@ public class JingleInbandTransport extends JingleTransport { try { int count = fileInputStream.read(buffer); if (count == -1) { + sendClose(); file.setSha1Sum(CryptoHelper.bytesToHex(digest.digest())); this.onFileTransmissionStatusChanged.onFileTransmitted(file); fileInputStream.close(); @@ -181,12 +192,13 @@ public class JingleInbandTransport extends JingleTransport { if (this.remainingSize > 0) { connection.updateProgress((int) ((((double) (this.fileSize - this.remainingSize)) / this.fileSize) * 100)); } else { + sendClose(); file.setSha1Sum(CryptoHelper.bytesToHex(digest.digest())); this.onFileTransmissionStatusChanged.onFileTransmitted(file); fileInputStream.close(); } } catch (IOException e) { - Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": " + e.getMessage()); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": io exception during sendNextBlock() " + e.getMessage()); FileBackend.close(fileInputStream); this.onFileTransmissionStatusChanged.onFileTransferAborted(); } @@ -232,7 +244,13 @@ public class JingleInbandTransport extends JingleTransport { this.receiveNextBlock(payload.getContent()); this.account.getXmppConnection().sendIqPacket( packet.generateResponse(IqPacket.TYPE.RESULT), null); + } else if (connected && payload.getName().equals("close")) { + this.connected = false; + this.account.getXmppConnection().sendIqPacket( + packet.generateResponse(IqPacket.TYPE.RESULT), null); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": received ibb close"); } else { + Log.d(Config.LOGTAG, payload.toString()); // TODO some sort of exception } } |