Search in sources :

Example 1 with ExtendedFuture

use of org.apache.directory.ldap.client.api.future.ExtendedFuture in project directory-ldap-api by apache.

the class LdapNetworkConnection method extended.

/**
 * {@inheritDoc}
 */
@Override
public ExtendedResponse extended(ExtendedRequest extendedRequest) throws LdapException {
    if (extendedRequest == null) {
        String msg = "Cannot process a null extendedRequest";
        LOG.debug(msg);
        throw new IllegalArgumentException(msg);
    }
    ExtendedFuture extendedFuture = extendedAsync(extendedRequest);
    // Get the result from the future
    try {
        // Read the response, waiting for it if not available immediately
        // Get the response, blocking
        ExtendedResponse response = (ExtendedResponse) extendedFuture.get(timeout, TimeUnit.MILLISECONDS);
        if (response == null) {
            // We didn't received anything : this is an error
            if (LOG.isErrorEnabled()) {
                LOG.error(I18n.err(I18n.ERR_03203_OP_FAILED_TIMEOUT, "Extended"));
            }
            throw new LdapException(TIME_OUT_ERROR);
        }
        if (response.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
            // Everything is fine, return the response
            if (LOG.isDebugEnabled()) {
                LOG.debug(I18n.msg(I18n.MSG_03219_EXTENDED_SUCCESSFUL, response));
            }
        } else {
            // We have had an error
            if (LOG.isDebugEnabled()) {
                LOG.debug(I18n.msg(I18n.MSG_03218_EXTENDED_FAILED, response));
            }
        }
        // Get back the response. It's still an opaque response
        if (Strings.isEmpty(response.getResponseName())) {
            response.setResponseName(extendedRequest.getRequestName());
        }
        // Decode the payload now
        return codec.decorate(response);
    } catch (Exception ie) {
        // Catch all other exceptions
        LOG.error(NO_RESPONSE_ERROR, ie);
        // Send an abandon request
        if (!extendedFuture.isCancelled()) {
            abandon(extendedRequest.getMessageId());
        }
        throw new LdapException(NO_RESPONSE_ERROR, ie);
    }
}
Also used : ExtendedResponse(org.apache.directory.api.ldap.model.message.ExtendedResponse) ExtendedFuture(org.apache.directory.ldap.client.api.future.ExtendedFuture) LdapException(org.apache.directory.api.ldap.model.exception.LdapException) UnresolvedAddressException(java.nio.channels.UnresolvedAddressException) ConnectException(java.net.ConnectException) IOException(java.io.IOException) LdapInvalidDnException(org.apache.directory.api.ldap.model.exception.LdapInvalidDnException) InvalidConnectionException(org.apache.directory.ldap.client.api.exception.InvalidConnectionException) LdapOperationException(org.apache.directory.api.ldap.model.exception.LdapOperationException) LdapAuthenticationException(org.apache.directory.api.ldap.model.exception.LdapAuthenticationException) MessageEncoderException(org.apache.directory.api.ldap.codec.api.MessageEncoderException) CursorException(org.apache.directory.api.ldap.model.cursor.CursorException) DecoderException(org.apache.directory.api.asn1.DecoderException) LdapNoPermissionException(org.apache.directory.api.ldap.model.exception.LdapNoPermissionException) LdapOtherException(org.apache.directory.api.ldap.model.exception.LdapOtherException) ProtocolEncoderException(org.apache.mina.filter.codec.ProtocolEncoderException) LdapException(org.apache.directory.api.ldap.model.exception.LdapException)

Example 2 with ExtendedFuture

use of org.apache.directory.ldap.client.api.future.ExtendedFuture in project directory-ldap-api by apache.

the class LdapNetworkConnection method messageReceived.

