From 9207c21f37228f59199184cd668d0d81d88feaeb Mon Sep 17 00:00:00 2001 From: Seiji Sogabe Date: Sat, 17 Sep 2011 19:32:50 +0900 Subject: [PATCH] [FIXED JENKINS-5271] Tools download does not appear to respect proxy settings. --- core/src/main/java/hudson/FilePath.java | 2 +- .../main/java/hudson/ProxyConfiguration.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/FilePath.java b/core/src/main/java/hudson/FilePath.java index d45c7c992f..0ba9c3bcdb 100644 --- a/core/src/main/java/hudson/FilePath.java +++ b/core/src/main/java/hudson/FilePath.java @@ -655,7 +655,7 @@ public final class FilePath implements Serializable { listener.getLogger().println(message); // for HTTP downloads, enable automatic retry for added resilience - InputStream in = archive.getProtocol().equals("http") ? new RetryableHttpStream(archive) : con.getInputStream(); + InputStream in = archive.getProtocol().equals("http") ? ProxyConfiguration.getInputStream(archive) : con.getInputStream(); CountingInputStream cis = new CountingInputStream(in); try { if(archive.toExternalForm().endsWith(".zip")) diff --git a/core/src/main/java/hudson/ProxyConfiguration.java b/core/src/main/java/hudson/ProxyConfiguration.java index 1bcb4cfd15..47b03500e0 100644 --- a/core/src/main/java/hudson/ProxyConfiguration.java +++ b/core/src/main/java/hudson/ProxyConfiguration.java @@ -40,6 +40,8 @@ import java.net.URL; import java.net.URLConnection; import com.thoughtworks.xstream.XStream; +import java.io.InputStream; +import org.jvnet.robust_http_client.RetryableHttpStream; /** * HTTP proxy configuration. @@ -162,6 +164,30 @@ public final class ProxyConfiguration implements Saveable { return con; } + + public static InputStream getInputStream(URL url) throws IOException { + Jenkins h = Jenkins.getInstance(); // this code might run on slaves + final ProxyConfiguration p = (h != null) ? h.proxy : null; + if (p == null) + return new RetryableHttpStream(url); + + InputStream is = new RetryableHttpStream(url, p.createProxy()); + if (p.getUserName() != null) { + // Add an authenticator which provides the credentials for proxy authentication + Authenticator.setDefault(new Authenticator() { + + @Override + public PasswordAuthentication getPasswordAuthentication() { + if (getRequestorType() != RequestorType.PROXY) { + return null; + } + return new PasswordAuthentication(p.getUserName(), p.getPassword().toCharArray()); + } + }); + } + + return is; + } private static final XStream XSTREAM = new XStream2();