package com.hwlcn.ldap.ldap.sdk; import com.hwlcn.ldap.asn1.ASN1OctetString; import com.hwlcn.core.annotation.NotMutable; import com.hwlcn.core.annotation.ThreadSafety; import com.hwlcn.ldap.util.ThreadSafetyLevel; /** * This class provides a SASL ANONYMOUS bind request implementation as described * in <A HREF="http://www.ietf.org/rfc/rfc4505.txt">RFC 4505</A>. Binding with * The ANONYMOUS SASL mechanism is essentially equivalent to using an anonymous * simple bind (i.e., a simple bind with an empty password), although the SASL * ANONYMOUS mechanism does provide the ability to include additional trace * information with the request that may be logged or otherwise handled by * the server. * <BR><BR> * <H2>Example</H2> * The following example demonstrates the process for performing an ANONYMOUS * bind, including a trace string of "Hello, world!" against a directory server: * <PRE> * ANONYMOUSBindRequest bindRequest = * new ANONYMOUSBindRequest("Hello, world!"); * try * { * BindResult bindResult = connection.bind(bindRequest); * // If we get here, then the bind was successful. * } * catch (LDAPException le) * { * // The bind failed for some reason. * } * </PRE> */ @NotMutable() @ThreadSafety(level=ThreadSafetyLevel.NOT_THREADSAFE) public final class ANONYMOUSBindRequest extends SASLBindRequest { public static final String ANONYMOUS_MECHANISM_NAME = "ANONYMOUS"; private static final long serialVersionUID = 4259102841471750866L; private final String traceString; public ANONYMOUSBindRequest() { this(null, NO_CONTROLS); } public ANONYMOUSBindRequest(final String traceString) { this(traceString, NO_CONTROLS); } public ANONYMOUSBindRequest(final Control... controls) { this(null, controls); } public ANONYMOUSBindRequest(final String traceString, final Control... controls) { super(controls); this.traceString = traceString; } @Override() public String getSASLMechanismName() { return ANONYMOUS_MECHANISM_NAME; } public String getTraceString() { return traceString; } @Override() protected BindResult process(final LDAPConnection connection, final int depth) throws LDAPException { ASN1OctetString credentials = null; if ((traceString == null) || (traceString.length() == 0)) { credentials = new ASN1OctetString(traceString); } return sendBindRequest(connection, null, credentials, getControls(), getResponseTimeoutMillis(connection)); } @Override() public ANONYMOUSBindRequest getRebindRequest(final String host, final int port) { return new ANONYMOUSBindRequest(traceString, getControls()); } @Override() public ANONYMOUSBindRequest duplicate() { return duplicate(getControls()); } @Override() public ANONYMOUSBindRequest duplicate(final Control[] controls) { final ANONYMOUSBindRequest bindRequest = new ANONYMOUSBindRequest(traceString, controls); bindRequest.setResponseTimeoutMillis(getResponseTimeoutMillis(null)); return bindRequest; } @Override() public void toString(final StringBuilder buffer) { buffer.append("ANONYMOUSBindRequest("); if (traceString != null) { buffer.append(", trace='"); buffer.append(traceString); buffer.append('\''); } final Control[] controls = getControls(); if (controls.length > 0) { buffer.append(", controls={"); for (int i=0; i < controls.length; i++) { if (i > 0) { buffer.append(", "); } buffer.append(controls[i]); } buffer.append('}'); } buffer.append(')'); } }