From 525db827a9ba01d4811bc5a258283ab4072a35e6 Mon Sep 17 00:00:00 2001 From: Vshnv Date: Mon, 29 Mar 2021 19:01:42 +0530 Subject: [PATCH] Added support for Java's Proxy class in ProxyInfo --- .../jivesoftware/smack/proxy/ProxyInfo.java | 40 +++++++++++++------ .../smack/proxy/ProxySocketConnection.java | 14 +++++++ 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxyInfo.java b/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxyInfo.java index 005101190..402a106a4 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxyInfo.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxyInfo.java @@ -16,6 +16,10 @@ */ package org.jivesoftware.smack.proxy; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.SocketAddress; + /** * Class which stores proxy information such as proxy type, host, port, * authentication etc. @@ -44,19 +48,10 @@ public class ProxyInfo { this.proxyPort = pPort; this.proxyUsername = pUser; this.proxyPassword = pPass; - switch (proxyType) { - case HTTP: - proxySocketConnection = new HTTPProxySocketConnection(this); - break; - case SOCKS4: - proxySocketConnection = new Socks4ProxySocketConnection(this); - break; - case SOCKS5: - proxySocketConnection = new Socks5ProxySocketConnection(this); - break; - default: - throw new IllegalStateException(); - } + this.proxySocketConnection = + ProxySocketConnection + .forProxyType(proxyType) + .apply(this); } public static ProxyInfo forHttpProxy(String pHost, int pPort, String pUser, @@ -74,6 +69,18 @@ public class ProxyInfo { return new ProxyInfo(ProxyType.SOCKS5, pHost, pPort, pUser, pPass); } + public Proxy.Type getJavaProxyType() { + switch (proxyType) { + case HTTP: + return Proxy.Type.HTTP; + case SOCKS4: + case SOCKS5: + return Proxy.Type.SOCKS; + default: + throw new AssertionError("Invalid proxy type: " + proxyType); + } + } + public ProxyType getProxyType() { return proxyType; } @@ -97,4 +104,11 @@ public class ProxyInfo { public ProxySocketConnection getProxySocketConnection() { return proxySocketConnection; } + + public Proxy toJavaProxy() { + final SocketAddress proxySocketAddress = new InetSocketAddress(proxyAddress, proxyPort); + final Proxy.Type type = getJavaProxyType(); + return new Proxy(type, proxySocketAddress); + } + } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxySocketConnection.java b/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxySocketConnection.java index 7f31f94dc..beaf0ebad 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxySocketConnection.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxySocketConnection.java @@ -19,6 +19,8 @@ package org.jivesoftware.smack.proxy; import java.io.IOException; import java.net.Socket; +import org.jivesoftware.smack.util.Function; + public interface ProxySocketConnection { /** @@ -34,4 +36,16 @@ public interface ProxySocketConnection { void connect(Socket socket, String host, int port, int timeout) throws IOException; + static Function forProxyType(ProxyInfo.ProxyType proxyType) { + switch (proxyType) { + case HTTP: + return HTTPProxySocketConnection::new; + case SOCKS4: + return Socks4ProxySocketConnection::new; + case SOCKS5: + return Socks5ProxySocketConnection::new; + default: + throw new AssertionError("Unknown proxy type: " + proxyType); + } + } }