/* * Copyright (c) 2019-2020. Developed by Hedgecode. * * 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 org.hedgecode.chess.scanner.proxy.client; import java.net.InetSocketAddress; import java.util.HashMap; import java.util.Map; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.HttpClientConnectionManager; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.hedgecode.chess.scanner.ScannerConstants; import org.hedgecode.chess.scanner.proxy.ProxyParams; import org.hedgecode.chess.scanner.request.RequestClient; /** * SocksRequestClient * * @author Dmitry Samoshin aka gotty */ public class SocksRequestClient implements RequestClient { private final Map socketFactories = new HashMap() { { put( ScannerConstants.PROXY_HTTP, new SocksSocketFactory() ); put( ScannerConstants.PROXY_HTTPS, new SSLSocksSocketFactory() ); } }; private final HttpClientConnectionManager connectionManager; private /*final*/ HttpClientContext clientContext; private final InetSocketAddress proxySocketAddress; public SocksRequestClient(ProxyParams params) { RegistryBuilder registryBuilder = RegistryBuilder.create(); for (Map.Entry socketFactory : socketFactories.entrySet()) { registryBuilder.register( socketFactory.getKey(), socketFactory.getValue() ); } connectionManager = new PoolingHttpClientConnectionManager( registryBuilder.build(), new LocalDnsResolver() ); proxySocketAddress = new InetSocketAddress( params.getHost(), params.getPort() ); /* clientContext = HttpClientContext.create(); clientContext.setAttribute( ScannerConstants.PROXY_SOCKS_ADDRESS, new InetSocketAddress( params.getHost(), params.getPort() ) ); */ } @Override public CloseableHttpClient getClient() { return HttpClients.custom() .setConnectionManager(connectionManager) .build(); } @Override public HttpClientContext getContext() { clientContext = HttpClientContext.create(); clientContext.setAttribute( ScannerConstants.PROXY_SOCKS_ADDRESS, proxySocketAddress ); return clientContext; } }