From 6c0162c341c06e870daed0181e56d01de58f5d31 Mon Sep 17 00:00:00 2001 From: vanitasvitae Date: Thu, 8 Jun 2017 16:46:39 +0200 Subject: [PATCH] Reuse S5B-Managers discovery methods --- ...ingleSocks5BytestreamTransportManager.java | 43 +++++-------------- ...gleSocks5BytestreamTransportCandidate.java | 11 +++++ .../socks5/Socks5BytestreamManager.java | 6 +-- 3 files changed, 24 insertions(+), 36 deletions(-) diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportManager.java index 55129354b..51138b2e1 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/JingleSocks5BytestreamTransportManager.java @@ -17,24 +17,20 @@ package org.jivesoftware.smackx.jingle_s5b; import java.io.OutputStream; -import java.util.ArrayList; import java.util.List; import org.jivesoftware.smack.SmackException; -import org.jivesoftware.smack.StanzaListener; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; -import org.jivesoftware.smack.packet.Stanza; +import org.jivesoftware.smackx.bytestreams.socks5.Socks5BytestreamManager; import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream; -import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; -import org.jivesoftware.smackx.disco.packet.DiscoverInfo; -import org.jivesoftware.smackx.disco.packet.DiscoverItems; import org.jivesoftware.smackx.jingle.AbstractJingleContentTransportManager; import org.jivesoftware.smackx.jingle.JingleTransportInputStreamCallback; import org.jivesoftware.smackx.jingle.element.Jingle; import org.jivesoftware.smackx.jingle.provider.JingleContentTransportProvider; import org.jivesoftware.smackx.jingle_s5b.elements.JingleSocks5BytestreamTransport; import org.jivesoftware.smackx.jingle_s5b.provider.JingleSocks5BytestreamTransportProvider; +import org.jxmpp.jid.Jid; /** * Manager for JingleSocks5BytestreamTransports. @@ -45,34 +41,15 @@ public final class JingleSocks5BytestreamTransportManager extends AbstractJingle super(connection); } - public ArrayList getProxyIdentities() throws XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException { - final ArrayList streamHosts = new ArrayList<>(); - DiscoverInfo.Feature bytestreams = new DiscoverInfo.Feature(Bytestream.NAMESPACE); - ServiceDiscoveryManager dm = ServiceDiscoveryManager.getInstanceFor(connection()); - DiscoverItems disco = dm.discoverItems(connection().getXMPPServiceDomain()); + public List getAvailableStreamHosts() throws XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException { + Socks5BytestreamManager s5m = Socks5BytestreamManager.getBytestreamManager(connection()); + List proxies = s5m.determineProxies(); + return s5m.determineStreamHostInfos(proxies); + } - for (DiscoverItems.Item item : disco.getItems()) { - DiscoverInfo info = dm.discoverInfo(item.getEntityID()); - if (!info.getFeatures().contains(bytestreams)) { - continue; - } - List identities = info.getIdentities("proxy", "bytestreams"); - if (identities.isEmpty()) { - continue; - } - Bytestream b = new Bytestream(); - b.setTo(item.getEntityID()); - connection().sendIqWithResponseCallback(b, new StanzaListener() { - @Override - public void processStanza(Stanza packet) throws SmackException.NotConnectedException, InterruptedException { - Bytestream result = (Bytestream) packet; - if (result != null) { - streamHosts.addAll(result.getStreamHosts()); - } - } - }); - } - return streamHosts; + public List getLocalStreamHosts() { + return Socks5BytestreamManager.getBytestreamManager(connection()) + .getLocalStreamHost(); } @Override diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidate.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidate.java index a0b76112b..af3e50a03 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidate.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_s5b/elements/JingleSocks5BytestreamTransportCandidate.java @@ -20,6 +20,8 @@ import java.util.logging.Logger; import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.XmlStringBuilder; +import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream; +import org.jivesoftware.smackx.jingle.JingleTransportManager; import org.jivesoftware.smackx.jingle.element.JingleContentTransportCandidate; import org.jxmpp.jid.Jid; import org.jxmpp.jid.impl.JidCreate; @@ -55,6 +57,15 @@ public final class JingleSocks5BytestreamTransportCandidate extends JingleConten this.type = type; } + public JingleSocks5BytestreamTransportCandidate(Bytestream.StreamHost streamHost, int priority) { + this.cid = JingleTransportManager.generateSessionId(); + this.host = streamHost.getAddress(); + this.jid = streamHost.getJID(); + this.port = streamHost.getPort(); + this.priority = priority; + this.type = Type.proxy; + } + public enum Type { assisted (120), direct (126), diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/Socks5BytestreamManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/Socks5BytestreamManager.java index e4eeb8f63..d0caa14d2 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/Socks5BytestreamManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/Socks5BytestreamManager.java @@ -536,7 +536,7 @@ public final class Socks5BytestreamManager extends Manager implements Bytestream * @throws NotConnectedException * @throws InterruptedException */ - private List determineProxies() throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { + public List determineProxies() throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { XMPPConnection connection = connection(); ServiceDiscoveryManager serviceDiscoveryManager = ServiceDiscoveryManager.getInstanceFor(connection); @@ -585,7 +585,7 @@ public final class Socks5BytestreamManager extends Manager implements Bytestream * @param proxies a list of SOCKS5 proxy JIDs * @return a list of stream hosts containing the IP address an the port */ - private List determineStreamHostInfos(List proxies) { + public List determineStreamHostInfos(List proxies) { XMPPConnection connection = connection(); List streamHosts = new ArrayList(); @@ -632,7 +632,7 @@ public final class Socks5BytestreamManager extends Manager implements Bytestream * @return the stream host information of the local SOCKS5 proxy or null if local SOCKS5 proxy * is not running */ - private List getLocalStreamHost() { + public List getLocalStreamHost() { XMPPConnection connection = connection(); // get local proxy singleton Socks5Proxy socks5Server = Socks5Proxy.getSocks5Proxy();