From ad529be7057d133a7a08a73619413afa14217f76 Mon Sep 17 00:00:00 2001 From: vanitasvitae Date: Tue, 11 Jul 2017 13:30:17 +0200 Subject: [PATCH] Start implementing cancel abilities --- .../IncomingJingleFileOffer.java | 12 ++++++++++-- .../OutgoingJingleFileOffer.java | 18 ++++++++++++++++-- .../handler/FileTransferHandler.java | 4 +++- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/IncomingJingleFileOffer.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/IncomingJingleFileOffer.java index 0eb7e6259..e047cda9a 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/IncomingJingleFileOffer.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/IncomingJingleFileOffer.java @@ -17,6 +17,7 @@ package org.jivesoftware.smackx.jingle_filetransfer; import java.io.File; +import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; @@ -50,8 +51,15 @@ public class IncomingJingleFileOffer extends JingleFileTransferSession implement @Override public void cancel() { - //TODO: Actually cancel - notifyEndedListeners(JingleReason.Reason.cancel); + if (state == State.active) { + Future task = queued.get(0); + if (task != null) { + task.cancel(true); + queued.remove(task); + } + + notifyEndedListeners(JingleReason.Reason.cancel); + } } public enum State { diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/OutgoingJingleFileOffer.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/OutgoingJingleFileOffer.java index 0d6863a3e..149886d46 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/OutgoingJingleFileOffer.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/OutgoingJingleFileOffer.java @@ -17,6 +17,7 @@ package org.jivesoftware.smackx.jingle_filetransfer; import java.io.File; +import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; @@ -47,8 +48,21 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession { private static final Logger LOGGER = Logger.getLogger(OutgoingJingleFileOffer.class.getName()); @Override - public void cancel() { - //TODO: Actually cancel + public void cancel() throws InterruptedException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, SmackException.NoResponseException { + switch (state) { + case terminated: + return; + + case active: + Future task = queued.get(0); + if (task != null) { + task.cancel(true); + queued.remove(task); + } + + default: + jutil.sendSessionTerminateCancel(getRemote(), getSessionId()); + } notifyEndedListeners(JingleReason.Reason.cancel); } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/handler/FileTransferHandler.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/handler/FileTransferHandler.java index 0a3e9f5e6..338f270fe 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/handler/FileTransferHandler.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/handler/FileTransferHandler.java @@ -16,6 +16,8 @@ */ package org.jivesoftware.smackx.jingle_filetransfer.handler; +import org.jivesoftware.smack.SmackException; +import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smackx.jingle.element.JingleReason; /** @@ -26,7 +28,7 @@ public interface FileTransferHandler { /** * Cancels the current file transfer. */ - void cancel(); + void cancel() throws InterruptedException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, SmackException.NoResponseException; /** * Returns true, if the file transfer is ended.