mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Matthew Swift
10.34.2012 5d9f190f1cb83d0c4f9c5e83079fa6dabf8bb5a5
Preparation work for OPENDJ-420: Rare SSLExceptions while handling LDAPS connections and big LDAP searches

Reformat and clean up code.
2 files modified
275 ■■■■■ changed files
opends/src/server/org/opends/server/extensions/ConnectionSecurityProvider.java 95 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/RedirectingByteChannel.java 180 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/ConnectionSecurityProvider.java
@@ -23,59 +23,76 @@
 *
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 *      Portions copyright 2012 ForgeRock AS.
 */
package org.opends.server.extensions;
import java.nio.channels.ByteChannel;
import java.security.cert.Certificate;
/**
 * This interface can be used to define connection security providers.
 *
 */
public interface ConnectionSecurityProvider {
public interface ConnectionSecurityProvider
{
    /**
     * Factory method: creates a new security ByteChannel
     * layer wrapping the provided ByteChannel.
     *
     * @param channel The byte channel to be wrapped.
     * @return A byte channel wrapping the specified byte channel.
     */
    ByteChannel wrapChannel(ByteChannel channel);
  /**
   * Return a buffer size of the byte channel.
   *
   * @return Integer representing the byte channel application buffer size.
   */
  int getAppBufSize();
    /**
     * Return a buffer size of the byte channel.
     * @return Integer representing the byte channel application buffer size.
     */
    int getAppBufSize();
    /**
     * Return a certificate chain array.
     *
     * @return A certificate chain array.
     */
    Certificate[] getClientCertificateChain();
    /**
     * Return a Security Strength Factor.
     *
     * @return Integer representing the current SSF of a provider.
     */
    int getSSF();
  /**
   * Return a certificate chain array.
   *
   * @return A certificate chain array.
   */
  Certificate[] getClientCertificateChain();
    /**
     * Return <CODE>true</CODE> if a provider is secure.
     *
     * @return <CODE>true</CODE> if a provider is secure.
     */
    boolean isSecure();
    /**
     * Return the name of a provider.
     *
     * @return String representing the name of a provider.
     */
    String getName();
  /**
   * Return the name of a provider.
   *
   * @return String representing the name of a provider.
   */
  String getName();
  /**
   * Return a Security Strength Factor.
   *
   * @return Integer representing the current SSF of a provider.
   */
  int getSSF();
  /**
   * Return <CODE>true</CODE> if a provider is secure.
   *
   * @return <CODE>true</CODE> if a provider is secure.
   */
  boolean isSecure();
  /**
   * Factory method: creates a new security ByteChannel layer wrapping the
   * provided ByteChannel.
   *
   * @param channel
   *          The byte channel to be wrapped.
   * @return A byte channel wrapping the specified byte channel.
   */
  ByteChannel wrapChannel(ByteChannel channel);
}
opends/src/server/org/opends/server/extensions/RedirectingByteChannel.java
@@ -23,92 +23,138 @@
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Portions copyright 2012 ForgeRock AS.
 */
package org.opends.server.extensions;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ByteChannel;
/**
 * This class redirects read and write requests either to a child byte channel,
 * or a byte channel to be redirected to.
 *
 */
public class RedirectingByteChannel implements ByteChannel {
    private final ByteChannel child;
    private volatile ByteChannel redirect = null;
public class RedirectingByteChannel implements ByteChannel
{
  /**
   * Create an instance of a redirecting byte channel using the specified byte
   * channel as the child.
   *
   * @param bc
   *          A byte channel to use as the child.
   * @return A redirecting byte channel.
   */
  public static RedirectingByteChannel getRedirectingByteChannel(
      final ByteChannel bc)
  {
    return new RedirectingByteChannel(bc);
  }
    private RedirectingByteChannel(ByteChannel child) {
        this.child = child;
    }
    /**
     * Create an instance of a redirecting byte channel using the specified
     * byte channel as the child.
     *
     * @param bc A byte channel to use as the child.
     * @return A redirecting byte channel.
     */
    public static
    RedirectingByteChannel getRedirectingByteChannel(ByteChannel bc) {
        return new RedirectingByteChannel(bc);
    }
    /**
     * {@inheritDoc}
     */
    public int read(ByteBuffer buffer) throws IOException {
        if (redirect != null)
            return redirect.read(buffer);
        else
            return child.read(buffer);
    }
  private final ByteChannel child;
    /**
     * {@inheritDoc}
     */
    public void close() throws IOException {
        if(redirect != null)
            redirect.close();
        else
            child.close();
    }
  private volatile ByteChannel redirect = null;
    /**
     * {@inheritDoc}
     */
    public boolean isOpen() {
        if(redirect != null)
            return redirect.isOpen();
        return child.isOpen();
    }
    /**
     * {@inheritDoc}
     */
    public int write(ByteBuffer buffer) throws IOException {
        if (redirect != null)
            return redirect.write(buffer);
        else
            return child.write(buffer);
    }
    /**
     * Redirects a byte channel to a byte channel associated with the specified
     * provider.
     *
     * @param provider The provider to redirect to.
     */
    public final void redirect(ConnectionSecurityProvider provider) {
      redirect = provider.wrapChannel(child);
    }
  private RedirectingByteChannel(final ByteChannel child)
  {
    this.child = child;
  }
    /**
     * Disable redirection.
     */
    public final void disable() {
        redirect = null;
  /**
   * {@inheritDoc}
   */
  public void close() throws IOException
  {
    if (redirect != null)
    {
      redirect.close();
    }
    else
    {
      child.close();
    }
  }
  /**
   * Disable redirection.
   */
  public final void disable()
  {
    redirect = null;
  }
  /**
   * {@inheritDoc}
   */
  public boolean isOpen()
  {
    if (redirect != null)
    {
      return redirect.isOpen();
    }
    return child.isOpen();
  }
  /**
   * {@inheritDoc}
   */
  public int read(final ByteBuffer buffer) throws IOException
  {
    if (redirect != null)
    {
      return redirect.read(buffer);
    }
    else
    {
      return child.read(buffer);
    }
  }
  /**
   * Redirects a byte channel to a byte channel associated with the specified
   * provider.
   *
   * @param provider
   *          The provider to redirect to.
   */
  public final void redirect(final ConnectionSecurityProvider provider)
  {
    redirect = provider.wrapChannel(child);
  }
  /**
   * {@inheritDoc}
   */
  public int write(final ByteBuffer buffer) throws IOException
  {
    if (redirect != null)
    {
      return redirect.write(buffer);
    }
    else
    {
      return child.write(buffer);
    }
  }
}