extra proxy diagnostics, in a java1.5-only package. By abusing the toString() operati...
authorSteve Loughran <stevel@apache.org>
Wed, 18 Jan 2006 21:11:21 +0000 (21:11 +0000)
committerSteve Loughran <stevel@apache.org>
Wed, 18 Jan 2006 21:11:21 +0000 (21:11 +0000)
git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@370259 13f79535-47bb-0310-9956-ffa450edef68

build.xml
src/main/org/apache/tools/ant/Diagnostics.java
src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java
src/main/org/apache/tools/ant/util/ProxySetup.java
src/main/org/apache/tools/ant/util/java15/ProxyDiagnostics.java [new file with mode: 0644]

index 6fa3f61..66060ba 100644 (file)
--- a/build.xml
+++ b/build.xml
   <selector id="needs.jdk1.5+">
     <or>
       <filename name="${taskdefs.package}/AptTest*"/>
+      <filename name="${util.package}/java15/*"/>
     </or>
   </selector>
 
index f6cca15..b46bd26 100644 (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
+
+        }
+
+    }
+
 }
index c0afda6..89cbeef 100644 (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);
             }
         }
 
index 40b901f..f846636 100644 (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";
 
 
     /**
diff --git a/src/main/org/apache/tools/ant/util/java15/ProxyDiagnostics.java b/src/main/org/apache/tools/ant/util/java15/ProxyDiagnostics.java
new file mode 100644 (file)
index 0000000..378d5f2
--- /dev/null
@@ -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();
+    }
+
+
+
+}