1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2025-09-12 18:49:39 +02:00

Fix cancelling file transfers and create int tests

This commit is contained in:
vanitasvitae 2017-08-23 14:09:41 +02:00
parent 8bd4954314
commit 97baf75a86
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
4 changed files with 180 additions and 0 deletions

View file

@ -19,6 +19,8 @@ package org.jivesoftware.smackx.jingle_filetransfer.component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection;
@ -35,6 +37,8 @@ import org.jivesoftware.smackx.jingle_filetransfer.listener.ProgressListener;
*/
public abstract class JingleFileTransfer extends JingleDescription<JingleFileTransferElement> implements JingleFileTransferController {
private static final Logger LOGGER = Logger.getLogger(JingleFileTransfer.class.getName());
public static final String NAMESPACE_V5 = "urn:xmpp:jingle:apps:file-transfer:5";
public static final String NAMESPACE = NAMESPACE_V5;
@ -69,19 +73,23 @@ public abstract class JingleFileTransfer extends JingleDescription<JingleFileTra
switch (state) {
case pending:
if (session.isResponder()) {
LOGGER.log(Level.INFO, "Cancel pending file transfer as responder.");
connection.createStanzaCollectorAndSend(JingleElement.createSessionTerminate(session.getPeer(), session.getSessionId(), JingleReasonElement.Reason.decline));
} else {
LOGGER.log(Level.INFO, "Cancel pending file transfer as initiator.");
connection.createStanzaCollectorAndSend(JingleElement.createSessionTerminate(session.getPeer(), session.getSessionId(), JingleReasonElement.Reason.cancel));
}
break;
case active:
LOGGER.log(Level.INFO, "Cancel active file transfer.");
connection.createStanzaCollectorAndSend(JingleElement.createSessionTerminate(session.getPeer(), session.getSessionId(), JingleReasonElement.Reason.cancel));
break;
default: break;
}
getParent().onContentCancel();
state = State.cancelled;
}
public void notifyProgressListenersStarted() {

View file

@ -67,6 +67,7 @@ public class JingleIncomingFileOffer extends AbstractJingleFileOffer implements
if (state == State.negotiating) {
state = State.active;
notifyProgressListenersStarted();
} else {
return;
}

View file

@ -42,11 +42,13 @@ public class JingleOutgoingFileOffer extends AbstractJingleFileOffer implements
public JingleOutgoingFileOffer(File file, JingleFile metadata) throws FileNotFoundException {
super(metadata);
this.source = new FileInputStream(file);
this.state = State.pending;
}
public JingleOutgoingFileOffer(InputStream inputStream, JingleFile metadata) {
super(metadata);
this.source = inputStream;
this.state = State.pending;
}
@Override
@ -60,6 +62,10 @@ public class JingleOutgoingFileOffer extends AbstractJingleFileOffer implements
throw new IllegalStateException("Source InputStream is null!");
}
state = State.active;
notifyProgressListenersStarted();
OutputStream outputStream = null;
try {