X-Git-Url: https://git.hedgecode.org/?p=chesshog-scanner.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fhedgecode%2Fchess%2Fscanner%2Fproxy%2Fclient%2FSocksRequestClient.java;fp=src%2Fmain%2Fjava%2Forg%2Fhedgecode%2Fchess%2Fscanner%2Fproxy%2Fclient%2FSocksRequestClient.java;h=44170e9ea982ce8822c516f3c9561d9f80182666;hp=0000000000000000000000000000000000000000;hb=70d45ca74e19c98d0bef2a081f77fc1e3543691e;hpb=6e3a8590a26312b6cea579777db885107cae88df diff --git a/src/main/java/org/hedgecode/chess/scanner/proxy/client/SocksRequestClient.java b/src/main/java/org/hedgecode/chess/scanner/proxy/client/SocksRequestClient.java new file mode 100644 index 0000000..44170e9 --- /dev/null +++ b/src/main/java/org/hedgecode/chess/scanner/proxy/client/SocksRequestClient.java @@ -0,0 +1,99 @@ +/* + * 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; + } + +}