protected SocketFactory factory(final String target) {
final Proxy proxy = proxyFinder.find(new Host(protocol, target));
if(!types.contains(proxy.getType())) {
log.warn(String.format("Use of %s proxy is disabled for socket factory %s", proxy.getType(), this));
return new NetworkInterfaceAwareSocketFactory(new DefaultSocketFactory(), blacklisted);
}
switch(proxy.getType()) {
case SOCKS:
if(log.isInfoEnabled()) {
log.info(String.format("Configured to use SOCKS proxy %s", proxy));
}
final java.net.Proxy socksProxy = new java.net.Proxy(
java.net.Proxy.Type.SOCKS, new InetSocketAddress(proxy.getHostname(), proxy.getPort()));
return new NetworkInterfaceAwareSocketFactory(new DefaultSocketFactory(), blacklisted, socksProxy);
case HTTP:
case HTTPS:
if(log.isInfoEnabled()) {
log.info(String.format("Configured to use HTTP proxy %s", proxy));
}
final java.net.Proxy httpProxy = new java.net.Proxy(
java.net.Proxy.Type.HTTP, new InetSocketAddress(proxy.getHostname(), proxy.getPort()));
return new NetworkInterfaceAwareSocketFactory(new HttpProxySocketFactory(httpProxy), blacklisted, httpProxy);
}
return new NetworkInterfaceAwareSocketFactory(new DefaultSocketFactory(), blacklisted);
}