001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2006-2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.core;
028
029
030 import java.util.ArrayList;
031 import java.util.List;
032
033 import org.opends.server.api.ClientConnection;
034 import org.opends.server.loggers.debug.DebugLogger;
035 import org.opends.server.loggers.debug.DebugTracer;
036 import org.opends.server.types.*;
037 import org.opends.server.types.operation.PostOperationUnbindOperation;
038 import org.opends.server.types.operation.PreParseUnbindOperation;
039
040 import static org.opends.server.loggers.AccessLogger.*;
041 import static org.opends.messages.CoreMessages.*;
042 /**
043 * This class defines an operation that may be used to close the connection
044 * between the client and the Directory Server.
045 */
046 public class UnbindOperationBasis
047 extends AbstractOperation
048 implements UnbindOperation,
049 PreParseUnbindOperation,
050 PostOperationUnbindOperation
051 {
052
053 /**
054 * The tracer object for the debug logger.
055 */
056 private static final DebugTracer TRACER = DebugLogger.getTracer();
057
058 /**
059 * Creates a new unbind operation with the provided information.
060 *
061 * @param clientConnection The client connection with which this operation
062 * is associated.
063 * @param operationID The operation ID for this operation.
064 * @param messageID The message ID of the request with which this
065 * operation is associated.
066 * @param requestControls The set of controls included in the request.
067 */
068 public UnbindOperationBasis(ClientConnection clientConnection,
069 long operationID,
070 int messageID, ArrayList<Control> requestControls)
071 {
072 super(clientConnection, operationID, messageID, requestControls);
073
074 cancelResult = new CancelResult(ResultCode.CANNOT_CANCEL,
075 ERR_CANNOT_CANCEL_UNBIND.get());
076 }
077
078
079
080 /**
081 * {@inheritDoc}
082 */
083 @Override()
084 public final OperationType getOperationType()
085 {
086 // Note that no debugging will be done in this method because it is a likely
087 // candidate for being called by the logging subsystem.
088
089 return OperationType.UNBIND;
090 }
091
092
093
094 /**
095 * {@inheritDoc}
096 */
097 @Override()
098 public final String[][] getRequestLogElements()
099 {
100 // Note that no debugging will be done in this method because it is a likely
101 // candidate for being called by the logging subsystem.
102
103 // There are no special elements that should be logged for an unbind
104 // request.
105 return new String[0][];
106 }
107
108
109
110 /**
111 * {@inheritDoc}
112 */
113 @Override()
114 public final String[][] getResponseLogElements()
115 {
116 // Note that no debugging will be done in this method because it is a likely
117 // candidate for being called by the logging subsystem.
118
119 // There is no unbind response, nor are there any special elements that
120 // should be logged when an unbind occurs.
121 return new String[0][];
122 }
123
124
125
126 /**
127 * {@inheritDoc}
128 */
129 @Override()
130 public final List<Control> getResponseControls()
131 {
132 // An unbind operation can never have a response, so just return an empty
133 // list.
134 return NO_RESPONSE_CONTROLS;
135 }
136
137
138
139 /**
140 * {@inheritDoc}
141 */
142 @Override()
143 public final void addResponseControl(Control control)
144 {
145 // An unbind operation can never have a response, so just ignore this.
146 }
147
148
149
150 /**
151 * {@inheritDoc}
152 */
153 @Override()
154 public final void removeResponseControl(Control control)
155 {
156 // An unbind operation can never have a response, so just ignore this.
157 }
158
159 /**
160 * Performs the work of actually processing this operation. This
161 * should include all processing for the operation, including
162 * invoking plugins, logging messages, performing access control,
163 * managing synchronization, and any other work that might need to
164 * be done in the course of processing.
165 */
166 public final void run()
167 {
168 // Get the plugin config manager that will be used for invoking plugins.
169 PluginConfigManager pluginConfigManager =
170 DirectoryServer.getPluginConfigManager();
171
172 setProcessingStartTime();
173
174
175 // Invoke the pre-parse unbind plugins. We don't care about the result
176 // since we're going to close the connection anyway.
177 pluginConfigManager.invokePreParseUnbindPlugins(this);
178
179
180 // Log the unbind request.
181 logUnbind(this);
182
183
184 // Check the set of controls included in the request. If there are any,
185 // see if any special processing is needed.
186 // NYI
187
188
189 // Disconnect the client.
190 getClientConnection().disconnect(DisconnectReason.UNBIND, false, null);
191
192
193 // Invoke the post-operation unbind plugins.
194 pluginConfigManager.invokePostOperationUnbindPlugins(this);
195
196 setProcessingStopTime();
197 }
198
199
200
201 /**
202 * {@inheritDoc}
203 */
204 @Override()
205 public final void toString(StringBuilder buffer)
206 {
207 buffer.append("UnbindOperation(connID=");
208 buffer.append(clientConnection.getConnectionID());
209 buffer.append(", opID=");
210 buffer.append(operationID);
211 buffer.append(")");
212 }
213
214 }
215