| | |
| | | @Override |
| | | public void handleAddResult(int messageID, Result result) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | | if (pendingRequest instanceof ResultFutureImpl<?>) |
| | | if (pendingRequest instanceof ResultFutureImpl) |
| | | { |
| | | ResultFutureImpl<?> future = (ResultFutureImpl<?>) pendingRequest; |
| | | ResultFutureImpl future = (ResultFutureImpl) pendingRequest; |
| | | if (future.getRequest() instanceof AddRequest) |
| | | { |
| | | future.handleResult(result); |
| | |
| | | @Override |
| | | public void handleBindResult(int messageID, BindResult result) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | | if (pendingRequest instanceof BindResultFutureImpl<?>) |
| | | if (pendingRequest instanceof BindResultFutureImpl) |
| | | { |
| | | BindResultFutureImpl<?> future = ((BindResultFutureImpl<?>) pendingRequest); |
| | | BindResultFutureImpl future = ((BindResultFutureImpl) pendingRequest); |
| | | BindRequest request = future.getRequest(); |
| | | |
| | | if (request instanceof SASLBindRequest<?>) |
| | |
| | | // FIXME: I18N need to have a better error message. |
| | | // FIXME: Is this the best result code? |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_LOCAL_ERROR).setDiagnosticMessage( |
| | | "An error occurred during SASL authentication").setCause(e); |
| | | ResultCode.CLIENT_SIDE_LOCAL_ERROR) |
| | | .setDiagnosticMessage( |
| | | "An error occurred during SASL authentication") |
| | | .setCause(e); |
| | | future.handleErrorResult(errorResult); |
| | | return; |
| | | } |
| | |
| | | { |
| | | pendingRequests.remove(messageID); |
| | | |
| | | // FIXME: what other sort of IOExceptions can be thrown? |
| | | // FIXME: what other sort of IOExceptions can be |
| | | // thrown? |
| | | // FIXME: Is this the best result code? |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR).setCause(e); |
| | | ResultCode.CLIENT_SIDE_ENCODING_ERROR) |
| | | .setCause(e); |
| | | connectionErrorOccurred(errorResult); |
| | | future.handleErrorResult(errorResult); |
| | | } |
| | |
| | | @Override |
| | | public void handleCompareResult(int messageID, CompareResult result) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | | if (pendingRequest instanceof CompareResultFutureImpl<?>) |
| | | if (pendingRequest instanceof CompareResultFutureImpl) |
| | | { |
| | | CompareResultFutureImpl<?> future = (CompareResultFutureImpl<?>) pendingRequest; |
| | | CompareResultFutureImpl future = (CompareResultFutureImpl) pendingRequest; |
| | | future.handleResult(result); |
| | | } |
| | | else |
| | |
| | | @Override |
| | | public void handleDeleteResult(int messageID, Result result) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | | if (pendingRequest instanceof ResultFutureImpl<?>) |
| | | if (pendingRequest instanceof ResultFutureImpl) |
| | | { |
| | | ResultFutureImpl<?> future = (ResultFutureImpl<?>) pendingRequest; |
| | | ResultFutureImpl future = (ResultFutureImpl) pendingRequest; |
| | | if (future.getRequest() instanceof DeleteRequest) |
| | | { |
| | | future.handleResult(result); |
| | |
| | | public void handleException(Throwable throwable) |
| | | { |
| | | Result errorResult; |
| | | if(throwable instanceof EOFException) |
| | | if (throwable instanceof EOFException) |
| | | { |
| | | // FIXME: Is this the best result code? |
| | | errorResult = Responses.newResult( |
| | |
| | | OID_NOTICE_OF_DISCONNECTION)) |
| | | { |
| | | |
| | | Result errorResult = Responses.newResult(result.getResultCode()) |
| | | .setDiagnosticMessage(result.getDiagnosticMessage()); |
| | | Result errorResult = Responses.newResult( |
| | | result.getResultCode()).setDiagnosticMessage( |
| | | result.getDiagnosticMessage()); |
| | | close(null, true, errorResult); |
| | | return; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(messageID); |
| | | |
| | | if (pendingRequest instanceof ExtendedResultFutureImpl<?, ?>) |
| | | if (pendingRequest instanceof ExtendedResultFutureImpl<?>) |
| | | { |
| | | ExtendedResultFutureImpl<?, ?> extendedFuture = ((ExtendedResultFutureImpl<?, ?>) pendingRequest); |
| | | ExtendedResultFutureImpl<?> extendedFuture = ((ExtendedResultFutureImpl<?>) pendingRequest); |
| | | try |
| | | { |
| | | handleExtendedResult0(extendedFuture, result); |
| | |
| | | catch (DecodeException de) |
| | | { |
| | | // FIXME: should the connection be closed as well? |
| | | Result errorResult = Responses.newResult(ResultCode.CLIENT_SIDE_DECODING_ERROR) |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_DECODING_ERROR) |
| | | .setDiagnosticMessage(de.getLocalizedMessage()).setCause( |
| | | de); |
| | | extendedFuture.handleErrorResult(errorResult); |
| | |
| | | public void handleIntermediateResponse(int messageID, |
| | | GenericIntermediateResponse response) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | |
| | | @Override |
| | | public void handleModifyDNResult(int messageID, Result result) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | | if (pendingRequest instanceof ResultFutureImpl<?>) |
| | | if (pendingRequest instanceof ResultFutureImpl) |
| | | { |
| | | ResultFutureImpl<?> future = (ResultFutureImpl<?>) pendingRequest; |
| | | ResultFutureImpl future = (ResultFutureImpl) pendingRequest; |
| | | if (future.getRequest() instanceof ModifyDNRequest) |
| | | { |
| | | future.handleResult(result); |
| | |
| | | @Override |
| | | public void handleModifyResult(int messageID, Result result) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | | if (pendingRequest instanceof ResultFutureImpl<?>) |
| | | if (pendingRequest instanceof ResultFutureImpl) |
| | | { |
| | | ResultFutureImpl<?> future = (ResultFutureImpl<?>) pendingRequest; |
| | | ResultFutureImpl future = (ResultFutureImpl) pendingRequest; |
| | | if (future.getRequest() instanceof ModifyRequest) |
| | | { |
| | | future.handleResult(result); |
| | |
| | | @Override |
| | | public void handleSearchResult(int messageID, Result result) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | | if (pendingRequest instanceof SearchResultFutureImpl<?>) |
| | | if (pendingRequest instanceof SearchResultFutureImpl) |
| | | { |
| | | ((SearchResultFutureImpl<?>) pendingRequest) |
| | | ((SearchResultFutureImpl) pendingRequest) |
| | | .handleResult(result); |
| | | } |
| | | else |
| | |
| | | public void handleSearchResultEntry(int messageID, |
| | | SearchResultEntry entry) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .get(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | | if (pendingRequest instanceof SearchResultFutureImpl<?>) |
| | | if (pendingRequest instanceof SearchResultFutureImpl) |
| | | { |
| | | ((SearchResultFutureImpl<?>) pendingRequest) |
| | | ((SearchResultFutureImpl) pendingRequest) |
| | | .handleSearchResultEntry(entry); |
| | | } |
| | | else |
| | |
| | | public void handleSearchResultReference(int messageID, |
| | | SearchResultReference reference) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .get(messageID); |
| | | if (pendingRequest != null) |
| | | { |
| | | if (pendingRequest instanceof SearchResultFutureImpl<?>) |
| | | if (pendingRequest instanceof SearchResultFutureImpl) |
| | | { |
| | | ((SearchResultFutureImpl<?>) pendingRequest) |
| | | ((SearchResultFutureImpl) pendingRequest) |
| | | .handleSearchResultReference(reference); |
| | | } |
| | | else |
| | |
| | | |
| | | private boolean isClosed = false; |
| | | |
| | | private final List<ConnectionEventListener> listeners = |
| | | new CopyOnWriteArrayList<ConnectionEventListener>(); |
| | | private final List<ConnectionEventListener> listeners = new CopyOnWriteArrayList<ConnectionEventListener>(); |
| | | |
| | | private final AtomicInteger nextMsgID = new AtomicInteger(1); |
| | | |
| | | private volatile int pendingBindOrStartTLS = -1; |
| | | |
| | | private final ConcurrentHashMap<Integer, AbstractResultFutureImpl<?, ?>> pendingRequests = new ConcurrentHashMap<Integer, AbstractResultFutureImpl<?, ?>>(); |
| | | private final ConcurrentHashMap<Integer, AbstractResultFutureImpl<?>> pendingRequests = new ConcurrentHashMap<Integer, AbstractResultFutureImpl<?>>(); |
| | | |
| | | private final InetSocketAddress serverAddress; |
| | | |
| | |
| | | */ |
| | | public void abandon(AbandonRequest request) |
| | | { |
| | | AbstractResultFutureImpl<?, ?> pendingRequest = pendingRequests |
| | | AbstractResultFutureImpl<?> pendingRequest = pendingRequests |
| | | .remove(request.getMessageID()); |
| | | if (pendingRequest != null) |
| | | { |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public <P> ResultFuture<Result> add(AddRequest request, |
| | | ResultHandler<Result, P> handler, P p) |
| | | public ResultFuture<Result> add(AddRequest request, |
| | | ResultHandler<Result> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ResultFutureImpl<P> future = new ResultFutureImpl<P>(messageID, |
| | | request, handler, p, this, connFactory.getHandlerInvokers()); |
| | | ResultFutureImpl future = new ResultFutureImpl(messageID, request, |
| | | handler, this, connFactory.getHandlerInvokers()); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future |
| | | .handleResult(Responses.newResult(ResultCode.OPERATIONS_ERROR) |
| | | .setDiagnosticMessage("Bind or Start TLS operation in progress")); |
| | | future.handleResult(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | | } |
| | | pendingRequests.put(messageID, future); |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public <P> ResultFuture<BindResult> bind(BindRequest request, |
| | | ResultHandler<? super BindResult, P> handler, P p) |
| | | public ResultFuture<BindResult> bind(BindRequest request, |
| | | ResultHandler<? super BindResult> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | BindResultFutureImpl<P> future = new BindResultFutureImpl<P>( |
| | | messageID, request, handler, p, this, connFactory |
| | | .getHandlerInvokers()); |
| | | BindResultFutureImpl future = new BindResultFutureImpl(messageID, |
| | | request, handler, this, connFactory.getHandlerInvokers()); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future |
| | | .handleResult(Responses.newBindResult(ResultCode.OPERATIONS_ERROR) |
| | | .setDiagnosticMessage("Bind or Start TLS operation in progress")); |
| | | future.handleResult(Responses.newBindResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | | } |
| | | if (!pendingRequests.isEmpty()) |
| | | { |
| | | future |
| | | .handleResult(Responses.newBindResult(ResultCode.OPERATIONS_ERROR) |
| | | .setDiagnosticMessage("There are other operations pending on this connection")); |
| | | future.handleResult(Responses.newBindResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "There are other operations pending on this connection")); |
| | | return future; |
| | | } |
| | | |
| | |
| | | // FIXME: I18N need to have a better error message. |
| | | // FIXME: Is this the best result code? |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_LOCAL_ERROR).setDiagnosticMessage( |
| | | "An error occurred during SASL authentication").setCause(e); |
| | | ResultCode.CLIENT_SIDE_LOCAL_ERROR) |
| | | .setDiagnosticMessage( |
| | | "An error occurred during SASL authentication") |
| | | .setCause(e); |
| | | future.handleErrorResult(errorResult); |
| | | return future; |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void close(UnbindRequest request, String reason) |
| | | throws NullPointerException { |
| | | throws NullPointerException |
| | | { |
| | | // 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 : ""))); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public <P> ResultFuture<CompareResult> compare( |
| | | CompareRequest request, |
| | | ResultHandler<? super CompareResult, P> handler, P p) |
| | | public ResultFuture<CompareResult> compare(CompareRequest request, |
| | | ResultHandler<? super CompareResult> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | CompareResultFutureImpl<P> future = new CompareResultFutureImpl<P>( |
| | | messageID, request, handler, p, this, connFactory |
| | | CompareResultFutureImpl future = new CompareResultFutureImpl( |
| | | messageID, request, handler, this, connFactory |
| | | .getHandlerInvokers()); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future |
| | | .handleResult(Responses.newCompareResult(ResultCode.OPERATIONS_ERROR) |
| | | .setDiagnosticMessage("Bind or Start TLS operation in progress")); |
| | | future.handleResult(Responses.newCompareResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | | } |
| | | pendingRequests.put(messageID, future); |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public <P> ResultFuture<Result> delete(DeleteRequest request, |
| | | ResultHandler<Result, P> handler, P p) |
| | | public ResultFuture<Result> delete(DeleteRequest request, |
| | | ResultHandler<Result> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ResultFutureImpl<P> future = new ResultFutureImpl<P>(messageID, |
| | | request, handler, p, this, connFactory.getHandlerInvokers()); |
| | | ResultFutureImpl future = new ResultFutureImpl(messageID, request, |
| | | handler, this, connFactory.getHandlerInvokers()); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future |
| | | .handleResult(Responses.newResult(ResultCode.OPERATIONS_ERROR) |
| | | .setDiagnosticMessage("Bind or Start TLS operation in progress")); |
| | | future.handleResult(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | | } |
| | | pendingRequests.put(messageID, future); |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public <R extends Result, P> ResultFuture<R> extendedRequest( |
| | | ExtendedRequest<R> request, ResultHandler<? super R, P> handler, |
| | | P p) |
| | | public <R extends Result> ResultFuture<R> extendedRequest( |
| | | ExtendedRequest<R> request, ResultHandler<? super R> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ExtendedResultFutureImpl<R, P> future = new ExtendedResultFutureImpl<R, P>( |
| | | messageID, request, handler, p, this, connFactory |
| | | ExtendedResultFutureImpl<R> future = new ExtendedResultFutureImpl<R>( |
| | | messageID, request, handler, this, connFactory |
| | | .getHandlerInvokers()); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public <P> ResultFuture<Result> modify(ModifyRequest request, |
| | | ResultHandler<Result, P> handler, P p) |
| | | public ResultFuture<Result> modify(ModifyRequest request, |
| | | ResultHandler<Result> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ResultFutureImpl<P> future = new ResultFutureImpl<P>(messageID, |
| | | request, handler, p, this, connFactory.getHandlerInvokers()); |
| | | ResultFutureImpl future = new ResultFutureImpl(messageID, request, |
| | | handler, this, connFactory.getHandlerInvokers()); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future |
| | | .handleResult(Responses.newResult(ResultCode.OPERATIONS_ERROR) |
| | | .setDiagnosticMessage("Bind or Start TLS operation in progress")); |
| | | future.handleResult(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | | } |
| | | pendingRequests.put(messageID, future); |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public <P> ResultFuture<Result> modifyDN(ModifyDNRequest request, |
| | | ResultHandler<Result, P> handler, P p) |
| | | public ResultFuture<Result> modifyDN(ModifyDNRequest request, |
| | | ResultHandler<Result> handler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | ResultFutureImpl<P> future = new ResultFutureImpl<P>(messageID, |
| | | request, handler, p, this, connFactory.getHandlerInvokers()); |
| | | ResultFutureImpl future = new ResultFutureImpl(messageID, request, |
| | | handler, this, connFactory.getHandlerInvokers()); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future |
| | | .handleResult(Responses.newResult(ResultCode.OPERATIONS_ERROR) |
| | | .setDiagnosticMessage("Bind or Start TLS operation in progress")); |
| | | future.handleResult(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | | } |
| | | pendingRequests.put(messageID, future); |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public <P> ResultFuture<Result> search(SearchRequest request, |
| | | ResultHandler<Result, P> resultHandler, |
| | | SearchResultHandler<P> searchResulthandler, P p) |
| | | public ResultFuture<Result> search(SearchRequest request, |
| | | ResultHandler<Result> resultHandler, |
| | | SearchResultHandler searchResulthandler) |
| | | { |
| | | int messageID = nextMsgID.getAndIncrement(); |
| | | SearchResultFutureImpl<P> future = new SearchResultFutureImpl<P>( |
| | | messageID, request, resultHandler, searchResulthandler, p, |
| | | this, connFactory.getHandlerInvokers()); |
| | | SearchResultFutureImpl future = new SearchResultFutureImpl( |
| | | messageID, request, resultHandler, searchResulthandler, this, |
| | | connFactory.getHandlerInvokers()); |
| | | ASN1StreamWriter asn1Writer = connFactory |
| | | .getASN1Writer(streamWriter); |
| | | |
| | |
| | | } |
| | | if (pendingBindOrStartTLS > 0) |
| | | { |
| | | future |
| | | .handleResult(Responses.newResult(ResultCode.OPERATIONS_ERROR) |
| | | .setDiagnosticMessage("Bind or Start TLS operation in progress")); |
| | | future.handleResult(Responses.newResult( |
| | | ResultCode.OPERATIONS_ERROR).setDiagnosticMessage( |
| | | "Bind or Start TLS operation in progress")); |
| | | return future; |
| | | } |
| | | pendingRequests.put(messageID, future); |
| | |
| | | } |
| | | |
| | | // First abort all outstanding requests. |
| | | for (AbstractResultFutureImpl<?, ?> future : pendingRequests |
| | | for (AbstractResultFutureImpl<?> future : pendingRequests |
| | | .values()) |
| | | { |
| | | if (pendingBindOrStartTLS <= 0) |
| | |
| | | return isClosed; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | // |
| | | // |
| | | // |
| | |
| | | |
| | | // Needed in order to expose type information. |
| | | private <R extends Result> void handleExtendedResult0( |
| | | ExtendedResultFutureImpl<R, ?> future, |
| | | GenericExtendedResult result) throws DecodeException |
| | | ExtendedResultFutureImpl<R> future, GenericExtendedResult result) |
| | | throws DecodeException |
| | | { |
| | | R decodedResponse = future.decodeResponse(result.getResultCode(), |
| | | result.getMatchedDN(), result.getDiagnosticMessage(), result |
| | |
| | | |
| | | |
| | | private void handleIncorrectResponse( |
| | | AbstractResultFutureImpl<?, ?> pendingRequest) |
| | | AbstractResultFutureImpl<?> pendingRequest) |
| | | { |
| | | // FIXME: I18N need to have a better error message. |
| | | Result errorResult = Responses.newResult(ResultCode.CLIENT_SIDE_DECODING_ERROR) |
| | | .setDiagnosticMessage("LDAP response message did not match request"); |
| | | Result errorResult = Responses.newResult( |
| | | ResultCode.CLIENT_SIDE_DECODING_ERROR).setDiagnosticMessage( |
| | | "LDAP response message did not match request"); |
| | | |
| | | pendingRequest.handleErrorResult(errorResult); |
| | | connectionErrorOccurred(errorResult); |