From ecd29a1ea848b45c95304626caf161a1feac7627 Mon Sep 17 00:00:00 2001 From: vanitasvitae Date: Wed, 21 Jun 2017 15:42:00 +0200 Subject: [PATCH] s5b createTransport --- .../IncomingJingleFileOffer.java | 2 +- .../OutgoingJingleFileOffer.java | 4 +- .../bytestreams/socks5/Socks5Utils.java | 2 +- .../transports/JingleTransportManager.java | 2 +- .../jingle_ibb/JingleIBBTransportManager.java | 2 +- .../jingle_s5b/JingleS5BTransportManager.java | 45 +++++++++++++++++-- 6 files changed, 48 insertions(+), 9 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 46e8311be..edd66e132 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 @@ -87,7 +87,7 @@ public class IncomingJingleFileOffer extends JingleFileTransferSession implement return jutil.createAck(initiate); } - transport = transportManager.createTransport(); + transport = transportManager.createTransport(getInitiator()); jutil.sendTransportReplace(initiate.getFrom().asFullJidOrThrow(), initiate.getInitiator(), initiate.getSid(), creator, name, transport); state = State.sent_transport_replace; 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 f7184d145..35851e75c 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 @@ -75,7 +75,7 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession { throw new IllegalStateException("There must be at least one workable transport method."); } - transport = transportManager.createTransport(); + transport = transportManager.createTransport(getResponder()); jutil.sendSessionInitiateFileOffer(getResponder(), getSessionId(), creator, name, file, transport); state = State.pending; @@ -130,7 +130,7 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession { if (replacementManager != null) { jutil.sendTransportAccept(transportReplace.getFrom().asFullJidOrThrow(), transportReplace.getInitiator(), transportReplace.getSid(), creator, name, - replacementManager.createTransport()); + replacementManager.createTransport(getResponder())); } return jutil.createAck(transportReplace); diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/Socks5Utils.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/Socks5Utils.java index 0053cf362..bca0c5727 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/Socks5Utils.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/Socks5Utils.java @@ -29,7 +29,7 @@ import org.jxmpp.jid.Jid; * * @author Henning Staib */ -class Socks5Utils { +public class Socks5Utils { /** * Returns a SHA-1 digest of the given parameters as specified in { public abstract String getNamespace(); - public abstract D createTransport(); + public abstract D createTransport(FullJid recipient); public abstract D createTransport(Jingle request); diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_ibb/JingleIBBTransportManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_ibb/JingleIBBTransportManager.java index a3cc7d66c..63a591a5a 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_ibb/JingleIBBTransportManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_ibb/JingleIBBTransportManager.java @@ -59,7 +59,7 @@ public final class JingleIBBTransportManager extends JingleTransportManager { + private static final Logger LOGGER = Logger.getLogger(JingleS5BTransportManager.class.getName()); + private static final WeakHashMap INSTANCES = new WeakHashMap<>(); private JingleS5BTransportManager(XMPPConnection connection) { @@ -62,15 +70,46 @@ public final class JingleS5BTransportManager extends JingleTransportManager localStreams = getLocalStreamHosts(); + List availableStreams; + try { + availableStreams = getAvailableStreamHosts(); + } catch (XMPPException.XMPPErrorException | SmackException.NoResponseException | InterruptedException | SmackException.NotConnectedException e) { + LOGGER.log(Level.WARNING, "Could not determine available StreamHosts: ", e); + availableStreams = Collections.emptyList(); + } + + for (Bytestream.StreamHost host : localStreams) { + JingleS5BTransportCandidate candidate = new JingleS5BTransportCandidate(host, 100); + builder.addTransportCandidate(candidate); + } + + for (Bytestream.StreamHost host : availableStreams) { + JingleS5BTransportCandidate candidate = new JingleS5BTransportCandidate(host, 0); + builder.addTransportCandidate(candidate); + } + + builder.setStreamId(sid); + builder.setMode(mode); + builder.setDestinationAddress(Socks5Utils.createDigest(sid, getConnection().getUser().asFullJidOrThrow(), remote)); + return builder.build(); + } + + @Override public void initiateOutgoingSession(FullJid remote, JingleContentTransport transport, JingleTransportInitiationCallback callback) {