Browse Source

extra proxy diagnostics, in a java1.5-only package. By abusing the toString() operation, we dont need any extra interfaces for this.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@370259 13f79535-47bb-0310-9956-ffa450edef68
master
Steve Loughran 19 years ago
parent
commit
3043b48186
5 changed files with 230 additions and 33 deletions
  1. +1
    -0
      build.xml
  2. +77
    -4
      src/main/org/apache/tools/ant/Diagnostics.java
  3. +29
    -28
      src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java
  4. +16
    -1
      src/main/org/apache/tools/ant/util/ProxySetup.java
  5. +107
    -0
      src/main/org/apache/tools/ant/util/java15/ProxyDiagnostics.java

+ 1
- 0
build.xml View File

@@ -165,6 +165,7 @@
<selector id="needs.jdk1.5+">
<or>
<filename name="${taskdefs.package}/AptTest*"/>
<filename name="${util.package}/java15/*"/>
</or>
</selector>



+ 77
- 4
src/main/org/apache/tools/ant/Diagnostics.java View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2005 The Apache Software Foundation
* Copyright 2002-2006 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,6 +19,8 @@ package org.apache.tools.ant;
import org.apache.tools.ant.util.LoaderUtils;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.JAXPUtils;
import org.apache.tools.ant.util.ProxySetup;
import org.apache.tools.ant.util.JavaEnvUtils;
import org.apache.tools.ant.launch.Launcher;
import org.xml.sax.XMLReader;

@@ -285,6 +287,10 @@ public final class Diagnostics {

header(out, "Locale information");
doReportLocale(out);
header(out, "Proxy information");
doReportProxy(out);
out.println();
}

@@ -413,7 +419,8 @@ public final class Diagnostics {
Class.forName(classname);
props.remove(key);
} catch (ClassNotFoundException e) {
out.println(key + " : Not Available");
out.println(key + " : Not Available "
+ "(the implementation class is not present)");
} catch (NoClassDefFoundError e) {
String pkg = e.getMessage().replace('/', '.');
out.println(key + " : Missing dependency " + pkg);
@@ -423,6 +430,9 @@ public final class Diagnostics {
}
if (props.size() == 0) {
out.println("All defined tasks are available");
} else {
out.println("A task being missing/unavailable should only "
+"matter if you are trying to use it");
}
} catch (IOException e) {
out.println(e.getMessage());
@@ -494,7 +504,7 @@ public final class Diagnostics {
tempFile.delete();
out.println("Temp dir is writeable");
long drift = filetime - now;
out.println("temp dir alignment with system clock is " + drift + " ms");
out.println("Temp dir alignment with system clock is " + drift + " ms");
if (Math.abs(drift) > BIG_DRIFT_LIMIT) {
out.println("Warning: big clock drift -maybe a network filesystem");
}
@@ -513,7 +523,7 @@ public final class Diagnostics {

/**
* Report locale information
* @param out
* @param out stream to print to
*/
private static void doReportLocale(PrintStream out) {
//calendar stuff.
@@ -530,4 +540,67 @@ public final class Diagnostics {
+ cal.get(Calendar.SECOND)) * SECONDS_PER_MILLISECOND
+ cal.get(Calendar.MILLISECOND)));
}

/**
* print a property name="value" pair, or name=[undefined] if there is none
* @param out
* @param name
*/
private static void printProperty(PrintStream out,String name) {
out.print(name);
out.print(" = ");
String value=System.getProperty(name);
if(value!=null) {
out.print('"');
out.print(value);
out.println('"');
} else {
out.println("[undefined]");
}
}

/**
* Report proxy information
*
* @param out stream to print to
*/
private static void doReportProxy(PrintStream out) {
if(JavaEnvUtils.getJavaVersionNumber()>=15) {
printProperty(out, ProxySetup.USE_SYSTEM_PROXIES);
}
printProperty(out,ProxySetup.HTTP_PROXY_HOST);
printProperty(out, ProxySetup.HTTP_PROXY_PORT);
printProperty(out, ProxySetup.HTTP_PROXY_USERNAME);
printProperty(out, ProxySetup.HTTP_PROXY_PASSWORD);
printProperty(out, ProxySetup.HTTP_NON_PROXY_HOSTS);
printProperty(out, ProxySetup.HTTPS_PROXY_HOST);
printProperty(out, ProxySetup.HTTPS_PROXY_PORT);
printProperty(out, ProxySetup.HTTPS_NON_PROXY_HOSTS);
printProperty(out, ProxySetup.FTP_PROXY_HOST);
printProperty(out, ProxySetup.FTP_PROXY_PORT);
printProperty(out, ProxySetup.FTP_NON_PROXY_HOSTS);
printProperty(out, ProxySetup.SOCKS_PROXY_HOST);
printProperty(out, ProxySetup.SOCKS_PROXY_PORT);
printProperty(out, ProxySetup.SOCKS_PROXY_USERNAME);
printProperty(out, ProxySetup.SOCKS_PROXY_PASSWORD);
final String proxyDiagClassname="org.apache.tools.ant.util.java15.ProxyDiagnostics";
try {
Class proxyDiagClass = Class.forName(proxyDiagClassname);
Object instance =proxyDiagClass.newInstance();
out.println("Java1.5+ proxy settings");
out.println(instance.toString());
} catch (ClassNotFoundException e) {
//not included, do nothing
} catch (IllegalAccessException e) {
//not included, do nothing

} catch (InstantiationException e) {
//not included, do nothing

}

}

}

