This is an automated email from the ASF dual-hosted git repository.

rmaucher pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 0dd86e5307a82b88f013cd8c4ebf54c825463905
Author: opencode <[email protected]>
AuthorDate: Tue Sep 29 18:28:45 2026 +0200

    Add configurable timeout for HTTP connections used by the Manager Ant tasks
---
 .../apache/catalina/ant/AbstractCatalinaTask.java  | 34 ++++++++++++++++++++++
 java/org/apache/catalina/ant/DeployTask.java       |  4 +++
 2 files changed, 38 insertions(+)

diff --git a/java/org/apache/catalina/ant/AbstractCatalinaTask.java 
b/java/org/apache/catalina/ant/AbstractCatalinaTask.java
index 5fc185117c..58d078de29 100644
--- a/java/org/apache/catalina/ant/AbstractCatalinaTask.java
+++ b/java/org/apache/catalina/ant/AbstractCatalinaTask.java
@@ -96,6 +96,32 @@ public abstract class AbstractCatalinaTask extends 
BaseRedirectorHelperTask {
     }
 
 
+    /**
+     * The timeout, in seconds, used when establishing a connection to the 
server and when reading data from it. The
+     * default value of zero means no timeout, in which case an unresponsive 
server may cause the build to block
+     * indefinitely.
+     */
+    protected int timeout = 0;
+
+    /**
+     * Returns the connection and read timeout, in seconds.
+     *
+     * @return the timeout in seconds; zero means no timeout
+     */
+    public int getTimeout() {
+        return this.timeout;
+    }
+
+    /**
+     * Sets the connection and read timeout, in seconds.
+     *
+     * @param timeout the timeout in seconds; zero (the default) means no 
timeout
+     */
+    public void setTimeout(int timeout) {
+        this.timeout = timeout;
+    }
+
+
     /**
      * The URL of the <code>Manager</code> application to be used.
      */
@@ -227,6 +253,10 @@ public abstract class AbstractCatalinaTask extends 
BaseRedirectorHelperTask {
             hconn.setAllowUserInteraction(false);
             hconn.setDoInput(true);
             hconn.setUseCaches(false);
+            if (timeout > 0) {
+                hconn.setConnectTimeout(timeout * 1000);
+                hconn.setReadTimeout(timeout * 1000);
+            }
 
             // Set up authorization with our credentials
             Authenticator authenticator = new TaskAuthenticator(username, 
password);
@@ -346,6 +376,10 @@ public abstract class AbstractCatalinaTask extends 
BaseRedirectorHelperTask {
         hconn.setAllowUserInteraction(false);
         hconn.setDoInput(true);
         hconn.setUseCaches(false);
+        if (timeout > 0) {
+            hconn.setConnectTimeout(timeout * 1000);
+            hconn.setReadTimeout(timeout * 1000);
+        }
         hconn.setDoOutput(false);
         hconn.setAuthenticator(authenticator);
         hconn.setRequestMethod(Method.OPTIONS);
diff --git a/java/org/apache/catalina/ant/DeployTask.java 
b/java/org/apache/catalina/ant/DeployTask.java
index 9b26a31a7f..6595b20d9e 100644
--- a/java/org/apache/catalina/ant/DeployTask.java
+++ b/java/org/apache/catalina/ant/DeployTask.java
@@ -188,6 +188,10 @@ public class DeployTask extends 
AbstractCatalinaCommandTask {
                 try {
                     URI uri = new URI(war);
                     URLConnection conn = uri.toURL().openConnection();
+                    if (timeout > 0) {
+                        conn.setConnectTimeout(timeout * 1000);
+                        conn.setReadTimeout(timeout * 1000);
+                    }
                     contentLength = conn.getContentLengthLong();
                     stream = new BufferedInputStream(conn.getInputStream(), 
1024);
                 } catch (IOException | URISyntaxException e) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to