Class LdapServer
- java.lang.Object
-
- org.forgerock.opendj.ldap.LdapServer
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
public final class LdapServer extends Object implements Closeable
An LDAP server connection listener which waits for LDAP connection requests to come in over the network and binds them to a server connection created using the provided server connection factory.When processing requests, server connection implementations are passed an integer as the first parameter. This integer represents the
requestID
associated with the client request and corresponds to therequestID
passed as a parameter to abandon and cancel extended requests. The request ID may also be useful for logging purposes.An
LdapServer
does not require server connection implementations to return a result when processing requests. More specifically, anLdapServer
does not maintain any internal state information associated with each request which must be released. This is useful when implementing LDAP abandon operations which may prevent results being sent for abandoned operations.The following code illustrates how to create a simple LDAP server:
/** Server connection. */ class MyClientConnection implements BiFunction<Integer, Request, Flowable<Response>> { private final LDAPClientContext clientContext; private MyClientConnection(LDAPClientContext clientContext) { this.clientContext = clientContext; } public Flowable<Response> apply(Integer requestID, Request request) throws Exception { // ... } } /** Server connection factory. */ class MyServer implements Function<LdapSession, BiFunction<Integer, Request, Flowable<Response>>> { public BiFunction<Integer, Request, Flowable<Response>> accept(LDAPClientContext context) { System.out.println("Connection from: " + context.getPeerAddress()); return new MyClientConnection(context); } } public static void main(String[] args) throws Exception { try (LdapServer server = new LdapServer(1389, new MyServer())) { // ... } }
-
-
Field Summary
Fields Modifier and Type Field Description static String
ASYNC_RX_TRANSPORT
The name of asynchronous transport implementation which has the value "AsyncRx".static Option<Integer>
BUFFER_SIZE
Size of the buffer used when reading/writing data from/to the network.static Option<Integer>
CONNECT_MAX_BACKLOG
Specifies the maximum queue length for incoming connections requests.static Option<Duration>
CONNECT_TIMEOUT
Specifies the connect timeout.static Option<DecodeOptions>
DECODE_OPTIONS
Sets the decoding options which will be used to control how requests and responses are decoded.static String
DEFAULT_TRANSPORT
The name of the default transport implementation which has the value "Default".static Option<Integer>
MAX_CONCURRENT_REQUESTS
Specifies the maximum number of concurrent requests per connection.static Option<Integer>
MAX_MSG_SIZE_IN_BYTES
Specifies the maximum request size in bytes for incoming LDAP messages.static String
MEMORY_RX_TRANSPORT
The name of the memory transport implementation which has the value "MemoryRx".static Option<IntConsumer>
PROBE_BYTES_READ
Callback invoked each time this server read bytes from the network.static Option<IntConsumer>
PROBE_BYTES_WRITTEN
Callback invoked each time this server write bytes to the network.static Option<ProxyProtocolHeader>
PROXY_PROTOCOL_HEADER_CLIENT
Enables the proxy protocol for client connections using the provided proxy header.static Option<Set<AddressMask>>
PROXY_PROTOCOL_SERVER_ALLOWED_CLIENTS
Specifies the clients that are allowed to access the server and that should use proxy protocol.static Option<Boolean>
PROXY_PROTOCOL_SERVER_ENABLED
Indicates if the proxy protocol is enabled on the server .static Option<Integer>
SELECTOR_THREAD_COUNT
Specifies the number of threads which will be used to handle incoming network events.static Option<String>
SELECTOR_THREAD_NAME
Specifies the thread name used for selector threads.static Option<Boolean>
SO_KEEPALIVE
Specifies the value of theSO_KEEPALIVE
socket option for new connections.static Option<Integer>
SO_LINGER_IN_SECONDS
Specifies the value of theSO_LINGER
socket option for new connections.static Option<Boolean>
SO_REUSE_ADDRESS
Specifies the value of theSO_REUSEADDR
socket option for new connections.static Option<SslOptions>
SSL_OPTIONS
Specifies the options to use for the SSL support ornull
if SSL is disabled.static String
SYNC_RX_TRANSPORT
The name of synchronous transport implementation which has the value "SyncRx".static Option<Boolean>
TCP_NO_DELAY
Specifies the value of theTCP_NODELAY
socket option for new connections.static Option<String>
TRANSPORT
Specifies the name of the transport implementation to be used.static Option<Duration>
WRITE_TIMEOUT
Maximum time allowed for write operations to complete.
-
Constructor Summary
Constructors Constructor Description LdapServer(int port, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory)
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.LdapServer(int port, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory, Options options)
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.LdapServer(String host, int port, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory)
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.LdapServer(String host, int port, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory, Options options)
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.LdapServer(Set<InetSocketAddress> addresses, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory)
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.LdapServer(Set<InetSocketAddress> addresses, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory, Options options)
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
Closes this LDAP connection listener.InetSocketAddress
firstSocketAddress()
Returns the first address that his LDAP listener is listening on.Options
getOptions()
Returns a copy of the options currently used by this LDAP listener.Set<InetSocketAddress>
getSocketAddresses()
Returns the addresses that this LDAP listener is listening on.void
setOptions(Options options)
Updates the options of this LDAP listener.String
toString()
-
-
-
Field Detail
-
CONNECT_MAX_BACKLOG
public static final Option<Integer> CONNECT_MAX_BACKLOG
Specifies the maximum queue length for incoming connections requests. If a connection request arrives when the queue is full, the connection is refused.
-
MAX_CONCURRENT_REQUESTS
public static final Option<Integer> MAX_CONCURRENT_REQUESTS
Specifies the maximum number of concurrent requests per connection. Once this number is reached, back-pressure mechanism will stop reading requests from the connection.
-
DEFAULT_TRANSPORT
public static final String DEFAULT_TRANSPORT
The name of the default transport implementation which has the value "Default".- See Also:
- Constant Field Values
-
MEMORY_RX_TRANSPORT
public static final String MEMORY_RX_TRANSPORT
The name of the memory transport implementation which has the value "MemoryRx".- See Also:
- Constant Field Values
-
ASYNC_RX_TRANSPORT
public static final String ASYNC_RX_TRANSPORT
The name of asynchronous transport implementation which has the value "AsyncRx".- See Also:
- Constant Field Values
-
SYNC_RX_TRANSPORT
public static final String SYNC_RX_TRANSPORT
The name of synchronous transport implementation which has the value "SyncRx".- See Also:
- Constant Field Values
-
TRANSPORT
public static final Option<String> TRANSPORT
Specifies the name of the transport implementation to be used. Possible values are:
-
TCP_NO_DELAY
public static final Option<Boolean> TCP_NO_DELAY
Specifies the value of theTCP_NODELAY
socket option for new connections.The default setting is
true
and may be configured using the "org.forgerock.opendj.io.tcpNoDelay" property.
-
SO_REUSE_ADDRESS
public static final Option<Boolean> SO_REUSE_ADDRESS
Specifies the value of theSO_REUSEADDR
socket option for new connections.The default setting is
true
and may be configured using the "org.forgerock.opendj.io.reuseAddress" property.
-
SO_LINGER_IN_SECONDS
public static final Option<Integer> SO_LINGER_IN_SECONDS
Specifies the value of theSO_LINGER
socket option for new connections.The default setting is
-1
(disabled) and may be configured using the "org.forgerock.opendj.io.linger" property.
-
SO_KEEPALIVE
public static final Option<Boolean> SO_KEEPALIVE
Specifies the value of theSO_KEEPALIVE
socket option for new connections.The default setting is
true
and may be configured using the "org.forgerock.opendj.io.keepAlive" property.
-
CONNECT_TIMEOUT
public static final Option<Duration> CONNECT_TIMEOUT
Specifies the connect timeout. If a connection is not established within the timeout period (incl. SSL negotiation, initial bind request, keep-alive, availability check), then aTimeoutResultException
error result will be returned.The default operation timeout is 10 seconds and may be configured using the "org.forgerock.opendj.io.connectTimeout" property. A timeout setting of 0 causes the OS connect timeout to be used.
-
WRITE_TIMEOUT
public static final Option<Duration> WRITE_TIMEOUT
Maximum time allowed for write operations to complete. Once the timeout is reached the socket will become unusable and an appropriate exception returned.
-
BUFFER_SIZE
public static final Option<Integer> BUFFER_SIZE
Size of the buffer used when reading/writing data from/to the network.
-
DECODE_OPTIONS
public static final Option<DecodeOptions> DECODE_OPTIONS
Sets the decoding options which will be used to control how requests and responses are decoded.
-
MAX_MSG_SIZE_IN_BYTES
public static final Option<Integer> MAX_MSG_SIZE_IN_BYTES
Specifies the maximum request size in bytes for incoming LDAP messages. If an incoming request exceeds the limit then the connection will be aborted. Default value is 0, indicating that no limit will be enforced by default.
-
SSL_OPTIONS
public static final Option<SslOptions> SSL_OPTIONS
Specifies the options to use for the SSL support ornull
if SSL is disabled.
-
PROBE_BYTES_READ
public static final Option<IntConsumer> PROBE_BYTES_READ
Callback invoked each time this server read bytes from the network. Must be thread-safe.
-
PROBE_BYTES_WRITTEN
public static final Option<IntConsumer> PROBE_BYTES_WRITTEN
Callback invoked each time this server write bytes to the network. Must be thread-safe.
-
SELECTOR_THREAD_COUNT
public static final Option<Integer> SELECTOR_THREAD_COUNT
Specifies the number of threads which will be used to handle incoming network events. Default value is 0, indicating that the selected transport should select a suitable value.
-
SELECTOR_THREAD_NAME
public static final Option<String> SELECTOR_THREAD_NAME
Specifies the thread name used for selector threads.
-
PROXY_PROTOCOL_HEADER_CLIENT
public static final Option<ProxyProtocolHeader> PROXY_PROTOCOL_HEADER_CLIENT
Enables the proxy protocol for client connections using the provided proxy header.
-
PROXY_PROTOCOL_SERVER_ENABLED
public static final Option<Boolean> PROXY_PROTOCOL_SERVER_ENABLED
Indicates if the proxy protocol is enabled on the server .
-
PROXY_PROTOCOL_SERVER_ALLOWED_CLIENTS
public static final Option<Set<AddressMask>> PROXY_PROTOCOL_SERVER_ALLOWED_CLIENTS
Specifies the clients that are allowed to access the server and that should use proxy protocol.
-
-
Constructor Detail
-
LdapServer
public LdapServer(int port, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory) throws IOException
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.- Parameters:
port
- The port to listen on.factory
- The handler factory which will be used to create handlers.- Throws:
IOException
- If an error occurred while trying to listen on the provided address.NullPointerException
- If {code factory} wasnull
.
-
LdapServer
public LdapServer(int port, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory, Options options) throws IOException
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.- Parameters:
port
- The port to listen on.factory
- The handler factory which will be used to create handlers.options
- The LDAP listener options.- Throws:
IOException
- If an error occurred while trying to listen on the provided address.NullPointerException
- If {code factory} oroptions
wasnull
.
-
LdapServer
public LdapServer(Set<InetSocketAddress> addresses, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory) throws IOException
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.- Parameters:
addresses
- The addresses to listen on.factory
- The handler factory which will be used to create handlers.- Throws:
IOException
- If an error occurred while trying to listen on the provided address.NullPointerException
- Ifaddress
or {code factory} wasnull
.
-
LdapServer
public LdapServer(Set<InetSocketAddress> addresses, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory, Options options) throws IOException
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.- Parameters:
addresses
- The addresses to listen on.factory
- The handler factory which will be used to create handlers.options
- The LDAP listener options.- Throws:
IOException
- If an error occurred while trying to listen on the provided address.NullPointerException
- Ifaddress
, {code factory}, oroptions
wasnull
.
-
LdapServer
public LdapServer(String host, int port, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory) throws IOException
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.- Parameters:
host
- The address to listen on.port
- The port to listen on.factory
- The handler factory which will be used to create handlers.- Throws:
IOException
- If an error occurred while trying to listen on the provided address.NullPointerException
- Ifhost
or {code factory} wasnull
.
-
LdapServer
public LdapServer(String host, int port, io.reactivex.rxjava3.functions.Function<LdapSession,io.reactivex.rxjava3.functions.BiFunction<Integer,Request,io.reactivex.rxjava3.core.Flowable<Response>>> factory, Options options) throws IOException
Creates a new LDAP listener implementation which will listen for LDAP client connections at the provided address.- Parameters:
host
- The address to listen on.port
- The port to listen on.factory
- The handler factory which will be used to create handlers.options
- The LDAP listener options.- Throws:
IOException
- If an error occurred while trying to listen on the provided address.NullPointerException
- Ifhost
, {code factory}, oroptions
wasnull
.
-
-
Method Detail
-
setOptions
public void setOptions(Options options)
Updates the options of this LDAP listener. Most of the options will be applied only for next client connection, current connections will not impacted by this operation. Some options are not modifiable and will be ignored by this operation.- Parameters:
options
- The LDAP listener options.
-
getOptions
public Options getOptions()
Returns a copy of the options currently used by this LDAP listener. Modifying the returned Options will have not impact until applied withsetOptions(Options)
.- Returns:
- The LDAP listener options.
-
close
public void close()
Closes this LDAP connection listener.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-
getSocketAddresses
public Set<InetSocketAddress> getSocketAddresses()
Returns the addresses that this LDAP listener is listening on.- Returns:
- The addresses that this LDAP listener is listening on.
-
firstSocketAddress
public InetSocketAddress firstSocketAddress()
Returns the first address that his LDAP listener is listening on.- Returns:
- The addresses that this LDAP listener is listening on.
-
-