/**
 * Handle the incoming LDAP messages. This is where we feed the cursor for search
 * requests, or call the listener.
 *
 * @param session The session that received a message
 * @param message The received message
 * @throws Exception If there is some error while processing the message
 */
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
    // Feed the response and store it into the session
    if (message instanceof SslFilter.SslFilterMessage) {
        // This is a SSL message telling if the session has been secured or not
        HandshakeFuture handshakeFuture = (HandshakeFuture) ldapSession.getAttribute("HANDSHAKE_FUTURE");
        if (message == SslFilter.SESSION_SECURED) {
            // SECURED
            handshakeFuture.secured();
        } else {
            // UNSECURED
            handshakeFuture.cancel();
        }
        ldapSession.removeAttribute("HANDSHAKE_FUTURE");
        return;
    }
    Message response = (Message) message;
    if (LOG.isDebugEnabled()) {
        LOG.debug(I18n.msg(I18n.MSG_03243_MESSAGE_RECEIVED, response));
    }
    int messageId = response.getMessageId();
    // this check is necessary to prevent adding an abandoned operation's
    // result(s) to corresponding queue
    ResponseFuture<? extends Response> responseFuture = peekFromFutureMap(messageId);
    boolean isNoD = isNoticeOfDisconnect(response);
    if ((responseFuture == null) && !isNoD) {
        LOG.info("There is no future associated with the messageId {}, ignoring the message", messageId);
        return;
    }
    if (isNoD) {
        // close the session
        session.closeNow();
        return;
    }
    switch(response.getType()) {
        case ADD_RESPONSE:
            // Transform the response
            AddResponse addResponse = (AddResponse) response;
            AddFuture addFuture = (AddFuture) responseFuture;
            // remove the listener from the listener map
            if (LOG.isDebugEnabled()) {
                if (addResponse.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                    // Everything is fine, return the response
                    LOG.debug(I18n.msg(I18n.MSG_03209_ADD_SUCCESSFUL, addResponse));
                } else {
                    // We have had an error
                    LOG.debug(I18n.msg(I18n.MSG_03208_ADD_FAILED, addResponse));
                }
            }
            // Store the response into the future
            addFuture.set(addResponse);
            // Remove the future from the map
            removeFromFutureMaps(messageId);
            break;
        case BIND_RESPONSE:
            // Transform the response
            BindResponse bindResponse = (BindResponse) response;
            BindFuture bindFuture = (BindFuture) responseFuture;
            // remove the listener from the listener map
            if (bindResponse.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                authenticated.set(true);
                // Everything is fine, return the response
                if (LOG.isDebugEnabled()) {
                    LOG.debug(I18n.msg(I18n.MSG_03202_BIND_SUCCESSFUL, bindResponse));
                }
            } else {
                // We have had an error
                if (LOG.isDebugEnabled()) {
                    LOG.debug(I18n.msg(I18n.MSG_03201_BIND_FAIL, bindResponse));
                }
            }
            // Store the response into the future
            bindFuture.set(bindResponse);
            // Remove the future from the map
            removeFromFutureMaps(messageId);
            break;
        case COMPARE_RESPONSE:
            // Transform the response
            CompareResponse compareResponse = (CompareResponse) response;
            CompareFuture compareFuture = (CompareFuture) responseFuture;
            // remove the listener from the listener map
            if (LOG.isDebugEnabled()) {
                if (compareResponse.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                    // Everything is fine, return the response
                    LOG.debug(I18n.msg(I18n.MSG_03215_COMPARE_SUCCESSFUL, compareResponse));
                } else {
                    // We have had an error
                    LOG.debug(I18n.msg(I18n.MSG_03214_COMPARE_FAILED, compareResponse));
                }
            }
            // Store the response into the future
            compareFuture.set(compareResponse);
            // Remove the future from the map
            removeFromFutureMaps(messageId);
            break;
        case DEL_RESPONSE:
            // Transform the response
            DeleteResponse deleteResponse = (DeleteResponse) response;
            DeleteFuture deleteFuture = (DeleteFuture) responseFuture;
            if (LOG.isDebugEnabled()) {
                if (deleteResponse.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                    // Everything is fine, return the response
                    LOG.debug(I18n.msg(I18n.MSG_03217_DELETE_SUCCESSFUL, deleteResponse));
                } else {
                    // We have had an error
                    LOG.debug(I18n.msg(I18n.MSG_03216_DELETE_FAILED, deleteResponse));
                }
            }
            // Store the response into the future
            deleteFuture.set(deleteResponse);
            // Remove the future from the map
            removeFromFutureMaps(messageId);
            break;
        case EXTENDED_RESPONSE:
            // Transform the response
            ExtendedResponse extendedResponse = (ExtendedResponse) response;
            ExtendedFuture extendedFuture = (ExtendedFuture) responseFuture;
            // remove the listener from the listener map
            if (LOG.isDebugEnabled()) {
                if (extendedResponse.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                    // Everything is fine, return the response
                    LOG.debug(I18n.msg(I18n.MSG_03219_EXTENDED_SUCCESSFUL, extendedResponse));
                } else {
                    // We have had an error
                    LOG.debug(I18n.msg(I18n.MSG_03218_EXTENDED_FAILED, extendedResponse));
                }
            }
            // Store the response into the future
            extendedFuture.set(extendedResponse);
            // Remove the future from the map
            removeFromFutureMaps(messageId);
            break;
        case INTERMEDIATE_RESPONSE:
            IntermediateResponse intermediateResponse;
            if (responseFuture instanceof SearchFuture) {
                intermediateResponse = new IntermediateResponseImpl(messageId);
                addControls(intermediateResponse, response);
                ((SearchFuture) responseFuture).set(intermediateResponse);
            } else if (responseFuture instanceof ExtendedFuture) {
                intermediateResponse = new IntermediateResponseImpl(messageId);
                addControls(intermediateResponse, response);
                ((ExtendedFuture) responseFuture).set(intermediateResponse);
            } else {
                // currently we only support IR for search and extended operations
                throw new UnsupportedOperationException("Unknown ResponseFuture type " + responseFuture.getClass().getName());
            }
            intermediateResponse.setResponseName(((IntermediateResponse) response).getResponseName());
            intermediateResponse.setResponseValue(((IntermediateResponse) response).getResponseValue());
            break;
        case MODIFY_RESPONSE:
            // Transform the response
            ModifyResponse modifyResponse = (ModifyResponse) response;
            ModifyFuture modifyFuture = (ModifyFuture) responseFuture;
            if (LOG.isDebugEnabled()) {
                if (modifyResponse.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                    // Everything is fine, return the response
                    if (LOG.isDebugEnabled()) {
                        LOG.debug(I18n.msg(I18n.MSG_03224_MODIFY_SUCCESSFUL, modifyResponse));
                    }
                } else {
                    // We have had an error
                    if (LOG.isDebugEnabled()) {
                        LOG.debug(I18n.msg(I18n.MSG_03223_MODIFY_FAILED, modifyResponse));
                    }
                }
            }
            // Store the response into the future
            modifyFuture.set(modifyResponse);
            // Remove the future from the map
            removeFromFutureMaps(messageId);
            break;
        case MODIFYDN_RESPONSE:
            // Transform the response
            ModifyDnResponse modifyDnResponse = (ModifyDnResponse) response;
            ModifyDnFuture modifyDnFuture = (ModifyDnFuture) responseFuture;
            if (LOG.isDebugEnabled()) {
                if (modifyDnResponse.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                    // Everything is fine, return the response
                    LOG.debug(I18n.msg(I18n.MSG_03226_MODIFYDN_SUCCESSFUL, modifyDnResponse));
                } else {
                    // We have had an error
                    LOG.debug(I18n.msg(I18n.MSG_03225_MODIFYDN_FAILED, modifyDnResponse));
                }
            }
            // Store the response into the future
            modifyDnFuture.set(modifyDnResponse);
            // Remove the future from the map
            removeFromFutureMaps(messageId);
            break;
        case SEARCH_RESULT_DONE:
            // Store the response into the responseQueue
            SearchResultDone searchResultDone = (SearchResultDone) response;
            SearchFuture searchFuture = (SearchFuture) responseFuture;
            if (LOG.isDebugEnabled()) {
                if (searchResultDone.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                    // Everything is fine, return the response
                    LOG.debug(I18n.msg(I18n.MSG_03232_SEARCH_SUCCESSFUL, searchResultDone));
                } else {
                    // We have had an error
                    LOG.debug(I18n.msg(I18n.MSG_03230_SEARCH_FAILED, searchResultDone));
                }
            }
            // Store the response into the future
            searchFuture.set(searchResultDone);
            // Remove the future from the map
            removeFromFutureMaps(messageId);
            break;
        case SEARCH_RESULT_ENTRY:
            // Store the response into the responseQueue
            SearchResultEntry searchResultEntry = (SearchResultEntry) response;
            if (schemaManager != null) {
                searchResultEntry.setEntry(new DefaultEntry(schemaManager, searchResultEntry.getEntry()));
            }
            searchFuture = (SearchFuture) responseFuture;
            if (LOG.isDebugEnabled()) {
                LOG.debug(I18n.msg(I18n.MSG_03229_SEARCH_ENTRY_FOUND, searchResultEntry));
            }
            // Store the response into the future
            searchFuture.set(searchResultEntry);
            break;
        case SEARCH_RESULT_REFERENCE:
            // Store the response into the responseQueue
            SearchResultReference searchResultReference = (SearchResultReference) response;
            searchFuture = (SearchFuture) responseFuture;
            if (LOG.isDebugEnabled()) {
                LOG.debug(I18n.msg(I18n.MSG_03231_SEARCH_REFERENCE_FOUND, searchResultReference));
            }
            // Store the response into the future
            searchFuture.set(searchResultReference);
            break;
        default:
            throw new IllegalStateException("Unexpected response type " + response.getType());
    }
}
Also used : ModifyFuture(org.apache.directory.ldap.client.api.future.ModifyFuture) HandshakeFuture(org.apache.directory.ldap.client.api.future.HandshakeFuture) Message(org.apache.directory.api.ldap.model.message.Message) DefaultEntry(org.apache.directory.api.ldap.model.entry.DefaultEntry) SearchResultReference(org.apache.directory.api.ldap.model.message.SearchResultReference) IntermediateResponseImpl(org.apache.directory.api.ldap.model.message.IntermediateResponseImpl) BindResponse(org.apache.directory.api.ldap.model.message.BindResponse) BindFuture(org.apache.directory.ldap.client.api.future.BindFuture) ModifyDnFuture(org.apache.directory.ldap.client.api.future.ModifyDnFuture) IntermediateResponse(org.apache.directory.api.ldap.model.message.IntermediateResponse) ModifyDnResponse(org.apache.directory.api.ldap.model.message.ModifyDnResponse) CompareFuture(org.apache.directory.ldap.client.api.future.CompareFuture) ModifyResponse(org.apache.directory.api.ldap.model.message.ModifyResponse) CompareResponse(org.apache.directory.api.ldap.model.message.CompareResponse) SearchResultDone(org.apache.directory.api.ldap.model.message.SearchResultDone) ExtendedFuture(org.apache.directory.ldap.client.api.future.ExtendedFuture) AddResponse(org.apache.directory.api.ldap.model.message.AddResponse) DeleteFuture(org.apache.directory.ldap.client.api.future.DeleteFuture) DeleteResponse(org.apache.directory.api.ldap.model.message.DeleteResponse) ExtendedResponse(org.apache.directory.api.ldap.model.message.ExtendedResponse) AddFuture(org.apache.directory.ldap.client.api.future.AddFuture) SearchFuture(org.apache.directory.ldap.client.api.future.SearchFuture) SearchResultEntry(org.apache.directory.api.ldap.model.message.SearchResultEntry)

