/*
* 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
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* 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
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. 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
*
*
* Portions Copyright 2006 Sun Microsystems, Inc.
*/
package org.opends.server.api;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryException;
import org.opends.server.core.InitializationException;
/**
* This class defines an API that may be used to encode and decode
* data for communication with clients over a secure channel (e.g.,
* SSL/TLS, Kerberos confidentiality, etc.).
*/
public abstract class ConnectionSecurityProvider
{
/**
* Initializes this connection security provider using the
* information in the provided configuration entry.
*
* @param configEntry The entry that contains the configuration
* for this connection security provider.
*
* @throws ConfigException If the provided entry does not contain
* an acceptable configuration for this
* security provider.
*
* @throws InitializationException If a problem occurs during
* initialization that is not
* related to the provided
* configuration.
*/
public abstract void initializeConnectionSecurityProvider(
ConfigEntry configEntry)
throws ConfigException, InitializationException;
/**
* Performs any finalization that may be necessary for this
* connection security provider.
*/
public abstract void finalizeConnectionSecurityProvider();
/**
* Retrieves the name used to identify this security mechanism.
*
* @return The name used to identify this security mechanism.
*/
public abstract String getSecurityMechanismName();
/**
* Indicates whether client connections using this connection
* security provider should be considered secure.
*
* @return true if client connections using this
* connection security provider should be considered
* secure, or false if not.
*/
public abstract boolean isSecure();
/**
* Creates a new instance of this connection security provider that
* will be used to encode and decode all communication on the
* provided client connection.
*
* @param clientConnection The client connection with which this
* security provider will be associated.
* @param socketChannel The socket channel that may be used to
* communicate with the client.
*
* @return The created connection security provider instance.
*
* @throws DirectoryException If a problem occurs while creating a
* new instance of this security
* provider for the given client
* connection.
*/
public abstract ConnectionSecurityProvider
newInstance(ClientConnection clientConnection,
SocketChannel socketChannel)
throws DirectoryException;
/**
* Indicates that the associated client connection is being closed
* and that this security provider should perform any necessary
* processing to deal with that. If it is indicated that the
* connection is still valid, then the security provider may attempt
* to communicate with the client to perform a graceful shutdown.
*
* @param connectionValid Indicates whether the Directory Server
* believes that the client connection is
* still valid and may be used for
* communication with the client. Note
* that this may be inaccurate, or that the
* state of the connection may change
* during the course of this method, so the
* security provider must be able to handle
* failures if they arise.
*/
public abstract void disconnect(boolean connectionValid);
/**
* Retrieves the size in bytes that the client should use for the
* byte buffer meant to hold clear-text data read from or to be
* written to the client.
*
* @return The size in bytes that the client should use for the
* byte buffer meant to hold clear-text data read from or
* to be written to the client.
*/
public abstract int getClearBufferSize();
/**
* Retrieves the size in bytes that the client should use for the
* byte buffer meant to hold encoded data read from or to be written
* to the client.
*
* @return The size in bytes that the client should use for the
* byte buffer meant to hold encoded data read from or to
* be written to the client.
*/
public abstract int getEncodedBufferSize();
/**
* Reads data from a client connection, performing any necessary
* negotiation in the process. Whenever any clear-text data has
* been obtained, then the connection security provider should make
* that available to the client by calling the
* ClientConnection.processDataRead method.
*
* @return true if all the data in the provided buffer
* was processed and the client connection can remain
* established, or false if a decoding error
* occurred and requests from this client should no longer
* be processed. Note that if this method does return
* false, then it must have already
* disconnected the client.
*
* @throws DirectoryException If a problem occurs while reading
* data from the client.
*/
public abstract boolean readData()
throws DirectoryException;
/**
* Writes the data contained in the provided clear-text buffer to
* the client, performing any necessary encoding in the process. It
* must be capable of dealing with input buffers that are larger
* than the value returned by the getClearBufferSize
* method. When this method returns, the provided buffer should be
* in its original state with regard to the position and limit.
*
* @param clearData The buffer containing the clear-text data to
* write to the client.
*
* @return true if all the data in the provided buffer
* was written to the client and the connection may remain
* established, or false if a problem occurred
* and the client connection is no longer valid. Note that
* if this method does return false, then it
* must have already disconnected the client.
*/
public abstract boolean writeData(ByteBuffer clearData);
}