| | |
| | | } |
| | | |
| | | private abstract class AbstractRequestCompletionHandler |
| | | <R extends Result, H extends ResultHandler<? super R>> |
| | | <R extends Result, H extends ResultHandler<R>> |
| | | implements ResultHandler<R> { |
| | | final H resultHandler; |
| | | final Connection connection; |
| | |
| | | |
| | | private abstract class ConnectionCompletionHandler<R extends Result> implements |
| | | ResultHandler<Connection> { |
| | | private final ResultHandler<? super R> resultHandler; |
| | | private final ResultHandler<R> resultHandler; |
| | | |
| | | ConnectionCompletionHandler(final ResultHandler<? super R> resultHandler) { |
| | | ConnectionCompletionHandler(final ResultHandler<R> resultHandler) { |
| | | this.resultHandler = resultHandler; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | private final class RequestCompletionHandler<R extends Result> extends |
| | | AbstractRequestCompletionHandler<R, ResultHandler<? super R>> { |
| | | AbstractRequestCompletionHandler<R, ResultHandler<R>> { |
| | | RequestCompletionHandler(final Connection connection, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | super(connection, resultHandler); |
| | | } |
| | | } |
| | |
| | | @Override |
| | | public void handleAdd(final RequestContext requestContext, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public void handleBind(final RequestContext requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) { |
| | | final ResultHandler<BindResult> resultHandler) { |
| | | |
| | | if (request.getAuthenticationType() != BindRequest.AUTHENTICATION_TYPE_SIMPLE) { |
| | | // TODO: SASL authentication not implemented. |
| | |
| | | public void handleCompare(final RequestContext requestContext, |
| | | final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) { |
| | | final ResultHandler<CompareResult> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<CompareResult> outerHandler = |
| | | new ConnectionCompletionHandler<CompareResult>(resultHandler) { |
| | |
| | | @Override |
| | | public void handleDelete(final RequestContext requestContext, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest( |
| | | final RequestContext requestContext, final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | if (request.getOID().equals(CancelExtendedRequest.OID)) { |
| | | // TODO: not implemented. |
| | | resultHandler.handleErrorResult(newErrorResult(ResultCode.PROTOCOL_ERROR, |
| | |
| | | @Override |
| | | public void handleModify(final RequestContext requestContext, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public void handleModifyDN(final RequestContext requestContext, |
| | | final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | * |
| | | * |
| | | * Copyright 2009-2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2011-2012 ForgeRock AS |
| | | * Portions copyright 2011-2013 ForgeRock AS |
| | | */ |
| | | |
| | | package org.forgerock.opendj.examples; |
| | |
| | | } |
| | | |
| | | private abstract class AbstractRequestCompletionHandler |
| | | <R extends Result, H extends ResultHandler<? super R>> |
| | | <R extends Result, H extends ResultHandler<R>> |
| | | implements ResultHandler<R> { |
| | | final H resultHandler; |
| | | final Connection connection; |
| | |
| | | |
| | | private abstract class ConnectionCompletionHandler<R extends Result> implements |
| | | ResultHandler<Connection> { |
| | | private final ResultHandler<? super R> resultHandler; |
| | | private final ResultHandler<R> resultHandler; |
| | | |
| | | ConnectionCompletionHandler(final ResultHandler<? super R> resultHandler) { |
| | | ConnectionCompletionHandler(final ResultHandler<R> resultHandler) { |
| | | this.resultHandler = resultHandler; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | private final class RequestCompletionHandler<R extends Result> extends |
| | | AbstractRequestCompletionHandler<R, ResultHandler<? super R>> { |
| | | AbstractRequestCompletionHandler<R, ResultHandler<R>> { |
| | | RequestCompletionHandler(final Connection connection, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | super(connection, resultHandler); |
| | | } |
| | | } |
| | |
| | | @Override |
| | | public void handleAdd(final RequestContext requestContext, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public void handleBind(final RequestContext requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) { |
| | | final ResultHandler<BindResult> resultHandler) { |
| | | |
| | | if (request.getAuthenticationType() != ((byte) 0x80)) { |
| | | // TODO: SASL authentication not implemented. |
| | |
| | | public void handleCompare(final RequestContext requestContext, |
| | | final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) { |
| | | final ResultHandler<CompareResult> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<CompareResult> outerHandler = |
| | | new ConnectionCompletionHandler<CompareResult>(resultHandler) { |
| | |
| | | @Override |
| | | public void handleDelete(final RequestContext requestContext, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest( |
| | | final RequestContext requestContext, final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | if (request.getOID().equals(CancelExtendedRequest.OID)) { |
| | | // TODO: not implemented. |
| | | resultHandler.handleErrorResult(newErrorResult(ResultCode.PROTOCOL_ERROR, |
| | |
| | | @Override |
| | | public void handleModify(final RequestContext requestContext, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | public void handleModifyDN(final RequestContext requestContext, |
| | | final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | addProxiedAuthControl(request); |
| | | final ConnectionCompletionHandler<Result> outerHandler = |
| | | new ConnectionCompletionHandler<Result>(resultHandler) { |
| | |
| | | @Override |
| | | public void handleAdd(final RequestContext requestContext, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | try { |
| | | synchronized (writeLock) { |
| | | final DN dn = request.getName(); |
| | |
| | | public void handleBind(final RequestContext requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) { |
| | | final ResultHandler<BindResult> resultHandler) { |
| | | try { |
| | | final Entry entry; |
| | | synchronized (writeLock) { |
| | |
| | | @Override |
| | | public void handleCompare(final RequestContext requestContext, final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) { |
| | | final ResultHandler<CompareResult> resultHandler) { |
| | | try { |
| | | final Entry entry; |
| | | final Attribute assertion; |
| | |
| | | @Override |
| | | public void handleDelete(final RequestContext requestContext, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | try { |
| | | final Entry entry; |
| | | synchronized (writeLock) { |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest( |
| | | final RequestContext requestContext, final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | resultHandler.handleErrorResult(newErrorResult(ResultCode.UNWILLING_TO_PERFORM, |
| | | "Extended request operation not supported")); |
| | | } |
| | |
| | | @Override |
| | | public void handleModify(final RequestContext requestContext, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | try { |
| | | final Entry entry; |
| | | final Entry newEntry; |
| | |
| | | @Override |
| | | public void handleModifyDN(final RequestContext requestContext, final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final ResultHandler<Result> resultHandler) { |
| | | resultHandler.handleErrorResult(newErrorResult(ResultCode.UNWILLING_TO_PERFORM, |
| | | "ModifyDN request operation not supported")); |
| | | } |
| | |
| | | * |
| | | * |
| | | * Copyright 2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2011-2012 ForgeRock AS. |
| | | * Portions copyright 2011-2013 ForgeRock AS. |
| | | */ |
| | | |
| | | package org.forgerock.opendj.ldap; |
| | |
| | | */ |
| | | void handleAdd(C requestContext, AddRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super Result> resultHandler); |
| | | ResultHandler<Result> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a bind request is received from a client. |
| | |
| | | */ |
| | | void handleBind(C requestContext, int version, BindRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super BindResult> resultHandler); |
| | | ResultHandler<BindResult> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a compare request is received from a client. |
| | |
| | | */ |
| | | void handleCompare(C requestContext, CompareRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super CompareResult> resultHandler); |
| | | ResultHandler<CompareResult> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a delete request is received from a client. |
| | |
| | | */ |
| | | void handleDelete(C requestContext, DeleteRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super Result> resultHandler); |
| | | ResultHandler<Result> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when an extended request is received from a client. |
| | |
| | | */ |
| | | <R extends ExtendedResult> void handleExtendedRequest(C requestContext, |
| | | ExtendedRequest<R> request, IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super R> resultHandler); |
| | | ResultHandler<R> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a modify request is received from a client. |
| | |
| | | */ |
| | | void handleModify(C requestContext, ModifyRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super Result> resultHandler); |
| | | ResultHandler<Result> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a modify DN request is received from a client. |
| | |
| | | */ |
| | | void handleModifyDN(C requestContext, ModifyDNRequest request, |
| | | IntermediateResponseHandler intermediateResponseHandler, |
| | | ResultHandler<? super Result> resultHandler); |
| | | ResultHandler<Result> resultHandler); |
| | | |
| | | /** |
| | | * Invoked when a search request is received from a client. |
| | |
| | | /** |
| | | * Request context implementation. |
| | | */ |
| | | private static class RequestContextImpl<S extends Result, H extends ResultHandler<? super S>> |
| | | private static class RequestContextImpl<S extends Result, H extends ResultHandler<S>> |
| | | implements RequestContext, ResultHandler<S> { |
| | | |
| | | /* |
| | |
| | | */ |
| | | private static final class ExtendedResultHandlerHolder<R extends ExtendedResult> { |
| | | private final ExtendedRequest<R> request; |
| | | private final ResultHandler<? super R> resultHandler; |
| | | private final ResultHandler<R> resultHandler; |
| | | |
| | | private ExtendedResultHandlerHolder(final ExtendedRequest<R> request, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | this.request = request; |
| | | this.resultHandler = resultHandler; |
| | | } |
| | |
| | | } |
| | | |
| | | private <R extends ExtendedResult> void cancel(final LocalizableMessage reason, |
| | | final ExtendedRequest<R> cancelRequest, |
| | | final ResultHandler<? super R> cancelResultHandler, final boolean sendResult) { |
| | | final ExtendedRequest<R> cancelRequest, final ResultHandler<R> cancelResultHandler, |
| | | final boolean sendResult) { |
| | | Validator.ensureNotNull(reason); |
| | | |
| | | if (!isCancelSupported) { |
| | |
| | | @Override |
| | | public void handleAdd(final Integer messageID, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<? super Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<? super Result>>(this, |
| | | resultHandler, messageID, true); |
| | | final ResultHandler<Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<Result>>(this, resultHandler, |
| | | messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleAdd(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | public void handleBind(final Integer messageID, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) { |
| | | final RequestContextImpl<BindResult, ResultHandler<? super BindResult>> requestContext = |
| | | new RequestContextImpl<BindResult, ResultHandler<? super BindResult>>(this, |
| | | final ResultHandler<BindResult> resultHandler) { |
| | | final RequestContextImpl<BindResult, ResultHandler<BindResult>> requestContext = |
| | | new RequestContextImpl<BindResult, ResultHandler<BindResult>>(this, |
| | | resultHandler, messageID, false); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleBind(requestContext, version, request, |
| | |
| | | @Override |
| | | public void handleCompare(final Integer messageID, final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) { |
| | | final RequestContextImpl<CompareResult, ResultHandler<? super CompareResult>> requestContext = |
| | | new RequestContextImpl<CompareResult, ResultHandler<? super CompareResult>>( |
| | | this, resultHandler, messageID, true); |
| | | final ResultHandler<CompareResult> resultHandler) { |
| | | final RequestContextImpl<CompareResult, ResultHandler<CompareResult>> requestContext = |
| | | new RequestContextImpl<CompareResult, ResultHandler<CompareResult>>(this, |
| | | resultHandler, messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleCompare(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | @Override |
| | | public void handleDelete(final Integer messageID, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<? super Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<? super Result>>(this, |
| | | resultHandler, messageID, true); |
| | | final ResultHandler<Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<Result>>(this, resultHandler, |
| | | messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleDelete(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest(final Integer messageID, |
| | | final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) { |
| | | final ResultHandler<R> resultHandler) { |
| | | if (request.getOID().equals(CancelExtendedRequest.OID)) { |
| | | // Decode the request as a cancel request. |
| | | CancelExtendedRequest cancelRequest; |
| | |
| | | * though this request cannot be cancelled, it is important to |
| | | * do this in order to monitor the number of pending operations. |
| | | */ |
| | | final RequestContextImpl<R, ResultHandler<? super R>> requestContext = |
| | | new RequestContextImpl<R, ResultHandler<? super R>>(this, resultHandler, |
| | | messageID, false); |
| | | final RequestContextImpl<R, ResultHandler<R>> requestContext = |
| | | new RequestContextImpl<R, ResultHandler<R>>(this, resultHandler, messageID, |
| | | false); |
| | | if (addPendingRequest(requestContext)) { |
| | | // Find and cancel the request. |
| | | final RequestContextImpl<?, ?> cancelledRequest = |
| | |
| | | } |
| | | } |
| | | } else { |
| | | final RequestContextImpl<R, ResultHandler<? super R>> requestContext; |
| | | final RequestContextImpl<R, ResultHandler<R>> requestContext; |
| | | if (request.getOID().equals(StartTLSExtendedRequest.OID)) { |
| | | // StartTLS requests cannot be cancelled. |
| | | requestContext = |
| | | new RequestContextImpl<R, ResultHandler<? super R>>(this, |
| | | resultHandler, messageID, false); |
| | | new RequestContextImpl<R, ResultHandler<R>>(this, resultHandler, |
| | | messageID, false); |
| | | } else { |
| | | requestContext = |
| | | new RequestContextImpl<R, ResultHandler<? super R>>(this, |
| | | resultHandler, messageID, true); |
| | | new RequestContextImpl<R, ResultHandler<R>>(this, resultHandler, |
| | | messageID, true); |
| | | } |
| | | |
| | | if (addPendingRequest(requestContext)) { |
| | |
| | | @Override |
| | | public void handleModify(final Integer messageID, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<? super Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<? super Result>>(this, |
| | | resultHandler, messageID, true); |
| | | final ResultHandler<Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<Result>>(this, resultHandler, |
| | | messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleModify(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | @Override |
| | | public void handleModifyDN(final Integer messageID, final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<? super Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<? super Result>>(this, |
| | | resultHandler, messageID, true); |
| | | final ResultHandler<Result> resultHandler) { |
| | | final RequestContextImpl<Result, ResultHandler<Result>> requestContext = |
| | | new RequestContextImpl<Result, ResultHandler<Result>>(this, resultHandler, |
| | | messageID, true); |
| | | if (addPendingRequest(requestContext)) { |
| | | requestHandler.handleModifyDN(requestContext, request, intermediateResponseHandler, |
| | | requestContext); |
| | |
| | | * |
| | | * |
| | | * Copyright 2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2011-2012 ForgeRock AS. |
| | | * Portions copyright 2011-2013 ForgeRock AS. |
| | | */ |
| | | package org.forgerock.opendj.ldap; |
| | | |
| | |
| | | public class LDAPListenerTestCase extends SdkTestCase { |
| | | |
| | | private static class MockServerConnection implements ServerConnection<Integer> { |
| | | final AsynchronousFutureResult<Throwable, ResultHandler<? super Throwable>> connectionError = |
| | | new AsynchronousFutureResult<Throwable, ResultHandler<? super Throwable>>(null); |
| | | final AsynchronousFutureResult<LDAPClientContext, ResultHandler<? super LDAPClientContext>> context = |
| | | new AsynchronousFutureResult<LDAPClientContext, ResultHandler<? super LDAPClientContext>>(null); |
| | | final AsynchronousFutureResult<Throwable, ResultHandler<Throwable>> connectionError = |
| | | new AsynchronousFutureResult<Throwable, ResultHandler<Throwable>>(null); |
| | | final AsynchronousFutureResult<LDAPClientContext, ResultHandler<LDAPClientContext>> context = |
| | | new AsynchronousFutureResult<LDAPClientContext, ResultHandler<LDAPClientContext>>( |
| | | null); |
| | | final CountDownLatch isClosed = new CountDownLatch(1); |
| | | |
| | | MockServerConnection() { |
| | |
| | | @Override |
| | | public void handleAdd(final Integer requestContext, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | public void handleBind(final Integer requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<BindResult> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newBindResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | @Override |
| | | public void handleCompare(final Integer requestContext, final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) |
| | | final ResultHandler<CompareResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newCompareResult(ResultCode.SUCCESS)); |
| | | } |
| | |
| | | @Override |
| | | public void handleDelete(final Integer requestContext, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | public <R extends ExtendedResult> void handleExtendedRequest(final Integer requestContext, |
| | | final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) throws UnsupportedOperationException { |
| | | final ResultHandler<R> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleErrorResult(ErrorResultException.newErrorResult(request |
| | | .getResultDecoder().newExtendedErrorResult(ResultCode.PROTOCOL_ERROR, "", |
| | | "Extended operation " + request.getOID() + " not supported"))); |
| | |
| | | @Override |
| | | public void handleModify(final Integer requestContext, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | @Override |
| | | public void handleModifyDN(final Integer requestContext, final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | resultHandler.handleResult(Responses.newResult(ResultCode.SUCCESS)); |
| | | } |
| | | |
| | |
| | | public void handleBind(final Integer requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) |
| | | final ResultHandler<BindResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | // Get connection from load balancer, this should fail over |
| | | // twice before getting connection to online server. |
| | |
| | | public void handleBind(final Integer requestContext, final int version, |
| | | final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) |
| | | final ResultHandler<BindResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | // First attempt offline server. |
| | | LDAPConnectionFactory lcf = new LDAPConnectionFactory(findFreeSocketAddress()); |
| | |
| | | this.clientContext = clientContext; |
| | | } |
| | | |
| | | /** |
| | | * Abandons the request sent by the client. |
| | | * |
| | | * @param context |
| | | * @param request |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleAbandon(final Integer context, final AbandonRequest request) |
| | | throws UnsupportedOperationException { |
| | | // Check if we have any concurrent operation with this message id. |
| | |
| | | // No response is needed. |
| | | } |
| | | |
| | | /** |
| | | * Adds the request sent by the client. |
| | | * |
| | | * @param context |
| | | * @param request |
| | | * @param handler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleAdd(final Integer context, final AddRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> handler) throws UnsupportedOperationException { |
| | | final ResultHandler<Result> handler) throws UnsupportedOperationException { |
| | | Result result = null; |
| | | final AbandonableRequest abReq = new AbandonableRequest(request); |
| | | requestsInProgress.put(context, abReq); |
| | |
| | | handler.handleResult(result); |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param version |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleBind(final Integer context, final int version, final BindRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super BindResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<BindResult> resultHandler) throws UnsupportedOperationException { |
| | | // TODO: all bind types. |
| | | final AbandonableRequest abReq = new AbandonableRequest(request); |
| | | requestsInProgress.put(context, abReq); |
| | |
| | | requestsInProgress.remove(context); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void handleConnectionClosed(final Integer context, final UnbindRequest request) { |
| | | close(); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void handleConnectionDisconnected(ResultCode resultCode, String message) { |
| | | close(); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void handleConnectionError(final Throwable error) { |
| | | close(); |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleCompare(final Integer context, final CompareRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super CompareResult> resultHandler) |
| | | final ResultHandler<CompareResult> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | CompareResult result = null; |
| | | final AbandonableRequest abReq = new AbandonableRequest(request); |
| | |
| | | requestsInProgress.remove(context); |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param handler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleDelete(final Integer context, final DeleteRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> handler) throws UnsupportedOperationException { |
| | | final ResultHandler<Result> handler) throws UnsupportedOperationException { |
| | | Result result = null; |
| | | final AbandonableRequest abReq = new AbandonableRequest(request); |
| | | requestsInProgress.put(context, abReq); |
| | |
| | | requestsInProgress.remove(context); |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public <R extends ExtendedResult> void handleExtendedRequest(final Integer context, |
| | | final ExtendedRequest<R> request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super R> resultHandler) throws UnsupportedOperationException { |
| | | final ResultHandler<R> resultHandler) throws UnsupportedOperationException { |
| | | if (request.getOID().equals(StartTLSExtendedRequest.OID)) { |
| | | final R result = |
| | | request.getResultDecoder().newExtendedErrorResult(ResultCode.SUCCESS, "", |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleModify(final Integer context, final ModifyRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | // TODO: |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @param request |
| | | * @param resultHandler |
| | | * @param intermediateResponseHandler |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleModifyDN(final Integer context, final ModifyDNRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final ResultHandler<? super Result> resultHandler) |
| | | throws UnsupportedOperationException { |
| | | final ResultHandler<Result> resultHandler) throws UnsupportedOperationException { |
| | | // TODO |
| | | } |
| | | |
| | | /** |
| | | * @param request |
| | | * @param intermediateResponseHandler |
| | | * @param resultHandler |
| | | * @param context |
| | | * @throws UnsupportedOperationException |
| | | */ |
| | | public void handleSearch(final Integer context, final SearchRequest request, |
| | | final IntermediateResponseHandler intermediateResponseHandler, |
| | | final SearchResultHandler resultHandler) throws UnsupportedOperationException { |
| | |
| | | private volatile boolean isRunning; |
| | | |
| | | // The mapping between the message id and the requests the server is |
| | | // currently |
| | | // handling. |
| | | // currently handling. |
| | | private final ConcurrentHashMap<Integer, AbandonableRequest> requestsInProgress = |
| | | new ConcurrentHashMap<Integer, AbandonableRequest>(); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param context |
| | | * @return |
| | | */ |
| | | public ServerConnection<Integer> handleAccept(final LDAPClientContext context) { |
| | | return new LDAPServerConnection(context); |
| | | } |