Example 3 with ExtendedFuture

use of org.apache.directory.ldap.client.api.future.ExtendedFuture in project directory-ldap-api by apache.

the class LdapNetworkConnection method connect.

// -------------------------- The methods ---------------------------//
/**
 * {@inheritDoc}
 */
@Override
public boolean connect() throws LdapException {
    if ((ldapSession != null) && connected.get()) {
        // No need to connect if we already have a connected session
        return true;
    }
    // Create the connector if needed
    if (connector == null) {
        createConnector();
    }
    // Build the connection address
    SocketAddress address = new InetSocketAddress(config.getLdapHost(), config.getLdapPort());
    // And create the connection future
    timeout = config.getTimeout();
    long maxRetry = System.currentTimeMillis() + timeout;
    ConnectFuture connectionFuture = null;
    boolean interrupted = false;
    while (maxRetry > System.currentTimeMillis() && !interrupted) {
        connectionFuture = connector.connect(address);
        boolean result = false;
        // Wait until it's established
        try {
            result = connectionFuture.await(timeout);
        } catch (InterruptedException e) {
            connector.dispose();
            connector = null;
            LOG.debug(I18n.msg(I18n.MSG_03221_INTERRUPTED_WAITING_FOR_CONNECTION, config.getLdapHost(), config.getLdapPort()), e);
            interrupted = true;
            throw new LdapOtherException(e.getMessage(), e);
        } finally {
            if (result) {
                boolean isConnected = connectionFuture.isConnected();
                if (!isConnected) {
                    Throwable connectionException = connectionFuture.getException();
                    if ((connectionException instanceof ConnectException) || (connectionException instanceof UnresolvedAddressException)) {
                        // We know that there was a permanent error such as "connection refused".
                        if (LOG.isDebugEnabled()) {
                            LOG.debug(I18n.msg(I18n.MSG_03245_CONNECTION_ERROR, connectionFuture.getException().getMessage()));
                        }
                    }
                    if (LOG.isDebugEnabled()) {
                        LOG.debug(I18n.msg(I18n.MSG_03244_CONNECTION_RETRYING));
                    }
                    // Wait 500 ms and retry
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        connector = null;
                        LOG.debug(I18n.msg(I18n.MSG_03221_INTERRUPTED_WAITING_FOR_CONNECTION, config.getLdapHost(), config.getLdapPort()), e);
                        interrupted = true;
                        throw new LdapOtherException(e.getMessage(), e);
                    }
                } else {
                    break;
                }
            }
        }
    }
    if (connectionFuture == null) {
        connector.dispose();
        throw new InvalidConnectionException("Cannot connect");
    }
    boolean isConnected = connectionFuture.isConnected();
    if (!isConnected) {
        // disposing connector if not connected
        try {
            close();
        } catch (IOException ioe) {
        // Nothing to do
        }
        Throwable e = connectionFuture.getException();
        if (e != null) {
            StringBuilder message = new StringBuilder("Cannot connect to the server: ");
            // (most of the time no message is associated with this exception)
            if ((e instanceof UnresolvedAddressException) && (e.getMessage() == null)) {
                message.append("Hostname '");
                message.append(config.getLdapHost());
                message.append("' could not be resolved.");
                throw new InvalidConnectionException(message.toString(), e);
            }
            // Default case
            message.append(e.getMessage());
            throw new InvalidConnectionException(message.toString(), e);
        }
        return false;
    }
    // Get the close future for this session
    CloseFuture closeFuture = connectionFuture.getSession().getCloseFuture();
    // Add a listener to close the session in the session.
    closeFuture.addListener(new IoFutureListener<IoFuture>() {

        @Override
        public void operationComplete(IoFuture future) {
            // Process all the waiting operations and cancel them
            LOG.debug(I18n.msg(I18n.MSG_03238_NOD_RECEIVED));
            for (ResponseFuture<?> responseFuture : futureMap.values()) {
                LOG.debug(I18n.msg(I18n.MSG_03235_CLOSING, responseFuture));
                responseFuture.cancel();
                try {
                    if (responseFuture instanceof AddFuture) {
                        ((AddFuture) responseFuture).set(AddNoDResponse.PROTOCOLERROR);
                    } else if (responseFuture instanceof BindFuture) {
                        ((BindFuture) responseFuture).set(BindNoDResponse.PROTOCOLERROR);
                    } else if (responseFuture instanceof CompareFuture) {
                        ((CompareFuture) responseFuture).set(CompareNoDResponse.PROTOCOLERROR);
                    } else if (responseFuture instanceof DeleteFuture) {
                        ((DeleteFuture) responseFuture).set(DeleteNoDResponse.PROTOCOLERROR);
                    } else if (responseFuture instanceof ExtendedFuture) {
                        ((ExtendedFuture) responseFuture).set(ExtendedNoDResponse.PROTOCOLERROR);
                    } else if (responseFuture instanceof ModifyFuture) {
                        ((ModifyFuture) responseFuture).set(ModifyNoDResponse.PROTOCOLERROR);
                    } else if (responseFuture instanceof ModifyDnFuture) {
                        ((ModifyDnFuture) responseFuture).set(ModifyDnNoDResponse.PROTOCOLERROR);
                    } else if (responseFuture instanceof SearchFuture) {
                        ((SearchFuture) responseFuture).set(SearchNoDResponse.PROTOCOLERROR);
                    }
                } catch (InterruptedException e) {
                    LOG.error(I18n.err(I18n.ERR_03202_ERROR_PROCESSING_NOD, responseFuture), e);
                }
                futureMap.remove(messageId.get());
            }
            futureMap.clear();
        }
    });
    // Get back the session
    ldapSession = connectionFuture.getSession();
    connected.set(true);
    // Store the container into the session if we don't have one
    @SuppressWarnings("unchecked") LdapMessageContainer<MessageDecorator<? extends Message>> container = (LdapMessageContainer<MessageDecorator<? extends Message>>) ldapSession.getAttribute(LdapDecoder.MESSAGE_CONTAINER_ATTR);
    if (container != null) {
        if ((schemaManager != null) && !(container.getBinaryAttributeDetector() instanceof SchemaBinaryAttributeDetector)) {
            container.setBinaryAttributeDetector(new SchemaBinaryAttributeDetector(schemaManager));
        }
    } else {
        BinaryAttributeDetector atDetector = new DefaultConfigurableBinaryAttributeDetector();
        if (schemaManager != null) {
            atDetector = new SchemaBinaryAttributeDetector(schemaManager);
        }
        ldapSession.setAttribute(LdapDecoder.MESSAGE_CONTAINER_ATTR, new LdapMessageContainer<MessageDecorator<? extends Message>>(codec, atDetector));
    }
    // Initialize the MessageId
    messageId.set(0);
    // And return
    return true;
}
Also used : LdapMessageContainer(org.apache.directory.api.ldap.codec.api.LdapMessageContainer) ModifyFuture(org.apache.directory.ldap.client.api.future.ModifyFuture) Message(org.apache.directory.api.ldap.model.message.Message) InetSocketAddress(java.net.InetSocketAddress) IoFuture(org.apache.mina.core.future.IoFuture) ConnectFuture(org.apache.mina.core.future.ConnectFuture) BindFuture(org.apache.directory.ldap.client.api.future.BindFuture) ModifyDnFuture(org.apache.directory.ldap.client.api.future.ModifyDnFuture) InvalidConnectionException(org.apache.directory.ldap.client.api.exception.InvalidConnectionException) DefaultConfigurableBinaryAttributeDetector(org.apache.directory.api.ldap.codec.api.DefaultConfigurableBinaryAttributeDetector) UnresolvedAddressException(java.nio.channels.UnresolvedAddressException) SocketAddress(java.net.SocketAddress) InetSocketAddress(java.net.InetSocketAddress) CompareFuture(org.apache.directory.ldap.client.api.future.CompareFuture) SchemaBinaryAttributeDetector(org.apache.directory.api.ldap.codec.api.SchemaBinaryAttributeDetector) LdapOtherException(org.apache.directory.api.ldap.model.exception.LdapOtherException) ConnectException(java.net.ConnectException) CloseFuture(org.apache.mina.core.future.CloseFuture) ResponseFuture(org.apache.directory.ldap.client.api.future.ResponseFuture) ExtendedFuture(org.apache.directory.ldap.client.api.future.ExtendedFuture) IOException(java.io.IOException) SchemaBinaryAttributeDetector(org.apache.directory.api.ldap.codec.api.SchemaBinaryAttributeDetector) DefaultConfigurableBinaryAttributeDetector(org.apache.directory.api.ldap.codec.api.DefaultConfigurableBinaryAttributeDetector) BinaryAttributeDetector(org.apache.directory.api.ldap.codec.api.BinaryAttributeDetector) DeleteFuture(org.apache.directory.ldap.client.api.future.DeleteFuture) MessageDecorator(org.apache.directory.api.ldap.codec.api.MessageDecorator) AddFuture(org.apache.directory.ldap.client.api.future.AddFuture) SearchFuture(org.apache.directory.ldap.client.api.future.SearchFuture)

