use of org.apache.directory.api.ldap.codec.api.BinaryAttributeDetector 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;
}
use of org.apache.directory.api.ldap.codec.api.BinaryAttributeDetector in project directory-ldap-api by apache.
the class QuirkySchemaTest method createFakeConnection.
private LdapConnection createFakeConnection(final String schemaFileName) {
return new LdapConnection() {
@Override
public void unBind() throws LdapException {
}
@Override
public void setTimeOut(long timeOut) {
}
@Override
public void setSchemaManager(SchemaManager schemaManager) {
}
@Override
public void setBinaryAttributeDetector(BinaryAttributeDetector binaryAttributeDetecter) {
}
@Override
public SearchCursor search(SearchRequest searchRequest) throws LdapException {
return null;
}
@Override
public EntryCursor search(String baseDn, String filter, SearchScope scope, String... attributes) throws LdapException {
return null;
}
@Override
public EntryCursor search(Dn baseDn, String filter, SearchScope scope, String... attributes) throws LdapException {
return null;
}
@Override
public void rename(Dn entryDn, Rdn newRdn, boolean deleteOldRdn) throws LdapException {
}
@Override
public void rename(String entryDn, String newRdn, boolean deleteOldRdn) throws LdapException {
}
@Override
public void rename(Dn entryDn, Rdn newRdn) throws LdapException {
}
@Override
public void rename(String entryDn, String newRdn) throws LdapException {
}
@Override
public void moveAndRename(String entryDn, String newDn, boolean deleteOldRdn) throws LdapException {
}
@Override
public void moveAndRename(Dn entryDn, Dn newDn, boolean deleteOldRdn) throws LdapException {
}
@Override
public void moveAndRename(String entryDn, String newDn) throws LdapException {
}
@Override
public void moveAndRename(Dn entryDn, Dn newDn) throws LdapException {
}
@Override
public void move(Dn entryDn, Dn newSuperiorDn) throws LdapException {
}
@Override
public void move(String entryDn, String newSuperiorDn) throws LdapException {
}
@Override
public ModifyDnResponse modifyDn(ModifyDnRequest modDnRequest) throws LdapException {
return null;
}
@Override
public ModifyResponse modify(ModifyRequest modRequest) throws LdapException {
return null;
}
@Override
public void modify(Entry entry, ModificationOperation modOp) throws LdapException {
}
@Override
public void modify(String dn, Modification... modifications) throws LdapException {
}
@Override
public void modify(Dn dn, Modification... modifications) throws LdapException {
}
@Override
public Entry lookup(String dn, Control[] controls, String... attributes) throws LdapException {
return lookup(new Dn(dn));
}
@Override
public Entry lookup(String dn, String... attributes) throws LdapException {
return lookup(new Dn(dn));
}
@Override
public Entry lookup(Dn dn, Control[] controls, String... attributes) throws LdapException {
return lookup(dn);
}
@Override
public Entry lookup(Dn dn, String... attributes) throws LdapException {
return lookup(dn);
}
@Override
public Entry lookup(String dn) throws LdapException {
return lookup(new Dn(dn));
}
@Override
public Entry lookup(Dn dn) throws LdapException {
if (dn.isRootDse()) {
Entry entry = new DefaultEntry(dn);
entry.add(SchemaConstants.SUBSCHEMA_SUBENTRY_AT, SCHEMA_DN);
return entry;
} else if (dn.toString().equals(SCHEMA_DN)) {
Entry entry = loadSchemaEntry(schemaFileName);
return entry;
} else {
throw new UnsupportedOperationException("Unexpected DN " + dn);
}
}
@Override
public void loadSchemaRelaxed() throws LdapException {
}
@Override
public void loadSchema() throws LdapException {
}
@Override
public boolean isRequestCompleted(int messageId) {
return true;
}
@Override
public boolean isControlSupported(String controlOID) throws LdapException {
return true;
}
@Override
public boolean isConnected() {
return true;
}
@Override
public boolean isAuthenticated() {
return false;
}
@Override
public List<String> getSupportedControls() throws LdapException {
return null;
}
@Override
public SchemaManager getSchemaManager() {
return null;
}
@Override
public Entry getRootDse(String... attributes) throws LdapException {
return lookup(Dn.ROOT_DSE);
}
@Override
public Entry getRootDse() throws LdapException {
return lookup(Dn.ROOT_DSE);
}
@Override
public LdapApiService getCodecService() {
return null;
}
@Override
public BinaryAttributeDetector getBinaryAttributeDetector() {
return null;
}
@Override
public ExtendedResponse extended(ExtendedRequest extendedRequest) throws LdapException {
return null;
}
@Override
public ExtendedResponse extended(Oid oid, byte[] value) throws LdapException {
return null;
}
@Override
public ExtendedResponse extended(Oid oid) throws LdapException {
return null;
}
@Override
public ExtendedResponse extended(String oid, byte[] value) throws LdapException {
return null;
}
@Override
public ExtendedResponse extended(String oid) throws LdapException {
return null;
}
@Override
public boolean exists(Dn dn) throws LdapException {
return false;
}
@Override
public boolean exists(String dn) throws LdapException {
return false;
}
@Override
public boolean doesFutureExistFor(int messageId) {
return false;
}
@Override
public DeleteResponse delete(DeleteRequest deleteRequest) throws LdapException {
return null;
}
@Override
public void delete(Dn dn) throws LdapException {
}
@Override
public void delete(String dn) throws LdapException {
}
@Override
public boolean connect() throws LdapException {
return true;
}
@Override
public CompareResponse compare(CompareRequest compareRequest) throws LdapException {
return null;
}
@Override
public boolean compare(Dn dn, String attributeName, byte[] value) throws LdapException {
return false;
}
@Override
public boolean compare(Dn dn, String attributeName, String value) throws LdapException {
return false;
}
@Override
public boolean compare(String dn, String attributeName, byte[] value) throws LdapException {
return false;
}
@Override
public boolean compare(String dn, String attributeName, String value) throws LdapException {
return false;
}
@Override
public void close() throws IOException {
}
@Override
public BindResponse bind(BindRequest bindRequest) throws LdapException {
return null;
}
@Override
public void bind(Dn name, String credentials) throws LdapException {
}
@Override
public void bind(Dn name) throws LdapException {
}
@Override
public void bind(String name, String credentials) throws LdapException {
}
@Override
public void bind(String name) throws LdapException {
}
@Override
public void bind() throws LdapException {
}
@Override
public void anonymousBind() throws LdapException {
}
@Override
public AddResponse add(AddRequest addRequest) throws LdapException {
return null;
}
@Override
public void add(Entry entry) throws LdapException {
}
@Override
public void abandon(AbandonRequest abandonRequest) {
}
@Override
public void abandon(int messageId) {
}
@Override
public boolean compare(String dn, String attributeName, Value value) throws LdapException {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean compare(Dn dn, String attributeName, Value value) throws LdapException {
// TODO Auto-generated method stub
return false;
}
@Override
public BindResponse bind(SaslRequest saslRequest) throws LdapException {
// TODO Auto-generated method stub
return null;
}
};
}
Aggregations