aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java')
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java20
1 files changed, 19 insertions, 1 deletions
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 38a201bd..a87465b2 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
@@ -47,9 +47,11 @@ public class JingleInbandTransport extends JingleTransport {
@Override
public void onIqPacketReceived(Account account, IqPacket packet) {
if (connected && packet.getType() == IqPacket.TYPE.RESULT) {
+ if (remainingSize > 0) {
sendNextBlock();
}
}
+ }
};
public JingleInbandTransport(final JingleConnection connection, final String sid, final int blocksize) {
@@ -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
}
}