diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/JingleFileTransferManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/JingleFileTransferManager.java index 1deb8464e..333305363 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/JingleFileTransferManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/JingleFileTransferManager.java @@ -21,14 +21,12 @@ import org.jivesoftware.smackx.jft.listener.IncomingFileRequestListener; import org.jivesoftware.smackx.jft.provider.JingleFileTransferProvider; import org.jivesoftware.smackx.jingle.JingleDescriptionManager; import org.jivesoftware.smackx.jingle.JingleManager; -import org.jivesoftware.smackx.jingle.util.Role; -import org.jivesoftware.smackx.jingle.callbacks.ContentAddCallback; -import org.jivesoftware.smackx.jingle.element.JingleContentElement; -import org.jivesoftware.smackx.jingle.element.JingleElement; +import org.jivesoftware.smackx.jingle.JingleTransportManager; import org.jivesoftware.smackx.jingle.components.JingleContent; import org.jivesoftware.smackx.jingle.components.JingleSession; +import org.jivesoftware.smackx.jingle.element.JingleContentElement; import org.jivesoftware.smackx.jingle.provider.JingleContentProviderManager; -import org.jivesoftware.smackx.jingle.JingleTransportManager; +import org.jivesoftware.smackx.jingle.util.Role; import org.jxmpp.jid.FullJid; @@ -126,7 +124,14 @@ public final class JingleFileTransferManager extends Manager implements JingleDe } @Override - public JingleElement notifyContentListeners(JingleContent content, ContentAddCallback callback) { + public void notifySessionInitiate(JingleSession session) { + JingleContent content = session.getSoleContentOrThrow(); + AbstractJingleFileTransfer transfer = (AbstractJingleFileTransfer) content.getDescription(); + if (transfer.isOffer()) { + notifyIncomingFileOfferListeners((JingleIncomingFileOffer) transfer); + } else { + notifyIncomingFileRequestListeners((JingleIncomingFileRequest) transfer); + } } } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/callback/IncomingFileOfferCallback.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/callback/IncomingFileOfferCallback.java new file mode 100644 index 000000000..c7d091860 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/callback/IncomingFileOfferCallback.java @@ -0,0 +1,27 @@ +package org.jivesoftware.smackx.jft.callback; + +import java.io.File; + +import org.jivesoftware.smackx.jft.controller.IncomingFileOfferController; +import org.jivesoftware.smackx.jingle.callbacks.JingleCallback; + +/** + * Created by vanitas on 27.07.17. + */ +public interface IncomingFileOfferCallback extends JingleCallback { + + @Override + IncomingFileOfferController accept(Destination destination); + + class Destination extends JingleCallback.Parameters { + private final File destination; + + public Destination(File destination) { + this.destination = destination; + } + + public File getDestination() { + return destination; + } + } +} diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/controller/IncomingFileOfferController.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/controller/IncomingFileOfferController.java index 0fa0db0e7..2f0e36810 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/controller/IncomingFileOfferController.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/controller/IncomingFileOfferController.java @@ -1,9 +1,10 @@ package org.jivesoftware.smackx.jft.controller; -import org.jivesoftware.smackx.jingle.controller.JingleDescriptionController; +import org.jivesoftware.smackx.jingle.JingleDescriptionController; /** * Created by vanitas on 27.07.17. */ public interface IncomingFileOfferController extends JingleDescriptionController { + } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/controller/IncomingFileRequestController.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/controller/IncomingFileRequestController.java index fbb0c07c6..fdb7527b2 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/controller/IncomingFileRequestController.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/controller/IncomingFileRequestController.java @@ -1,6 +1,6 @@ package org.jivesoftware.smackx.jft.controller; -import org.jivesoftware.smackx.jingle.controller.JingleDescriptionController; +import org.jivesoftware.smackx.jingle.JingleDescriptionController; /** * Created by vanitas on 27.07.17. diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/internal/AbstractJingleFileTransfer.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/internal/AbstractJingleFileTransfer.java index 5d91fda6e..aea876979 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/internal/AbstractJingleFileTransfer.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jft/internal/AbstractJingleFileTransfer.java @@ -11,4 +11,7 @@ public abstract class AbstractJingleFileTransfer extends JingleDescription { + + JingleDescriptionController accept(P parameters); + + void decline(); + + class Parameters { + + } +} diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleContent.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleContent.java index 69cd5f9f0..760b35e55 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleContent.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleContent.java @@ -260,7 +260,7 @@ public class JingleContent { connection.createStanzaCollectorAndSend(transportReplace).nextResultOrThrow(); } - public void onContentAccept(XMPPConnection connection, ) + public void onContentAccept(XMPPConnection connection) throws SmackException.NotConnectedException, InterruptedException { //Establish transport if (isReceiving()) { diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleSecurityBytestreamSession.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleSecurityBytestreamSession.java new file mode 100644 index 000000000..36413adaf --- /dev/null +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleSecurityBytestreamSession.java @@ -0,0 +1,27 @@ +package org.jivesoftware.smackx.jingle.components; + +import java.io.IOException; + +import org.jivesoftware.smackx.bytestreams.BytestreamSession; + +/** + * Created by vanitas on 27.07.17. + */ +public abstract class JingleSecurityBytestreamSession implements BytestreamSession { + + protected BytestreamSession wrapped; + + @Override + public int getReadTimeout() throws IOException { + return wrapped.getReadTimeout(); + } + + @Override + public void setReadTimeout(int timeout) throws IOException { + wrapped.setReadTimeout(timeout); + } + + public JingleSecurityBytestreamSession(BytestreamSession session) { + this.wrapped = session; + } +} diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleSession.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleSession.java index b0ca69bea..6e62077eb 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleSession.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/components/JingleSession.java @@ -81,6 +81,26 @@ public class JingleSession { addContent(JingleContent.fromElement(content)); } + public ConcurrentHashMap getContents() { + return contents; + } + + public JingleContent getContent(String name) { + return contents.get(name); + } + + public JingleContent getSoleContentOrThrow() { + if (contents.isEmpty()) { + return null; + } + + if (contents.size() > 1) { + throw new IllegalStateException(); + } + + return contents.values().iterator().next(); + } + public static JingleSession fromSessionInitiate(JingleManager manager, JingleElement initiate) throws UnsupportedSecurityException, UnsupportedDescriptionException, UnsupportedTransportException { if (initiate.getAction() != JingleAction.session_initiate) { diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/controller/JingleDescriptionController.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/controller/JingleDescriptionController.java deleted file mode 100644 index 12746ac93..000000000 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/controller/JingleDescriptionController.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.jivesoftware.smackx.jingle.controller; - -/** - * Created by vanitas on 27.07.17. - */ -public interface JingleDescriptionController { - -}