+ 29
- 28
src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java View File

@@ -1,5 +1,5 @@
/*
* Copyright 2000-2005 The Apache Software Foundation
* Copyright 2000-2006 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@ import java.util.Properties;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.util.ProxySetup;

/**
* Sets Java's web proxy properties, so that tasks and code run in
@@ -178,32 +179,32 @@ public class SetProxy extends Task {
if (proxyHost.length() != 0) {
traceSettingInfo();
enablingProxy = true;
sysprops.put("http.proxyHost", proxyHost);
sysprops.put(ProxySetup.HTTP_PROXY_HOST, proxyHost);
String portString = Integer.toString(proxyPort);
sysprops.put("http.proxyPort", portString);
sysprops.put("https.proxyHost", proxyHost);
sysprops.put("https.proxyPort", portString);
sysprops.put("ftp.proxyHost", proxyHost);
sysprops.put("ftp.proxyPort", portString);
sysprops.put(ProxySetup.HTTP_PROXY_PORT, portString);
sysprops.put(ProxySetup.HTTPS_PROXY_HOST, proxyHost);
sysprops.put(ProxySetup.HTTPS_PROXY_PORT, portString);
sysprops.put(ProxySetup.FTP_PROXY_HOST, proxyHost);
sysprops.put(ProxySetup.FTP_PROXY_PORT, portString);
if (nonProxyHosts != null) {
sysprops.put("http.nonProxyHosts", nonProxyHosts);
sysprops.put("https.nonProxyHosts", nonProxyHosts);
sysprops.put("ftp.nonProxyHosts", nonProxyHosts);
sysprops.put(ProxySetup.HTTP_NON_PROXY_HOSTS, nonProxyHosts);
sysprops.put(ProxySetup.HTTPS_NON_PROXY_HOSTS, nonProxyHosts);
sysprops.put(ProxySetup.FTP_NON_PROXY_HOSTS, nonProxyHosts);
}
if (proxyUser != null) {
sysprops.put("http.proxyUser", proxyUser);
sysprops.put("http.proxyPassword", proxyPassword);
sysprops.put(ProxySetup.HTTP_PROXY_USERNAME, proxyUser);
sysprops.put(ProxySetup.HTTP_PROXY_PASSWORD, proxyPassword);
}
} else {
log("resetting http proxy", Project.MSG_VERBOSE);
sysprops.remove("http.proxyHost");
sysprops.remove("http.proxyPort");
sysprops.remove("http.proxyUser");
sysprops.remove("http.proxyPassword");
sysprops.remove("https.proxyHost");
sysprops.remove("https.proxyPort");
sysprops.remove("ftp.proxyHost");
sysprops.remove("ftp.proxyPort");
sysprops.remove(ProxySetup.HTTP_PROXY_HOST);
sysprops.remove(ProxySetup.HTTP_PROXY_PORT);
sysprops.remove(ProxySetup.HTTP_PROXY_USERNAME);
sysprops.remove(ProxySetup.HTTP_PROXY_PASSWORD);
sysprops.remove(ProxySetup.HTTPS_PROXY_HOST);
sysprops.remove(ProxySetup.HTTPS_PROXY_PORT);
sysprops.remove(ProxySetup.FTP_PROXY_HOST);
sysprops.remove(ProxySetup.FTP_PROXY_PORT);
}
}

@@ -212,20 +213,20 @@ public class SetProxy extends Task {
settingsChanged = true;
if (socksProxyHost.length() != 0) {
enablingProxy = true;
sysprops.put("socksProxyHost", socksProxyHost);
sysprops.put("socksProxyPort", Integer.toString(socksProxyPort));
sysprops.put(ProxySetup.SOCKS_PROXY_HOST, socksProxyHost);
sysprops.put(ProxySetup.SOCKS_PROXY_PORT, Integer.toString(socksProxyPort));
if (proxyUser != null) {
//this may be a java1.4 thingy only
sysprops.put("java.net.socks.username", proxyUser);
sysprops.put("java.net.socks.password", proxyPassword);
sysprops.put(ProxySetup.SOCKS_PROXY_USERNAME, proxyUser);
sysprops.put(ProxySetup.SOCKS_PROXY_PASSWORD, proxyPassword);
}

} else {
log("resetting socks proxy", Project.MSG_VERBOSE);
sysprops.remove("socksProxyHost");
sysprops.remove("socksProxyPort");
sysprops.remove("java.net.socks.username");
sysprops.remove("java.net.socks.password");
sysprops.remove(ProxySetup.SOCKS_PROXY_HOST);
sysprops.remove(ProxySetup.SOCKS_PROXY_PORT);
sysprops.remove(ProxySetup.SOCKS_PROXY_USERNAME);
sysprops.remove(ProxySetup.SOCKS_PROXY_PASSWORD);
}
}



+ 16
- 1
src/main/org/apache/tools/ant/util/ProxySetup.java View File

@@ -1,5 +1,5 @@
/*
* Copyright 2005 The Apache Software Foundation
* Copyright 2005-2006 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -37,6 +37,21 @@ public class ProxySetup {
* @value
*/
public static final String USE_SYSTEM_PROXIES="java.net.useSystemProxies";
public static final String HTTP_PROXY_HOST = "http.proxyHost";
public static final String HTTP_PROXY_PORT = "http.proxyPort";
public static final String HTTPS_PROXY_HOST = "https.proxyHost";
public static final String HTTPS_PROXY_PORT = "https.proxyPort";
public static final String FTP_PROXY_HOST = "ftp.proxyHost";
public static final String FTP_PROXY_PORT = "ftp.proxyPort";
public static final String HTTP_NON_PROXY_HOSTS = "http.nonProxyHosts";
public static final String HTTPS_NON_PROXY_HOSTS = "https.nonProxyHosts";
public static final String FTP_NON_PROXY_HOSTS = "ftp.nonProxyHosts";
public static final String HTTP_PROXY_USERNAME = "http.proxyUser";
public static final String HTTP_PROXY_PASSWORD = "http.proxyPassword";
public static final String SOCKS_PROXY_HOST = "socksProxyHost";
public static final String SOCKS_PROXY_PORT = "socksProxyPort";
public static final String SOCKS_PROXY_USERNAME = "java.net.socks.username";
public static final String SOCKS_PROXY_PASSWORD = "java.net.socks.password";


