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

Ludovic Poitou
18.41.2010 1734229125e7bad5f85dfe11d076eeda206236a9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
 * 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
 *
 *
 *      Copyright 2010 Sun Microsystems, Inc.
 */
 
package org.opends.sdk.requests;
 
 
 
import org.opends.sdk.ByteString;
import org.opends.sdk.ConnectionSecurityLayer;
import org.opends.sdk.ErrorResultException;
import org.opends.sdk.controls.Control;
import org.opends.sdk.responses.BindResult;
 
 
 
/**
 * Bind client implementation.
 */
class BindClientImpl implements BindClient, ConnectionSecurityLayer
{
  private final GenericBindRequest nextBindRequest;
 
 
 
  /**
   * Creates a new abstract bind client. The next bind request will be a copy of
   * the provided initial bind request which should be updated in subsequent
   * bind requests forming part of this authentication.
   *
   * @param initialBindRequest
   *          The initial bind request.
   */
  BindClientImpl(final BindRequest initialBindRequest)
  {
    this.nextBindRequest = new GenericBindRequestImpl(initialBindRequest
        .getName(), initialBindRequest.getAuthenticationType(), ByteString
        .empty(), this);
    for (final Control control : initialBindRequest.getControls())
    {
      this.nextBindRequest.addControl(control);
    }
  }
 
 
 
  /**
   * Default implementation does nothing.
   */
  public void dispose()
  {
    // Do nothing.
  }
 
 
 
  /**
   * Default implementation does nothing and always returns {@code true}.
   */
  public boolean evaluateResult(final BindResult result)
      throws ErrorResultException
  {
    return true;
  }
 
 
 
  /**
   * Default implementation always returns {@code null}.
   */
  public ConnectionSecurityLayer getConnectionSecurityLayer()
  {
    return null;
  }
 
 
 
  /**
   * Returns the next bind request.
   */
  public final GenericBindRequest nextBindRequest()
  {
    return nextBindRequest;
  }
 
 
 
  /**
   * Default implementation just returns the copy of the bytes.
   */
  public byte[] unwrap(final byte[] incoming, final int offset, final int len)
      throws ErrorResultException
  {
    final byte[] copy = new byte[len];
    System.arraycopy(incoming, offset, copy, 0, len);
    return copy;
  }
 
 
 
  /**
   * Default implementation just returns the copy of the bytes.
   */
  public byte[] wrap(final byte[] outgoing, final int offset, final int len)
      throws ErrorResultException
  {
    final byte[] copy = new byte[len];
    System.arraycopy(outgoing, offset, copy, 0, len);
    return copy;
  }
 
 
 
  /**
   * Sets the authentication value to be used in the next bind request.
   *
   * @param authenticationValue
   *          The authentication value to be used in the next bind request.
   * @return A reference to this bind client.
   */
  final BindClient setNextAuthenticationValue(
      final ByteString authenticationValue)
  {
    nextBindRequest.setAuthenticationValue(authenticationValue);
    return this;
  }
 
}