From 03fe0954e42abf00746b8efa4c79ee74cf514427 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Thu, 27 May 2010 15:10:50 +0000
Subject: [PATCH] Fix an issue with connection timeouts in CLI. The timeout is now configurable on CLI with the --connectTimeout option (expressed in milliseconds), the default is 30 000 milliseconds. This solves Issue 4196.

---
 opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.java |   54 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 39 insertions(+), 15 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.java b/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.java
index adf08fd..ef04b1e 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.java
@@ -22,29 +22,17 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2009 Sun Microsystems, Inc.
+ *      Copyright 2009-2010 Sun Microsystems, Inc.
  */
 
 package org.opends.guitools.controlpanel;
 
 import static org.opends.messages.ToolMessages.*;
-import static org.opends.server.tools.ToolConstants.OPTION_LONG_BINDDN;
-import static org.opends.server.tools.ToolConstants.OPTION_LONG_BINDPWD;
-import static org.opends.server.tools.ToolConstants.OPTION_LONG_BINDPWD_FILE;
-import static org.opends.server.tools.ToolConstants.OPTION_LONG_HELP;
-import static org.opends.server.tools.ToolConstants.OPTION_LONG_HOST;
-import static org.opends.server.tools.ToolConstants.OPTION_LONG_PORT;
-import static org.opends.server.tools.ToolConstants.OPTION_LONG_TRUSTALL;
-import static org.opends.server.tools.ToolConstants.OPTION_SHORT_BINDDN;
-import static org.opends.server.tools.ToolConstants.OPTION_SHORT_BINDPWD;
-import static org.opends.server.tools.ToolConstants.OPTION_SHORT_BINDPWD_FILE;
-import static org.opends.server.tools.ToolConstants.OPTION_SHORT_HELP;
-import static org.opends.server.tools.ToolConstants.OPTION_SHORT_HOST;
-import static org.opends.server.tools.ToolConstants.OPTION_SHORT_PORT;
-import static org.opends.server.tools.ToolConstants.OPTION_SHORT_TRUSTALL;
+import static org.opends.server.tools.ToolConstants.*;
 
 import java.util.LinkedHashSet;
 
+import org.opends.admin.ads.util.ConnectionUtils;
 import org.opends.messages.Message;
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.UserData;
@@ -92,6 +80,11 @@
    */
   private BooleanArgument trustAllArg = null;
 
+  /**
+   * Argument to specify the connect timeout.
+   */
+  private IntegerArgument connectTimeoutArg = null;
+
   private BooleanArgument showUsageArg;
 
   /**
@@ -141,6 +134,7 @@
     portArg = new IntegerArgument("port", OPTION_SHORT_PORT, OPTION_LONG_PORT,
         false, false, true, INFO_PORT_PLACEHOLDER.get(),
         getDefaultAdministrationPort(), null,
+        true, 1, true, 65535,
         INFO_DESCRIPTION_ADMIN_PORT.get());
     portArg.setPropertyName(OPTION_LONG_PORT);
     addArgument(portArg);
@@ -170,6 +164,16 @@
     trustAllArg.setPropertyName(OPTION_LONG_TRUSTALL);
     addArgument(trustAllArg);
 
+    int defaultTimeout = ConnectionUtils.getDefaultLDAPTimeout();
+    connectTimeoutArg = new IntegerArgument(OPTION_LONG_CONNECT_TIMEOUT,
+        null, OPTION_LONG_CONNECT_TIMEOUT,
+        false, false, true, INFO_TIMEOUT_PLACEHOLDER.get(),
+        defaultTimeout, null,
+        true, 0, false, Integer.MAX_VALUE,
+        INFO_DESCRIPTION_CONNECTION_TIMEOUT.get());
+    connectTimeoutArg.setPropertyName(OPTION_LONG_CONNECT_TIMEOUT);
+    addArgument(connectTimeoutArg);
+
     showUsageArg = new BooleanArgument("help", OPTION_SHORT_HELP,
         OPTION_LONG_HELP,
         INFO_DESCRIPTION_USAGE.get());
@@ -283,4 +287,24 @@
     return trustAllArg.isPresent();
   }
 
+  /**
+   * Returns the timeout to be used to connect in milliseconds.  The method
+   * must be called after parsing the arguments.
+   * @return the timeout to be used to connect in milliseconds.  Returns
+   * {@code 0} if there is no timeout.
+   * @throw {@code IllegalStateException} if the method is called before
+   * parsing the arguments.
+   */
+  public int getConnectTimeout()
+  {
+    try
+    {
+      return connectTimeoutArg.getIntValue();
+    }
+    catch (ArgumentException ae)
+    {
+      throw new IllegalStateException("Argument parser is not parsed: "+ae, ae);
+    }
+  }
+
 }

--
Gitblit v1.10.0