From 72650d4cc41c64136d064967d7fec3726d850fee Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Thu, 14 Oct 2010 11:52:28 +0000
Subject: [PATCH] Multiple enhancements and bug fixes to the SDK (update from OpenDS by matthew_swift):
---
sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java | 118 +++++++++++++++++++++++++++++++++++------------------------
1 files changed, 70 insertions(+), 48 deletions(-)
diff --git a/sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java b/sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java
index 25f7d84..dbe9ed3 100644
--- a/sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java
+++ b/sdk/src/com/sun/opends/sdk/ldap/LDAPConnection.java
@@ -44,12 +44,12 @@
import org.opends.sdk.requests.*;
import org.opends.sdk.responses.*;
-import com.sun.grizzly.CompletionHandler;
-import com.sun.grizzly.filterchain.DefaultFilterChain;
-import com.sun.grizzly.filterchain.Filter;
-import com.sun.grizzly.filterchain.FilterChain;
-import com.sun.grizzly.ssl.SSLEngineConfigurator;
-import com.sun.grizzly.ssl.SSLFilter;
+import org.glassfish.grizzly.CompletionHandler;
+import org.glassfish.grizzly.filterchain.DefaultFilterChain;
+import org.glassfish.grizzly.filterchain.Filter;
+import org.glassfish.grizzly.filterchain.FilterChain;
+import org.glassfish.grizzly.ssl.SSLEngineConfigurator;
+import org.glassfish.grizzly.ssl.SSLFilter;
import com.sun.opends.sdk.util.CompletedFutureResult;
import com.sun.opends.sdk.util.StaticUtils;
import com.sun.opends.sdk.util.Validator;
@@ -64,7 +64,7 @@
final class LDAPConnection extends AbstractAsynchronousConnection implements
AsynchronousConnection
{
- private final com.sun.grizzly.Connection<?> connection;
+ private final org.glassfish.grizzly.Connection<?> connection;
private Result connectionInvalidReason;
@@ -79,9 +79,8 @@
private boolean bindOrStartTLSInProgress = false;
- private final ConcurrentHashMap<Integer, AbstractLDAPFutureResultImpl<?>>
- pendingRequests =
- new ConcurrentHashMap<Integer, AbstractLDAPFutureResultImpl<?>>();
+ private final ConcurrentHashMap<Integer, AbstractLDAPFutureResultImpl<?>> pendingRequests =
+ new ConcurrentHashMap<Integer, AbstractLDAPFutureResultImpl<?>>();
private final Object stateLock = new Object();
@@ -99,7 +98,7 @@
* @param options
* The LDAP client options.
*/
- LDAPConnection(final com.sun.grizzly.Connection<?> connection,
+ LDAPConnection(final org.glassfish.grizzly.Connection<?> connection,
final LDAPOptions options)
{
this.connection = connection;
@@ -120,20 +119,20 @@
{
if (connectionInvalidReason != null)
{
- return new CompletedFutureResult<Void>(ErrorResultException
- .wrap(connectionInvalidReason), messageID);
+ return new CompletedFutureResult<Void>(
+ ErrorResultException.wrap(connectionInvalidReason), messageID);
}
if (bindOrStartTLSInProgress)
{
final Result errorResult = Responses.newResult(
ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
"Bind or Start TLS operation in progress");
- return new CompletedFutureResult<Void>(ErrorResultException
- .wrap(errorResult), messageID);
+ return new CompletedFutureResult<Void>(
+ ErrorResultException.wrap(errorResult), messageID);
}
// First remove the future associated with the request to be abandoned.
- pendingRequest = pendingRequests.remove(request.getMessageID());
+ pendingRequest = pendingRequests.remove(request.getRequestID());
}
if (pendingRequest == null)
@@ -169,8 +168,8 @@
final Result errorResult = Responses.newResult(
ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e);
connectionErrorOccurred(errorResult);
- return new CompletedFutureResult<Void>(ErrorResultException
- .wrap(errorResult), messageID);
+ return new CompletedFutureResult<Void>(
+ ErrorResultException.wrap(errorResult), messageID);
}
}
@@ -258,18 +257,20 @@
BindClient context;
try
{
- context = request.createBindClient(
- connection.getPeerAddress() instanceof InetSocketAddress ?
- ((InetSocketAddress)connection.getPeerAddress()).getHostName() :
- connection.getPeerAddress().toString());
+ context = request
+ .createBindClient(connection.getPeerAddress() instanceof InetSocketAddress ?
+ ((InetSocketAddress) connection
+ .getPeerAddress()).getHostName() : connection.getPeerAddress()
+ .toString());
}
catch (final Exception e)
{
// FIXME: I18N need to have a better error message.
// FIXME: Is this the best result code?
- final Result errorResult = Responses.newResult(
- ResultCode.CLIENT_SIDE_LOCAL_ERROR).setDiagnosticMessage(
- "An error occurred while creating a bind context").setCause(e);
+ final Result errorResult = Responses
+ .newResult(ResultCode.CLIENT_SIDE_LOCAL_ERROR)
+ .setDiagnosticMessage(
+ "An error occurred while creating a bind context").setCause(e);
final ErrorResultException error = ErrorResultException.wrap(errorResult);
if (resultHandler != null)
{
@@ -349,9 +350,13 @@
// FIXME: I18N need to internationalize this message.
Validator.ensureNotNull(request);
- close(request, false, Responses.newResult(
- ResultCode.CLIENT_SIDE_USER_CANCELLED).setDiagnosticMessage(
- "Connection closed by client" + (reason != null ? ": " + reason : "")));
+ close(
+ request,
+ false,
+ Responses.newResult(ResultCode.CLIENT_SIDE_USER_CANCELLED)
+ .setDiagnosticMessage(
+ "Connection closed by client"
+ + (reason != null ? ": " + reason : "")));
}
@@ -494,7 +499,7 @@
if (bindOrStartTLSInProgress)
{
future.setResultOrError(request.getResultDecoder()
- .adaptExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
+ .newExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
"Bind or Start TLS operation in progress"));
return future;
}
@@ -503,14 +508,14 @@
if (!pendingRequests.isEmpty())
{
future.setResultOrError(request.getResultDecoder()
- .adaptExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
+ .newExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
"There are pending operations on this connection"));
return future;
}
if (isTLSEnabled())
{
future.setResultOrError(request.getResultDecoder()
- .adaptExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
+ .newExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
"This connection is already TLS enabled"));
}
bindOrStartTLSInProgress = true;
@@ -754,13 +759,29 @@
+ /**
+ * {@inheritDoc}
+ */
+ public String toString()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("LDAPConnection(");
+ builder.append(connection.getLocalAddress());
+ builder.append(',');
+ builder.append(connection.getPeerAddress());
+ builder.append(')');
+ return builder.toString();
+ }
+
+
+
int addPendingRequest(final AbstractLDAPFutureResultImpl<?> request)
throws ErrorResultException
{
final int newMsgID = nextMsgID.getAndIncrement();
- synchronized(stateLock)
+ synchronized (stateLock)
{
- if(connectionInvalidReason != null)
+ if (connectionInvalidReason != null)
{
throw ErrorResultException.wrap(connectionInvalidReason);
}
@@ -779,9 +800,9 @@
{
for (int requestID : pendingRequests.keySet())
{
- final AbstractLDAPFutureResultImpl<?> future =
- pendingRequests.get(requestID);
- if(future != null)
+ final AbstractLDAPFutureResultImpl<?> future = pendingRequests
+ .get(requestID);
+ if (future != null)
{
final long diff = (future.getTimestamp() + timeout) - currentTime;
if (diff <= 0 && pendingRequests.remove(requestID) != null)
@@ -814,9 +835,15 @@
synchronized (stateLock)
{
- if (isClosed || connectionInvalidReason != null)
+ if (isClosed) {
+ // Already closed.
+ return;
+ }
+
+ if (connectionInvalidReason != null)
{
// Already closed.
+ isClosed = true;
return;
}
@@ -832,20 +859,15 @@
}
// Mark the connection as invalid.
- connectionInvalidReason =
- reason.getResultCode() == ResultCode.CLIENT_SIDE_USER_CANCELLED ?
- reason : Responses.newResult(
- ResultCode.CLIENT_SIDE_USER_CANCELLED).setCause(
- ErrorResultException.wrap(reason)).setDiagnosticMessage(
- "Connection closed: " + reason.getDiagnosticMessage());
+ connectionInvalidReason = reason;
}
// First abort all outstanding requests.
for (int requestID : pendingRequests.keySet())
{
- final AbstractLDAPFutureResultImpl<?> future =
- pendingRequests.remove(requestID);
- if(future != null)
+ final AbstractLDAPFutureResultImpl<?> future = pendingRequests
+ .remove(requestID);
+ if (future != null)
{
future.adaptErrorResult(reason);
}
@@ -939,8 +961,8 @@
{
if (customFilterChain == null)
{
- customFilterChain = new DefaultFilterChain((FilterChain) connection
- .getProcessor());
+ customFilterChain = new DefaultFilterChain(
+ (FilterChain) connection.getProcessor());
connection.setProcessor(customFilterChain);
}
--
Gitblit v1.10.0