From 2c3333d61cf01c34d23babd567e17324feed1f9f Mon Sep 17 00:00:00 2001 From: Jeroen van Erp Date: Tue, 21 Feb 2023 09:36:11 +0100 Subject: [PATCH] Add ProxySocketFactory --- .../sshj/common/ProxySocketFactory.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/main/java/com/hierynomus/sshj/common/ProxySocketFactory.java diff --git a/src/main/java/com/hierynomus/sshj/common/ProxySocketFactory.java b/src/main/java/com/hierynomus/sshj/common/ProxySocketFactory.java new file mode 100644 index 00000000..7f789850 --- /dev/null +++ b/src/main/java/com/hierynomus/sshj/common/ProxySocketFactory.java @@ -0,0 +1,78 @@ +/* + * Copyright (C)2009 - SSHJ Contributors + * + * 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 com.hierynomus.sshj.common; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.Socket; +import java.net.UnknownHostException; + +import javax.net.SocketFactory; + +/** + * A {@link SocketFactory} that creates sockets using a {@link Proxy}. + */ +class ProxySocketFactory extends SocketFactory { + + private Proxy proxy; + + public ProxySocketFactory(Proxy proxy) { + this.proxy = proxy; + } + + public ProxySocketFactory(Proxy.Type proxyType, InetSocketAddress proxyAddress) { + this(new Proxy(proxyType, proxyAddress)); + } + + @Override + public Socket createSocket() throws IOException { + return new Socket(proxy); + } + + @Override + public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) + throws IOException { + Socket s = createSocket(); + s.bind(new InetSocketAddress(localAddress, localPort)); + s.connect(new InetSocketAddress(address, port)); + return s; + } + + @Override + public Socket createSocket(InetAddress host, int port) throws IOException { + Socket s = createSocket(); + s.connect(new InetSocketAddress(host, port)); + return s; + } + + @Override + public Socket createSocket(String host, int port) throws IOException, UnknownHostException { + Socket s = createSocket(); + s.connect(new InetSocketAddress(host, port)); + return s; + } + + @Override + public Socket createSocket(String host, int port, InetAddress localHost, int localPort) + throws IOException, UnknownHostException { + Socket s = createSocket(); + s.bind(new InetSocketAddress(localHost, localPort)); + s.connect(new InetSocketAddress(host, port)); + return s; + } +}