diff --git a/build.xml b/build.xml
index 8a75067d4..b99bc3575 100644
--- a/build.xml
+++ b/build.xml
@@ -152,6 +152,12 @@
+
+
+
+
+
+
@@ -637,6 +643,7 @@
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/IsPingable.java b/src/main/org/apache/tools/ant/taskdefs/condition/IsPingable.java
new file mode 100644
index 000000000..f4afa7c98
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/condition/IsPingable.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2004 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.taskdefs.condition;
+
+import org.apache.tools.ant.ProjectComponent;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.io.IOException;
+
+/**
+ * Test for a host being reachable using ICMP "ping" packets.
+ * Ping packets are very reliable for assessing reachability in a LAN or WAN,
+ * but they do not get through any well-configured firewall.
+ *
+ * This condition turns unknown host exceptions into false conditions. This is
+ * because on a laptop, DNS is one of the first services when the network goes; you
+ * are implicitly offline.
+ * Requires Java1.5+ to work
+ * @since Ant1.7
+ */
+public class IsPingable extends ProjectComponent implements Condition {
+
+ private String host;
+ public static final int DEFAULT_TIMEOUT = 30;
+ private int timeout=DEFAULT_TIMEOUT;
+ public static final String ERROR_NO_HOSTNAME = "No hostname defined";
+ public static final String ERROR_BAD_TIMEOUT = "Invalid timeout value";
+ public static final String ERROR_UNKNOWN_HOST = "Unknown host:";
+ public static final String ERROR_ON_NETWORK = "network error to ";
+
+ /**
+ * the host to ping
+ * @param host
+ */
+ public void setHost(String host) {
+ this.host = host;
+ }
+
+ /**
+ * timeout for the reachability test -in seconds
+ * @param timeout
+ */
+ public void setTimeout(int timeout) {
+ this.timeout = timeout;
+ }
+
+ /**
+ * Is this condition true?
+ *
+ * @return true if the condition is true
+ * @throws org.apache.tools.ant.BuildException
+ * if an error occurs
+ */
+ public boolean eval() throws BuildException {
+ if(host==null && host.length()==0) {
+ throw new BuildException(ERROR_NO_HOSTNAME);
+ }
+ if(timeout<0) {
+ throw new BuildException(ERROR_BAD_TIMEOUT);
+ }
+ try {
+ InetAddress address=InetAddress.getByName(host);
+ return address.isReachable(timeout*1000);
+ } catch (UnknownHostException e) {
+ log(ERROR_UNKNOWN_HOST+host,Project.MSG_VERBOSE);
+ return false;
+ } catch (IOException e) {
+ log(ERROR_ON_NETWORK + host +": "+e.toString(),
+ Project.MSG_VERBOSE);
+ return false;
+ }
+ }
+}