From 1734229125e7bad5f85dfe11d076eeda206236a9 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Mon, 18 Oct 2010 19:41:47 +0000
Subject: [PATCH] Update from OpenDS sdk by Bo Li: Added unmodifiable and copyOf request factories. Added authrate performance utility.

---
 sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java |   36 +++++++++++++++++++-----------------
 1 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java b/sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java
index dbe9ed3..79a1eb9 100644
--- a/sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java
+++ b/sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Copyright 2010 Sun Microsystems, Inc.
  */
 
 package com.sun.opends.sdk.ldap;
@@ -35,6 +35,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.net.ssl.SSLContext;
@@ -77,7 +78,8 @@
 
   private final AtomicInteger nextMsgID = new AtomicInteger(1);
 
-  private boolean bindOrStartTLSInProgress = false;
+  private final AtomicBoolean bindOrStartTLSInProgress =
+      new AtomicBoolean(false);
 
   private final ConcurrentHashMap<Integer, AbstractLDAPFutureResultImpl<?>> pendingRequests =
     new ConcurrentHashMap<Integer, AbstractLDAPFutureResultImpl<?>>();
@@ -122,7 +124,7 @@
         return new CompletedFutureResult<Void>(
             ErrorResultException.wrap(connectionInvalidReason), messageID);
       }
-      if (bindOrStartTLSInProgress)
+      if (bindOrStartTLSInProgress.get())
       {
         final Result errorResult = Responses.newResult(
             ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
@@ -193,7 +195,7 @@
         future.adaptErrorResult(connectionInvalidReason);
         return future;
       }
-      if (bindOrStartTLSInProgress)
+      if (bindOrStartTLSInProgress.get())
       {
         future.setResultOrError(Responses
             .newResult(ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
@@ -289,7 +291,7 @@
         future.adaptErrorResult(connectionInvalidReason);
         return future;
       }
-      if (bindOrStartTLSInProgress)
+      if (!bindOrStartTLSInProgress.compareAndSet(false, true))
       {
         future.setResultOrError(Responses.newBindResult(
             ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
@@ -305,7 +307,6 @@
       }
 
       pendingRequests.put(messageID, future);
-      bindOrStartTLSInProgress = true;
     }
 
     try
@@ -379,7 +380,7 @@
         future.adaptErrorResult(connectionInvalidReason);
         return future;
       }
-      if (bindOrStartTLSInProgress)
+      if (bindOrStartTLSInProgress.get())
       {
         future.setResultOrError(Responses.newCompareResult(
             ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
@@ -437,7 +438,7 @@
         future.adaptErrorResult(connectionInvalidReason);
         return future;
       }
-      if (bindOrStartTLSInProgress)
+      if (bindOrStartTLSInProgress.get())
       {
         future.setResultOrError(Responses
             .newResult(ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
@@ -496,7 +497,7 @@
         future.adaptErrorResult(connectionInvalidReason);
         return future;
       }
-      if (bindOrStartTLSInProgress)
+      if (!bindOrStartTLSInProgress.compareAndSet(false, true))
       {
         future.setResultOrError(request.getResultDecoder()
             .newExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
@@ -518,7 +519,6 @@
               .newExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
                   "This connection is already TLS enabled"));
         }
-        bindOrStartTLSInProgress = true;
       }
       pendingRequests.put(messageID, future);
     }
@@ -591,7 +591,7 @@
         future.adaptErrorResult(connectionInvalidReason);
         return future;
       }
-      if (bindOrStartTLSInProgress)
+      if (bindOrStartTLSInProgress.get())
       {
         future.setResultOrError(Responses
             .newResult(ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
@@ -649,7 +649,7 @@
         future.adaptErrorResult(connectionInvalidReason);
         return future;
       }
-      if (bindOrStartTLSInProgress)
+      if (bindOrStartTLSInProgress.get())
       {
         future.setResultOrError(Responses
             .newResult(ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
@@ -719,7 +719,7 @@
         future.adaptErrorResult(connectionInvalidReason);
         return future;
       }
-      if (bindOrStartTLSInProgress)
+      if (bindOrStartTLSInProgress.get())
       {
         future.setResultOrError(Responses
             .newResult(ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
@@ -996,13 +996,13 @@
 
   void setBindOrStartTLSInProgress(final boolean state)
   {
-    bindOrStartTLSInProgress = state;
+    bindOrStartTLSInProgress.set(state);
   }
 
 
 
   synchronized void startTLS(final SSLContext sslContext,
-      final String[] protocols, final String[] cipherSuites,
+      final List<String> protocols, final List<String> cipherSuites,
       final CompletionHandler<SSLEngine> completionHandler) throws IOException
   {
     if (isTLSEnabled())
@@ -1015,8 +1015,10 @@
 
     sslEngineConfigurator = new SSLEngineConfigurator(sslContext, true, false,
         false);
-    sslEngineConfigurator.setEnabledProtocols(protocols);
-    sslEngineConfigurator.setEnabledCipherSuites(cipherSuites);
+    sslEngineConfigurator.setEnabledProtocols(protocols.isEmpty() ?
+        null : protocols.toArray(new String[protocols.size()]));
+    sslEngineConfigurator.setEnabledCipherSuites(cipherSuites.isEmpty() ?
+        null : cipherSuites.toArray(new String[cipherSuites.size()]));
     sslFilter = new SSLFilter(null, sslEngineConfigurator);
     installFilter(sslFilter);
     sslFilter.handshake(connection, completionHandler);

--
Gitblit v1.10.0