/**


+ 107
- 0
src/main/org/apache/tools/ant/util/java15/ProxyDiagnostics.java View File

@@ -0,0 +1,107 @@
/*
* Copyright 2006 The Apache Software Foundation
*
* 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.apache.tools.ant.util.java15;

import org.apache.tools.ant.BuildException;

import java.net.ProxySelector;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.Proxy;
import java.net.SocketAddress;
import java.net.InetSocketAddress;
import java.net.InetAddress;
import java.util.List;
import java.util.Iterator;

/**
* This class exists to create a string that tells diagnostics about the current
* state of proxy diagnostics.
* It does this in its toString operator.
* Java1.5+ is needed to compile this class; its interface is classic typeless
* Java.
* @since Ant 1.7
*/
public class ProxyDiagnostics {

String destination;

URI destURI;

/** {@value} */
public static final String DEFAULT_DESTINATION = "http://ant.apache.org/";

/**
* create a diagnostics binding for a specific URI
* @param destination dest to bind to
* @throws BuildException if the URI is malformed.
*/
public ProxyDiagnostics(String destination) {
this.destination = destination;
try {
this.destURI=new URI(destination);
} catch (URISyntaxException e) {
throw new BuildException(e);
}
}

/**
* create a proxy diagnostics tool bound to
* {@link #DEFAULT_DESTINATION}
*/
public ProxyDiagnostics() {
this(DEFAULT_DESTINATION);
}

public String toString() {
ProxySelector selector=ProxySelector.getDefault();
List list = selector.select(destURI);
StringBuffer result=new StringBuffer();
Iterator proxies=list.listIterator();
while (proxies.hasNext()) {
Proxy proxy = (Proxy) proxies.next();
SocketAddress address = proxy.address();
if(address==null) {
result.append("Direct connection\n");
} else {
result.append(proxy.toString());
if(address instanceof InetSocketAddress) {
InetSocketAddress ina=(InetSocketAddress) address;
result.append(' ');
result.append(ina.getHostName());
result.append(':');
result.append(ina.getPort());
if(ina.isUnresolved()) {
result.append(" [unresolved]");
} else {
InetAddress addr = ina.getAddress();
result.append(" [");
result.append(addr.getHostAddress());
result.append(']');
}
}
result.append('\n');
}
}
return result.toString();
}



}

Loading…
Cancel
Save