/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt * or http://forgerock.org/license/CDDLv1.0.html. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at legal-notices/CDDLv1_0.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2010 Sun Microsystems, Inc. * Portions copyright 2012-2014 ForgeRock AS. */ package org.forgerock.opendj.ldap; import static com.forgerock.opendj.util.Validator.ensureNotNull; import java.util.LinkedList; import java.util.List; import java.util.concurrent.TimeUnit; import javax.net.ssl.SSLContext; import org.glassfish.grizzly.nio.transport.TCPNIOTransport; /** * Common options for LDAP client connections. *
* For example you set LDAP options when you want to use StartTLS. * *
* LDAPOptions options = new LDAPOptions(); * SSLContext sslContext = * new SSLContextBuilder().setTrustManager(...).getSSLContext(); * options.setSSLContext(sslContext); * options.setUseStartTLS(true); * * String host = ...; * int port = ...; * LDAPConnectionFactory factory = new LDAPConnectionFactory(host, port, options); * Connection connection = factory.getConnection(); * // Connection uses StartTLS... **/ public final class LDAPOptions extends CommonLDAPOptions
* The suites must be supported by the SSLContext specified in * {@link #setSSLContext(SSLContext)}. Following a successful call to this * method, only the suites listed in the protocols parameter are enabled for * use. * * @param suites * Names of all the suites to enable. * @return A reference to this set of options. */ public LDAPOptions addEnabledCipherSuite(final String... suites) { for (final String suite : suites) { enabledCipherSuites.add(ensureNotNull(suite)); } return this; } /** * Adds the protocol versions enabled for secure connections with the * Directory Server. *
* The protocols must be supported by the SSLContext specified in * {@link #setSSLContext(SSLContext)}. Following a successful call to this * method, only the protocols listed in the protocols parameter are enabled * for use. * * @param protocols * Names of all the protocols to enable. * @return A reference to this set of options. */ public LDAPOptions addEnabledProtocol(final String... protocols) { for (final String protocol : protocols) { enabledProtocols.add(ensureNotNull(protocol)); } return this; } /** * Returns the connect timeout in the specified unit. If a connection is not * established within the timeout period, then a * {@link TimeoutResultException} error result will be returned. A timeout * setting of 0 causes the OS connect timeout to be used. *
* The default operation timeout is 10 seconds and may be configured using
* the {@code org.forgerock.opendj.io.connectTimeout} property.
*
* @param unit
* The time unit.
* @return The connect timeout, which may be 0 if there is no connect
* timeout.
*/
public long getConnectTimeout(final TimeUnit unit) {
return unit.convert(connectTimeoutInMillis, TimeUnit.MILLISECONDS);
}
/**
* Returns the names of the protocol versions which are currently enabled
* for secure connections with the Directory Server.
*
* @return An array of protocols or empty set if the default protocols are
* to be used.
*/
public List
* By default no SSL context will be used, indicating that connections will
* not be secured. If a non-{@code null} SSL context is returned then
* connections will be secured using either SSL or StartTLS depending on
* {@link #useStartTLS()}.
*
* @return The SSL context which will be used when initiating secure
* connections with the Directory Server, which may be {@code null}
* indicating that connections will not be secured.
*/
public SSLContext getSSLContext() {
return sslContext;
}
/**
* Returns the operation timeout in the specified unit. If a response is not
* received from the Directory Server within the timeout period, then the
* operation will be abandoned and a {@link TimeoutResultException} error
* result returned. A timeout setting of 0 disables operation timeout
* limits.
*
* The default operation timeout is 0 (no timeout) and may be configured
* using the {@code org.forgerock.opendj.io.timeout} property.
*
* @param unit
* The time unit.
* @return The operation timeout, which may be 0 if there is no operation
* timeout.
*/
public long getTimeout(final TimeUnit unit) {
return unit.convert(timeoutInMillis, TimeUnit.MILLISECONDS);
}
/**
* Sets the connect timeout. If a connection is not established within the
* timeout period, then a {@link TimeoutResultException} error result will
* be returned. A timeout setting of 0 causes the OS connect timeout to be
* used.
*
* The default operation timeout is 10 seconds and may be configured using
* the {@code org.forgerock.opendj.io.connectTimeout} property.
*
* @param timeout
* The connect timeout, which may be 0 if there is no connect
* timeout.
* @param unit
* The time unit.
* @return A reference to this set of options.
*/
public LDAPOptions setConnectTimeout(final long timeout, final TimeUnit unit) {
this.connectTimeoutInMillis = unit.toMillis(timeout);
return this;
}
/**
* Sets the SSL context which will be used when initiating connections with
* the Directory Server.
*
* By default no SSL context will be used, indicating that connections will
* not be secured. If a non-{@code null} SSL context is returned then
* connections will be secured using either SSL or StartTLS depending on
* {@link #useStartTLS()}.
*
* @param sslContext
* The SSL context which will be used when initiating secure
* connections with the Directory Server, which may be
* {@code null} indicating that connections will not be secured.
* @return A reference to this set of options.
*/
public LDAPOptions setSSLContext(final SSLContext sslContext) {
this.sslContext = sslContext;
return this;
}
/**
* Sets the operation timeout. If a response is not received from the
* Directory Server within the timeout period, then the operation will be
* abandoned and a {@link TimeoutResultException} error result returned. A
* timeout setting of 0 disables operation timeout limits.
*
* The default operation timeout is 0 (no timeout) and may be configured
* using the {@code org.forgerock.opendj.io.timeout} property.
*
* @param timeout
* The operation timeout, which may be 0 if there is no operation
* timeout.
* @param unit
* The time unit.
* @return A reference to this set of options.
*/
public LDAPOptions setTimeout(final long timeout, final TimeUnit unit) {
this.timeoutInMillis = unit.toMillis(timeout);
return this;
}
/**
* Specifies whether or not SSL or StartTLS should be used for securing
* connections when an SSL context is specified.
*
* By default SSL will be used in preference to StartTLS.
*
* @param useStartTLS
* {@code true} if StartTLS should be used for securing
* connections when an SSL context is specified, otherwise
* {@code false} indicating that SSL should be used.
* @return A reference to this set of options.
*/
public LDAPOptions setUseStartTLS(final boolean useStartTLS) {
this.useStartTLS = useStartTLS;
return this;
}
/**
* Indicates whether or not SSL or StartTLS should be used for securing
* connections when an SSL context is specified.
*
* By default SSL will be used in preference to StartTLS.
*
* @return {@code true} if StartTLS should be used for securing connections
* when an SSL context is specified, otherwise {@code false}
* indicating that SSL should be used.
*/
public boolean useStartTLS() {
return useStartTLS;
}
/**
* {@inheritDoc}
*/
@Override
public LDAPOptions setDecodeOptions(DecodeOptions decodeOptions) {
// This method is required for binary compatibility.
return super.setDecodeOptions(decodeOptions);
}
/**
* {@inheritDoc}
*/
@Override
public LDAPOptions setTCPNIOTransport(TCPNIOTransport transport) {
// This method is required for binary compatibility.
return super.setTCPNIOTransport(transport);
}
@Override
LDAPOptions getThis() {
return this;
}
}