mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-11-23 20:42:06 +01:00
Work on file transfer listeners
This commit is contained in:
parent
980c324f27
commit
5ce12974c8
12 changed files with 109 additions and 45 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<IncomingFileOfferCallback.Destination> {
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 {
|
||||
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -11,4 +11,7 @@ public abstract class AbstractJingleFileTransfer extends JingleDescription<Jingl
|
|||
public static final String NAMESPACE_V5 = "urn:xmpp:jingle:apps:file-transfer:5";
|
||||
public static final String NAMESPACE = NAMESPACE_V5;
|
||||
|
||||
public abstract boolean isOffer();
|
||||
public abstract boolean isRequest();
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ package org.jivesoftware.smackx.jingle;
|
|||
* Created by vanitas on 27.07.17.
|
||||
*/
|
||||
public interface JingleDescriptionController {
|
||||
|
||||
enum State {
|
||||
pending, //Not yet accepted by us/peer
|
||||
negotiating, //Accepted, but still negotiating transports etc.
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2017 Paul Schaub
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jivesoftware.smackx.jingle.callbacks;
|
||||
|
||||
/**
|
||||
* Callback that gets called when the user accepts a content-add request.
|
||||
*/
|
||||
public interface ContentAddCallback {
|
||||
|
||||
void acceptContentAdd();
|
||||
|
||||
void rejectContentAdd();
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package org.jivesoftware.smackx.jingle.callbacks;
|
||||
|
||||
import org.jivesoftware.smackx.jingle.JingleDescriptionController;
|
||||
|
||||
/**
|
||||
* Created by vanitas on 27.07.17.
|
||||
*/
|
||||
public interface JingleCallback<P extends JingleCallback.Parameters> {
|
||||
|
||||
JingleDescriptionController accept(P parameters);
|
||||
|
||||
void decline();
|
||||
|
||||
class Parameters {
|
||||
|
||||
}
|
||||
}
|
|
@ -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()) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -81,6 +81,26 @@ public class JingleSession {
|
|||
addContent(JingleContent.fromElement(content));
|
||||
}
|
||||
|
||||
public ConcurrentHashMap<String, JingleContent> 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) {
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
package org.jivesoftware.smackx.jingle.controller;
|
||||
|
||||
/**
|
||||
* Created by vanitas on 27.07.17.
|
||||
*/
|
||||
public interface JingleDescriptionController {
|
||||
|
||||
}
|
Loading…
Reference in a new issue