| | |
| | | ResultFutureImpl future = (ResultFutureImpl) pendingRequest; |
| | | if (future.getRequest() instanceof AddRequest) |
| | | { |
| | | future.handleResult(result); |
| | | future.setResultOrError(result); |
| | | return; |
| | | } |
| | | } |
| | |
| | | .setDiagnosticMessage( |
| | | "An error occurred during SASL authentication") |
| | | .setCause(e); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | return; |
| | | } |
| | | } |
| | |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR) |
| | | .setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | pendingBindOrStartTLS = -1; |
| | | future.handleResult(result); |
| | | future.setResultOrError(result); |
| | | } |
| | | else |
| | | { |
| | |
| | | if (pendingRequest instanceof CompareResultFutureImpl) |
| | | { |
| | | CompareResultFutureImpl future = (CompareResultFutureImpl) pendingRequest; |
| | | future.handleResult(result); |
| | | future.setResultOrError(result); |
| | | } |
| | | else |
| | | { |
| | |
| | | ResultFutureImpl future = (ResultFutureImpl) pendingRequest; |
| | | if (future.getRequest() instanceof DeleteRequest) |
| | | { |
| | | future.handleResult(result); |
| | | future.setResultOrError(result); |
| | | return; |
| | | } |
| | | } |
| | |
| | | ResultCode.CLIENT_SIDE_DECODING_ERROR) |
| | | .setDiagnosticMessage(de.getLocalizedMessage()).setCause( |
| | | de); |
| | | extendedFuture.handleErrorResult(errorResult); |
| | | extendedFuture.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | else |
| | |
| | | ResultFutureImpl future = (ResultFutureImpl) pendingRequest; |
| | | if (future.getRequest() instanceof ModifyDNRequest) |
| | | { |
| | | future.handleResult(result); |
| | | future.setResultOrError(result); |
| | | return; |
| | | } |
| | | } |
| | |
| | | ResultFutureImpl future = (ResultFutureImpl) pendingRequest; |
| | | if (future.getRequest() instanceof ModifyRequest) |
| | | { |
| | | future.handleResult(result); |
| | | future.setResultOrError(result); |
| | | return; |
| | | } |
| | | } |
| | |
| | | if (pendingRequest instanceof SearchResultFutureImpl) |
| | | { |
| | | ((SearchResultFutureImpl) pendingRequest) |
| | | .handleResult(result); |
| | | .setResultOrError(result); |
| | | } |
| | | else |
| | | { |
| | |
| | | |
| | | private final Object writeLock = new Object(); |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a new LDAP connection. |
| | | * |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ResultFuture<Result> add(AddRequest request, |
| | | public FutureResult<Result> add(AddRequest request, |
| | | ResultHandler<Result> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ResultFutureImpl future = new ResultFutureImpl(messageID, request, |
| | | handler, this, connFactory.getHandlerInvokers()); |
| | | handler, this); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | { |
| | | if (connectionInvalidReason != null) |
| | | { |
| | | future.handleErrorResult(connectionInvalidReason); |
| | | future.adaptErrorResult(connectionInvalidReason); |
| | | return future; |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future.handleResult(Responses.newResult( |
| | | future.setResultOrError(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | } |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ResultFuture<BindResult> bind(BindRequest request, |
| | | public FutureResult<BindResult> bind(BindRequest request, |
| | | ResultHandler<? super BindResult> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | BindResultFutureImpl future = new BindResultFutureImpl(messageID, |
| | | request, handler, this, connFactory.getHandlerInvokers()); |
| | | request, handler, this); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | { |
| | | if (connectionInvalidReason != null) |
| | | { |
| | | future.handleErrorResult(connectionInvalidReason); |
| | | future.adaptErrorResult(connectionInvalidReason); |
| | | return future; |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future.handleResult(Responses.newBindResult( |
| | | future.setResultOrError(Responses.newBindResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | | } |
| | | if (!pendingRequests.isEmpty()) |
| | | { |
| | | future.handleResult(Responses.newBindResult( |
| | | future.setResultOrError(Responses.newBindResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "There are other operations pending on this connection")); |
| | | return future; |
| | |
| | | .setDiagnosticMessage( |
| | | "An error occurred during SASL authentication") |
| | | .setCause(e); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | return future; |
| | | } |
| | | } |
| | |
| | | else |
| | | { |
| | | pendingRequests.remove(messageID); |
| | | future.handleResult(Responses.newBindResult( |
| | | future.setResultOrError(Responses.newBindResult( |
| | | ResultCode.CLIENT_SIDE_AUTH_UNKNOWN) |
| | | .setDiagnosticMessage("Auth type not supported")); |
| | | } |
| | |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | } |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ResultFuture<CompareResult> compare(CompareRequest request, |
| | | public FutureResult<CompareResult> compare(CompareRequest request, |
| | | ResultHandler<? super CompareResult> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | CompareResultFutureImpl future = new CompareResultFutureImpl( |
| | | messageID, request, handler, this, connFactory |
| | | .getHandlerInvokers()); |
| | | messageID, request, handler, this); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | { |
| | | if (connectionInvalidReason != null) |
| | | { |
| | | future.handleErrorResult(connectionInvalidReason); |
| | | future.adaptErrorResult(connectionInvalidReason); |
| | | return future; |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future.handleResult(Responses.newCompareResult( |
| | | future.setResultOrError(Responses.newCompareResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | } |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ResultFuture<Result> delete(DeleteRequest request, |
| | | public FutureResult<Result> delete(DeleteRequest request, |
| | | ResultHandler<Result> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ResultFutureImpl future = new ResultFutureImpl(messageID, request, |
| | | handler, this, connFactory.getHandlerInvokers()); |
| | | handler, this); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | { |
| | | if (connectionInvalidReason != null) |
| | | { |
| | | future.handleErrorResult(connectionInvalidReason); |
| | | future.adaptErrorResult(connectionInvalidReason); |
| | | return future; |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future.handleResult(Responses.newResult( |
| | | future.setResultOrError(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | } |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public <R extends Result> ResultFuture<R> extendedRequest( |
| | | public <R extends Result> FutureResult<R> extendedRequest( |
| | | ExtendedRequest<R> request, ResultHandler<? super R> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ExtendedResultFutureImpl<R> future = new ExtendedResultFutureImpl<R>( |
| | | messageID, request, handler, this, connFactory |
| | | .getHandlerInvokers()); |
| | | messageID, request, handler, this); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | { |
| | | if (connectionInvalidReason != null) |
| | | { |
| | | future.handleErrorResult(connectionInvalidReason); |
| | | future.adaptErrorResult(connectionInvalidReason); |
| | | return future; |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future.handleResult(request.getExtendedOperation() |
| | | future.setResultOrError(request.getExtendedOperation() |
| | | .decodeResponse(ResultCode.OPERATIONS_ERROR, "", |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | |
| | | { |
| | | if (!pendingRequests.isEmpty()) |
| | | { |
| | | future.handleResult(request.getExtendedOperation() |
| | | future.setResultOrError(request.getExtendedOperation() |
| | | .decodeResponse(ResultCode.OPERATIONS_ERROR, "", |
| | | "There are pending operations on this connection")); |
| | | return future; |
| | | } |
| | | if (isTLSEnabled()) |
| | | { |
| | | future.handleResult(request.getExtendedOperation() |
| | | future.setResultOrError(request.getExtendedOperation() |
| | | .decodeResponse(ResultCode.OPERATIONS_ERROR, "", |
| | | "This connection is already TLS enabled")); |
| | | } |
| | |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | } |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ResultFuture<Result> modify(ModifyRequest request, |
| | | public FutureResult<Result> modify(ModifyRequest request, |
| | | ResultHandler<Result> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ResultFutureImpl future = new ResultFutureImpl(messageID, request, |
| | | handler, this, connFactory.getHandlerInvokers()); |
| | | handler, this); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | { |
| | | if (connectionInvalidReason != null) |
| | | { |
| | | future.handleErrorResult(connectionInvalidReason); |
| | | future.adaptErrorResult(connectionInvalidReason); |
| | | return future; |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future.handleResult(Responses.newResult( |
| | | future.setResultOrError(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | } |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ResultFuture<Result> modifyDN(ModifyDNRequest request, |
| | | public FutureResult<Result> modifyDN(ModifyDNRequest request, |
| | | ResultHandler<Result> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ResultFutureImpl future = new ResultFutureImpl(messageID, request, |
| | | handler, this, connFactory.getHandlerInvokers()); |
| | | handler, this); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | { |
| | | if (connectionInvalidReason != null) |
| | | { |
| | | future.handleErrorResult(connectionInvalidReason); |
| | | future.adaptErrorResult(connectionInvalidReason); |
| | | return future; |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future.handleResult(Responses.newResult( |
| | | future.setResultOrError(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | } |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ResultFuture<Result> search(SearchRequest request, |
| | | public FutureResult<Result> search(SearchRequest request, |
| | | ResultHandler<Result> resultHandler, |
| | | SearchResultHandler searchResulthandler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | SearchResultFutureImpl future = new SearchResultFutureImpl( |
| | | messageID, request, resultHandler, searchResulthandler, this, |
| | | connFactory.getHandlerInvokers()); |
| | | messageID, request, resultHandler, searchResulthandler, this); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | { |
| | | if (connectionInvalidReason != null) |
| | | { |
| | | future.handleErrorResult(connectionInvalidReason); |
| | | future.adaptErrorResult(connectionInvalidReason); |
| | | return future; |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future.handleResult(Responses.newResult( |
| | | future.setResultOrError(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | future.adaptErrorResult(errorResult); |
| | | } |
| | | } |
| | | } |
| | |
| | | .getASN1Writer(streamWriter); |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | AbandonRequest abandon = Requests.newAbandonRequest(future |
| | | .getMessageID()); |
| | | .getRequestID()); |
| | | try |
| | | { |
| | | LDAPEncoder.encodeAbandonRequest(asn1Writer, messageID, |
| | |
| | | } |
| | | } |
| | | |
| | | future.handleErrorResult(reason); |
| | | future.adaptErrorResult(reason); |
| | | } |
| | | pendingRequests.clear(); |
| | | |
| | |
| | | } |
| | | catch (ErrorResultException e) |
| | | { |
| | | future.handleErrorResult(e.getResult()); |
| | | future.adaptErrorResult(e.getResult()); |
| | | return; |
| | | } |
| | | } |
| | | pendingBindOrStartTLS = -1; |
| | | } |
| | | |
| | | future.handleResult(decodedResponse); |
| | | future.setResultOrError(decodedResponse); |
| | | } |
| | | |
| | | |
| | |
| | | ResultCode.CLIENT_SIDE_DECODING_ERROR).setDiagnosticMessage( |
| | | "LDAP response message did not match request"); |
| | | |
| | | pendingRequest.handleErrorResult(errorResult); |
| | | pendingRequest.adaptErrorResult(errorResult); |
| | | connectionErrorOccurred(errorResult); |
| | | } |
| | | |