Issue 122: add proxy config to default http provider

This commit is contained in:
Adrian Cole 2010-03-17 09:27:39 -07:00
parent 785ce56d3f
commit d670ecfa6d
4 changed files with 119 additions and 5 deletions

View File

@ -87,6 +87,31 @@ public interface Constants {
* Whether or not to use the proxy setup from the underlying operating system. * Whether or not to use the proxy setup from the underlying operating system.
*/ */
public static final String PROPERTY_PROXY_SYSTEM = "jclouds.use_system_proxy"; public static final String PROPERTY_PROXY_SYSTEM = "jclouds.use_system_proxy";
/**
* String property.
* <p/>
*Explicitly sets the host name of a HTTP proxy server.
*/
public static final String PROPERTY_PROXY_HOST = "jclouds.proxy_host";
/**
* Integer property.
* <p/>
* Explicitly sets the port number of a HTTP proxy server.
*/
public static final String PROPERTY_PROXY_PORT = "jclouds.proxy_port";
/**
* String property.
* <p/>
* Explicitly sets the user name credential for proxy authentication.
*/
public static final String PROPERTY_PROXY_USER = "jclouds.proxy_user";
/**
* String property.
* <p/>
* Explicitly sets the password credential for proxy authentication.
*/
public static final String PROPERTY_PROXY_PASSWORD = "jclouds.proxy_password";
/** /**
* Integer property. * Integer property.
* <p/> * <p/>

View File

@ -26,7 +26,11 @@ import static org.jclouds.Constants.PROPERTY_MAX_CONNECTION_REUSE;
import static org.jclouds.Constants.PROPERTY_MAX_REDIRECTS; import static org.jclouds.Constants.PROPERTY_MAX_REDIRECTS;
import static org.jclouds.Constants.PROPERTY_MAX_RETRIES; import static org.jclouds.Constants.PROPERTY_MAX_RETRIES;
import static org.jclouds.Constants.PROPERTY_MAX_SESSION_FAILURES; import static org.jclouds.Constants.PROPERTY_MAX_SESSION_FAILURES;
import static org.jclouds.Constants.PROPERTY_PROXY_HOST;
import static org.jclouds.Constants.PROPERTY_PROXY_PASSWORD;
import static org.jclouds.Constants.PROPERTY_PROXY_PORT;
import static org.jclouds.Constants.PROPERTY_PROXY_SYSTEM; import static org.jclouds.Constants.PROPERTY_PROXY_SYSTEM;
import static org.jclouds.Constants.PROPERTY_PROXY_USER;
import static org.jclouds.Constants.PROPERTY_RELAX_HOSTNAME; import static org.jclouds.Constants.PROPERTY_RELAX_HOSTNAME;
import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT; import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT;
import static org.jclouds.Constants.PROPERTY_USER_THREADS; import static org.jclouds.Constants.PROPERTY_USER_THREADS;
@ -59,6 +63,38 @@ public abstract class PropertiesBuilder {
return this; return this;
} }
/**
* @see org.jclouds.Constants.PROPERTY_PROXY_HOST
*/
public PropertiesBuilder withProxyHost(String proxyHost) {
properties.setProperty(PROPERTY_PROXY_HOST, proxyHost);
return this;
}
/**
* @see org.jclouds.Constants.PROPERTY_PROXY_PORT
*/
public PropertiesBuilder withProxyPort(int proxyPort) {
properties.setProperty(PROPERTY_PROXY_PORT, Integer.toString(proxyPort));
return this;
}
/**
* @see org.jclouds.Constants.PROPERTY_PROXY_USER
*/
public PropertiesBuilder withProxyUser(String proxyUser) {
properties.setProperty(PROPERTY_PROXY_USER, proxyUser);
return this;
}
/**
* @see org.jclouds.Constants.PROPERTY_PROXY_PASSWORD
*/
public PropertiesBuilder withProxyPassword(String proxyPassword) {
properties.setProperty(PROPERTY_PROXY_PASSWORD, proxyPassword);
return this;
}
/** /**
* @see org.jclouds.Constants.PROPERTY_SO_TIMEOUT * @see org.jclouds.Constants.PROPERTY_SO_TIMEOUT
*/ */

View File

@ -74,6 +74,18 @@ public class HttpUtils {
private final int globalMaxConnectionsPerHost; private final int globalMaxConnectionsPerHost;
private final int connectionTimeout; private final int connectionTimeout;
private final int soTimeout; private final int soTimeout;
@Inject(optional = true)
@Named(Constants.PROPERTY_PROXY_HOST)
private String proxyHost;
@Inject(optional = true)
@Named(Constants.PROPERTY_PROXY_PORT)
private Integer proxyPort;
@Inject(optional = true)
@Named(Constants.PROPERTY_PROXY_USER)
private String proxyUser;
@Inject(optional = true)
@Named(Constants.PROPERTY_PROXY_PASSWORD)
private String proxyPassword;
@Inject @Inject
public HttpUtils(@Named(Constants.PROPERTY_CONNECTION_TIMEOUT) int connectionTimeout, public HttpUtils(@Named(Constants.PROPERTY_CONNECTION_TIMEOUT) int connectionTimeout,
@ -86,6 +98,34 @@ public class HttpUtils {
this.globalMaxConnectionsPerHost = globalMaxConnectionsPerHost; this.globalMaxConnectionsPerHost = globalMaxConnectionsPerHost;
} }
/**
* @see org.jclouds.Constants.PROPERTY_PROXY_HOST
*/
public String getProxyHost() {
return proxyHost;
}
/**
* @see org.jclouds.Constants.PROPERTY_PROXY_PORT
*/
public Integer getProxyPort() {
return proxyPort;
}
/**
* @see org.jclouds.Constants.PROPERTY_PROXY_USER
*/
public String getProxyUser() {
return proxyUser;
}
/**
* @see org.jclouds.Constants.PROPERTY_PROXY_PASSWORD
*/
public String getProxyPassword() {
return proxyPassword;
}
public int getSocketOpenTimeout() { public int getSocketOpenTimeout() {
return soTimeout; return soTimeout;
} }

View File

@ -23,9 +23,13 @@ import java.io.FilterInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy; import java.net.Proxy;
import java.net.ProxySelector; import java.net.ProxySelector;
import java.net.SocketAddress;
import java.net.URL; import java.net.URL;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -106,7 +110,6 @@ public class JavaUrlHttpCommandExecutorService extends
return response; return response;
} }
public InputStream consumeOnClose(InputStream in) { public InputStream consumeOnClose(InputStream in) {
return new ConsumeOnCloseInputStream(in); return new ConsumeOnCloseInputStream(in);
} }
@ -138,7 +141,6 @@ public class JavaUrlHttpCommandExecutorService extends
} }
private InputStream bufferAndCloseStream(InputStream inputStream) throws IOException { private InputStream bufferAndCloseStream(InputStream inputStream) throws IOException {
InputStream in = null; InputStream in = null;
try { try {
@ -161,6 +163,17 @@ public class JavaUrlHttpCommandExecutorService extends
Iterable<Proxy> proxies = ProxySelector.getDefault().select(request.getEndpoint()); Iterable<Proxy> proxies = ProxySelector.getDefault().select(request.getEndpoint());
Proxy proxy = Iterables.getLast(proxies); Proxy proxy = Iterables.getLast(proxies);
connection = (HttpURLConnection) url.openConnection(proxy); connection = (HttpURLConnection) url.openConnection(proxy);
} else if (utils.getProxyHost() != null) {
SocketAddress addr = new InetSocketAddress(utils.getProxyHost(), utils.getProxyPort());
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
Authenticator authenticator = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return (new PasswordAuthentication(utils.getProxyUser(), utils.getProxyPassword()
.toCharArray()));
}
};
Authenticator.setDefault(authenticator);
connection = (HttpURLConnection) url.openConnection(proxy);
} else { } else {
connection = (HttpURLConnection) url.openConnection(); connection = (HttpURLConnection) url.openConnection();
} }