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

Add JingleTransportSession classes

This commit is contained in:
vanitasvitae 2017-06-23 22:48:28 +02:00
parent ab82a58e0f
commit 136af25342
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
17 changed files with 584 additions and 232 deletions

View file

@ -29,8 +29,8 @@ import org.jivesoftware.smackx.jingle.JingleTransportMethodManager;
import org.jivesoftware.smackx.jingle.Role;
import org.jivesoftware.smackx.jingle.element.Jingle;
import org.jivesoftware.smackx.jingle.element.JingleContent;
import org.jivesoftware.smackx.jingle.element.JingleContentTransport;
import org.jivesoftware.smackx.jingle.transports.JingleTransportInitiationCallback;
import org.jivesoftware.smackx.jingle.transports.JingleTransportManager;
import org.jivesoftware.smackx.jingle_filetransfer.callback.IncomingFileOfferCallback;
import org.jivesoftware.smackx.jingle_filetransfer.element.JingleFileTransfer;
@ -49,8 +49,7 @@ public class IncomingJingleFileOffer extends JingleFileTransferSession implement
pending,
sent_transport_replace,
active,
terminated,
;
terminated
}
private State state;
@ -78,9 +77,8 @@ public class IncomingJingleFileOffer extends JingleFileTransferSession implement
this.creator = content.getCreator();
this.file = (JingleFileTransfer) content.getDescription();
this.name = content.getName();
this.transport = content.getJingleTransport();
this.transportManager = tm.getTransportManager(initiate);
JingleTransportManager<?> transportManager = tm.getTransportManager(initiate);
if (transportManager == null) {
//Try fallback.
pendingSessionInitiate = initiate;
@ -94,13 +92,16 @@ public class IncomingJingleFileOffer extends JingleFileTransferSession implement
return jutil.createAck(initiate);
}
transport = transportManager.createTransport(getInitiator());
transportSession = transportManager.transportSession(this);
jutil.sendTransportReplace(initiate.getFrom().asFullJidOrThrow(), initiate.getInitiator(),
initiate.getSid(), creator, name, transport);
initiate.getSid(), creator, name, transportSession.createTransport());
state = State.sent_transport_replace;
return jutil.createAck(initiate);
}
transportSession = transportManager.transportSession(this);
transportSession.setRemoteTransport(initiate.getContents().get(0).getJingleTransport());
JingleFileTransferManager.getInstanceFor(connection).notifyIncomingFileOffer(initiate, this);
state = State.pending;
return jutil.createAck(initiate);
@ -115,15 +116,15 @@ public class IncomingJingleFileOffer extends JingleFileTransferSession implement
}
JingleFileTransferManager.getInstanceFor(connection).notifyIncomingFileOffer(pendingSessionInitiate, this);
transport = transportAccept.getContents().get(0).getJingleTransport();
transportSession.setRemoteTransport(transportAccept.getContents().get(0).getJingleTransport());
state = State.pending;
return jutil.createAck(transportAccept);
}
@Override
public void acceptIncomingFileOffer(Jingle request, final File target) {
public void acceptIncomingFileOffer(final Jingle request, final File target) {
LOGGER.log(Level.INFO, "Client accepted incoming file offer. Try to start receiving.");
if (transportManager == null) {
if (transportSession == null) {
//Unsupported transport
LOGGER.log(Level.WARNING, "Unsupported Transport method.");
try {
@ -134,13 +135,12 @@ public class IncomingJingleFileOffer extends JingleFileTransferSession implement
return;
}
final JingleContentTransport transport = transportManager.createTransport(request);
tasks.add(new Runnable() {
queued.add(threadPool.submit(new Runnable() {
@Override
public void run() {
try {
state = State.active;
transportManager.initiateIncomingSession(getInitiator(), transport, new JingleTransportInitiationCallback() {
transportSession.initiateIncomingSession(new JingleTransportInitiationCallback() {
@Override
public void onSessionInitiated(BytestreamSession bytestreamSession) {
receivingThread = new ReceivingThread(bytestreamSession, file, target);
@ -152,12 +152,12 @@ public class IncomingJingleFileOffer extends JingleFileTransferSession implement
}
});
jutil.sendSessionAccept(getInitiator(), sid, creator, name, JingleContent.Senders.initiator, file, transport);
jutil.sendSessionAccept(getInitiator(), sid, creator, name, JingleContent.Senders.initiator, file, transportSession.createTransport());
} catch (SmackException.NotConnectedException | SmackException.NoResponseException | XMPPException.XMPPErrorException | InterruptedException e) {
LOGGER.log(Level.SEVERE, "Could not send session-accept: " + e, e);
}
}
});
}));
}
@Override

View file

@ -34,7 +34,7 @@ public class JingleFileRequest extends JingleFileTransferSession {
public static JingleFileRequest createOutgoingFileRequest(XMPPConnection connection, FullJid recipient) {
return new JingleFileRequest(connection, connection.getUser().asFullJidOrThrow(), recipient, Role.initiator,
JingleManager.randomSid());
JingleManager.randomId());
}
public static JingleFileRequest createIncomingFileRequest(XMPPConnection connection, Jingle request) {

View file

@ -21,8 +21,6 @@ import org.jivesoftware.smackx.jingle.JingleSession;
import org.jivesoftware.smackx.jingle.JingleUtil;
import org.jivesoftware.smackx.jingle.Role;
import org.jivesoftware.smackx.jingle.element.JingleContent;
import org.jivesoftware.smackx.jingle.element.JingleContentTransport;
import org.jivesoftware.smackx.jingle.transports.JingleTransportManager;
import org.jivesoftware.smackx.jingle_filetransfer.element.JingleFileTransfer;
import org.jxmpp.jid.FullJid;
@ -44,8 +42,6 @@ public abstract class JingleFileTransferSession extends JingleSession {
protected JingleContent.Creator creator;
protected String name;
protected JingleFileTransfer file;
protected JingleContentTransport transport;
protected JingleTransportManager<?> transportManager;
private final Type type;
@ -75,4 +71,9 @@ public abstract class JingleFileTransferSession extends JingleSession {
public boolean isReceiver() {
return (isRequest() && isInitiator()) || (isOffer() && isResponder());
}
@Override
public XMPPConnection getConnection() {
return connection;
}
}

View file

@ -48,8 +48,8 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession {
pending,
sent_transport_replace,
active,
terminated,
;}
terminated
}
private Thread sendingThread;
private File source;
@ -62,13 +62,13 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession {
}
public OutgoingJingleFileOffer(XMPPConnection connection, FullJid recipient) {
this(connection, recipient, JingleManager.randomSid());
this(connection, recipient, JingleManager.randomId());
}
public void send(File file) throws InterruptedException, XMPPException.XMPPErrorException,
SmackException.NotConnectedException, SmackException.NoResponseException {
source = file;
String contentName = JingleManager.randomSid();
String contentName = JingleManager.randomId();
JingleFileTransfer transfer = JingleFileTransferManager.fileTransferFromFile(file);
initiateFileOffer(transfer, JingleContent.Creator.initiator, contentName);
@ -79,18 +79,18 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession {
throw new IllegalStateException("This session is not fresh.");
}
transportManager = JingleTransportMethodManager.getInstanceFor(connection)
JingleTransportManager<?> transportManager = JingleTransportMethodManager.getInstanceFor(connection)
.getBestAvailableTransportManager();
if (transportManager == null) {
throw new IllegalStateException("There must be at least one workable transport method.");
}
transport = transportManager.createTransport(getResponder());
transportSession = transportManager.transportSession(this);
state = State.pending;
jutil.sendSessionInitiateFileOffer(getResponder(), getSessionId(), creator, name, file, transport);
jutil.sendSessionInitiateFileOffer(getResponder(), getSessionId(), creator, name, file, transportSession.createTransport());
}
@Override
@ -103,10 +103,10 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession {
LOGGER.log(Level.INFO, "Session was accepted. Initiate Bytestream.");
state = State.active;
tasks.add(new Runnable() {
queued.add(threadPool.submit(new Runnable() {
@Override
public void run() {
transportManager.initiateOutgoingSession(getResponder(), transport, new JingleTransportInitiationCallback() {
transportSession.initiateOutgoingSession(new JingleTransportInitiationCallback() {
@Override
public void onSessionInitiated(final BytestreamSession session) {
LOGGER.log(Level.INFO, "BytestreamSession initiated. Start transfer.");
@ -120,7 +120,7 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession {
}
});
}
});
}));
return jutil.createAck(sessionAccept);
}
@ -147,7 +147,7 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession {
final JingleTransportManager<?> replacementManager = JingleTransportMethodManager.getInstanceFor(connection)
.getTransportManager(transportReplace);
tasks.add(new Runnable() {
queued.add(threadPool.submit(new Runnable() {
@Override
public void run() {
try {
@ -155,7 +155,7 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession {
LOGGER.log(Level.INFO, "Accept transport-replace.");
jutil.sendTransportAccept(transportReplace.getFrom().asFullJidOrThrow(),
transportReplace.getInitiator(), transportReplace.getSid(), creator, name,
replacementManager.createTransport(getResponder()));
transportSession.createTransport());
} else {
LOGGER.log(Level.INFO, "Unsupported transport. Reject transport-replace.");
jutil.sendTransportReject(transportReplace.getFrom().asFullJidOrThrow(), transportReplace.getInitiator(),
@ -165,7 +165,7 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession {
LOGGER.log(Level.SEVERE, "Help me please!", e);
}
}
});
}));
return jutil.createAck(transportReplace);
}