Example 4 with ExtendedFuture

use of org.apache.directory.ldap.client.api.future.ExtendedFuture in project directory-ldap-api by apache.

the class LdapNetworkConnection method extendedAsync.

/**
 * {@inheritDoc}
 */
@Override
public ExtendedFuture extendedAsync(ExtendedRequest extendedRequest) throws LdapException {
    if (extendedRequest == null) {
        String msg = "Cannot process a null extendedRequest";
        LOG.debug(msg);
        throw new IllegalArgumentException(msg);
    }
    // try to connect, if we aren't already connected.
    connect();
    checkSession();
    int newId = messageId.incrementAndGet();
    extendedRequest.setMessageId(newId);
    ExtendedFuture extendedFuture = new ExtendedFuture(this, newId);
    addToFutureMap(newId, extendedFuture);
    // Send the request to the server
    writeRequest(extendedRequest);
    // Ok, done return the future
    return extendedFuture;
}
Also used : ExtendedFuture(org.apache.directory.ldap.client.api.future.ExtendedFuture)

Aggregations

ExtendedFuture (org.apache.directory.ldap.client.api.future.ExtendedFuture)4 IOException (java.io.IOException)2 ConnectException (java.net.ConnectException)2 UnresolvedAddressException (java.nio.channels.UnresolvedAddressException)2 LdapOtherException (org.apache.directory.api.ldap.model.exception.LdapOtherException)2 ExtendedResponse (org.apache.directory.api.ldap.model.message.ExtendedResponse)2 Message (org.apache.directory.api.ldap.model.message.Message)2 InvalidConnectionException (org.apache.directory.ldap.client.api.exception.InvalidConnectionException)2 AddFuture (org.apache.directory.ldap.client.api.future.AddFuture)2 BindFuture (org.apache.directory.ldap.client.api.future.BindFuture)2 CompareFuture (org.apache.directory.ldap.client.api.future.CompareFuture)2 DeleteFuture (org.apache.directory.ldap.client.api.future.DeleteFuture)2 ModifyDnFuture (org.apache.directory.ldap.client.api.future.ModifyDnFuture)2 ModifyFuture (org.apache.directory.ldap.client.api.future.ModifyFuture)2 SearchFuture (org.apache.directory.ldap.client.api.future.SearchFuture)2 InetSocketAddress (java.net.InetSocketAddress)1 SocketAddress (java.net.SocketAddress)1 DecoderException (org.apache.directory.api.asn1.DecoderException)1 BinaryAttributeDetector (org.apache.directory.api.ldap.codec.api.BinaryAttributeDetector)1 DefaultConfigurableBinaryAttributeDetector (org.apache.directory.api.ldap.codec.api.DefaultConfigurableBinaryAttributeDetector)1