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     * docs/licenses/cddl.txt
011     * or http://www.opensource.org/licenses/cddl1.php.
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     * docs/licenses/cddl.txt.  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 2010-2012 UnboundID Corp.
026     */
027    package com.unboundid.directory.sdk.common.api;
028    
029    
030    
031    import java.security.cert.Certificate;
032    import java.util.Collections;
033    import java.util.List;
034    import java.util.Map;
035    
036    import com.unboundid.directory.sdk.common.config.AccessLoggerConfig;
037    import com.unboundid.directory.sdk.common.internal.ExampleUsageProvider;
038    import com.unboundid.directory.sdk.common.internal.Reconfigurable;
039    import com.unboundid.directory.sdk.common.internal.UnboundIDExtension;
040    import com.unboundid.directory.sdk.common.operation.AbandonRequest;
041    import com.unboundid.directory.sdk.common.operation.AddRequest;
042    import com.unboundid.directory.sdk.common.operation.AddResult;
043    import com.unboundid.directory.sdk.common.operation.BindResult;
044    import com.unboundid.directory.sdk.common.operation.CompareRequest;
045    import com.unboundid.directory.sdk.common.operation.CompareResult;
046    import com.unboundid.directory.sdk.common.operation.DeleteRequest;
047    import com.unboundid.directory.sdk.common.operation.DeleteResult;
048    import com.unboundid.directory.sdk.common.operation.ExtendedRequest;
049    import com.unboundid.directory.sdk.common.operation.ExtendedResult;
050    import com.unboundid.directory.sdk.common.operation.GenericResult;
051    import com.unboundid.directory.sdk.common.operation.ModifyRequest;
052    import com.unboundid.directory.sdk.common.operation.ModifyResult;
053    import com.unboundid.directory.sdk.common.operation.ModifyDNRequest;
054    import com.unboundid.directory.sdk.common.operation.ModifyDNResult;
055    import com.unboundid.directory.sdk.common.operation.SASLBindRequest;
056    import com.unboundid.directory.sdk.common.operation.SearchRequest;
057    import com.unboundid.directory.sdk.common.operation.SearchResult;
058    import com.unboundid.directory.sdk.common.operation.SimpleBindRequest;
059    import com.unboundid.directory.sdk.common.operation.UnbindRequest;
060    import com.unboundid.directory.sdk.common.types.ClientContext;
061    import com.unboundid.directory.sdk.common.types.CompletedOperationContext;
062    import com.unboundid.directory.sdk.common.types.CompletedSearchOperationContext;
063    import com.unboundid.directory.sdk.common.types.DisconnectReason;
064    import com.unboundid.directory.sdk.common.types.Entry;
065    import com.unboundid.directory.sdk.common.types.ForwardTarget;
066    import com.unboundid.directory.sdk.common.types.OperationContext;
067    import com.unboundid.directory.sdk.common.types.ServerContext;
068    import com.unboundid.directory.sdk.ds.internal.DirectoryServerExtension;
069    import com.unboundid.directory.sdk.proxy.internal.DirectoryProxyServerExtension;
070    import com.unboundid.directory.sdk.sync.internal.SynchronizationServerExtension;
071    import com.unboundid.ldap.sdk.Control;
072    import com.unboundid.ldap.sdk.IntermediateResponse;
073    import com.unboundid.ldap.sdk.LDAPException;
074    import com.unboundid.ldap.sdk.ResultCode;
075    import com.unboundid.util.Extensible;
076    import com.unboundid.util.ThreadSafety;
077    import com.unboundid.util.ThreadSafetyLevel;
078    import com.unboundid.util.args.ArgumentException;
079    import com.unboundid.util.args.ArgumentParser;
080    
081    
082    
083    /**
084     * This class defines an API that must be implemented by extensions which
085     * record information about interaction with clients, including connections
086     * established and received and operations requested and completed.  Access
087     * loggers may write information to files, but they may also write to other
088     * locations, including databases, message, queues, e-mail messages, or other
089     * targets.
090     * <BR><BR>
091     * Access loggers will be invoked for the following events:
092     * <UL>
093     *   <LI>Whenever a new connection is established.</LI>
094     *   <LI>Whenever an existing connection is closed or terminated.</LI>
095     *   <LI>Whenever an abandon, add, bind, compare, delete, extended, modify,
096     *       modify DN, search, or unbind request is received.</LI>
097     *   <LI>Whenever an abandon, add, bind, compare, delete, extended, modify,
098     *       modify DN, or search request is forwarded to another server for
099     *       processing.</LI>
100     *   <LI>If a forwarded add, bind, compare, delete, extended, modify, modify DN,
101     *       or search operation fails.</LI>
102     *   <LI>After sending the result for an add, bind, compare, delete, extended,
103     *       modify, modify DN, or search operation.</LI>
104     *   <LI>After completing processing for an abandon operation.</LI>
105     *   <LI>After sending a search result entry, search result reference, or
106     *       intermediate response message to the client.</LI>
107     * </UL>
108     * <BR><BR>
109     * Each access logger may configured to indicate whether to include or exclude
110     * internal and/or replicated operations, and criteria may be used to provide
111     * filtered logging.  This is handled automatically by the server, so individual
112     * access logger implementations do not need to attempt to perform that
113     * filtering on their own.  However, they may perform additional processing if
114     * desired to further narrow the set of messages that should be logged.
115     * <BR>
116     * <H2>Configuring Access Loggers</H2>
117     * In order to configure an access logger created using this API, use a command
118     * like:
119     * <PRE>
120     *      dsconfig create-log-publisher \
121     *           --publisher-name "<I>{logger-name}</I>" \
122     *           --type third-party-access \
123     *           --set enabled:true \
124     *           --set "extension-class:<I>{class-name}</I>" \
125     *           --set "extension-argument:<I>{name=value}</I>"
126     * </PRE>
127     * where "<I>{logger-name}</I>" is the name to use for the access logger
128     * instance, "<I>{class-name}</I>" is the fully-qualified name of the Java class
129     * that extends {@code com.unboundid.directory.sdk.common.api.AccessLogger},
130     * and "<I>{name=value}</I>" represents name-value pairs for any arguments to
131     * provide to the logger.  If multiple arguments should be provided to the
132     * logger, then the "<CODE>--set extension-argument:<I>{name=value}</I></CODE>"
133     * option should be provided multiple times.
134     *
135     * @see  FileBasedAccessLogger
136     * @see  com.unboundid.directory.sdk.common.scripting.ScriptedAccessLogger
137     * @see
138     *    com.unboundid.directory.sdk.common.scripting.ScriptedFileBasedAccessLogger
139     */
140    @Extensible()
141    @DirectoryServerExtension()
142    @DirectoryProxyServerExtension(appliesToLocalContent=true,
143         appliesToRemoteContent=true)
144    @SynchronizationServerExtension(appliesToLocalContent=true,
145         appliesToSynchronizedContent=false)
146    @ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE)
147    public abstract class AccessLogger
148           implements UnboundIDExtension, Reconfigurable<AccessLoggerConfig>,
149                      ExampleUsageProvider
150    {
151      /**
152       * Creates a new instance of this access logger.  All access logger
153       * implementations must include a default constructor, but any initialization
154       * should generally be done in the {@code initializeAccessLogger} method.
155       */
156      public AccessLogger()
157      {
158        // No implementation is required.
159      }
160    
161    
162    
163      /**
164       * {@inheritDoc}
165       */
166      public abstract String getExtensionName();
167    
168    
169    
170      /**
171       * {@inheritDoc}
172       */
173      public abstract String[] getExtensionDescription();
174    
175    
176    
177      /**
178       * {@inheritDoc}
179       */
180      public void defineConfigArguments(final ArgumentParser parser)
181             throws ArgumentException
182      {
183        // No arguments will be allowed by default.
184      }
185    
186    
187    
188      /**
189       * Initializes this access logger.
190       *
191       * @param  serverContext  A handle to the server context for the server in
192       *                        which this extension is running.
193       * @param  config         The general configuration for this access logger.
194       * @param  parser         The argument parser which has been initialized from
195       *                        the configuration for this access logger.
196       *
197       * @throws  LDAPException  If a problem occurs while initializing this access
198       *                         logger.
199       */
200      public void initializeAccessLogger(final ServerContext serverContext,
201                                         final AccessLoggerConfig config,
202                                         final ArgumentParser parser)
203             throws LDAPException
204      {
205        // No initialization will be performed by default.
206      }
207    
208    
209    
210      /**
211       * {@inheritDoc}
212       */
213      public boolean isConfigurationAcceptable(final AccessLoggerConfig config,
214                          final ArgumentParser parser,
215                          final List<String> unacceptableReasons)
216      {
217        // No extended validation will be performed by default.
218        return true;
219      }
220    
221    
222    
223      /**
224       * {@inheritDoc}
225       */
226      public ResultCode applyConfiguration(final AccessLoggerConfig config,
227                                           final ArgumentParser parser,
228                                           final List<String> adminActionsRequired,
229                                           final List<String> messages)
230      {
231        // By default, no configuration changes will be applied.  If there are any
232        // arguments, then add an admin action message indicating that the extension
233        // needs to be restarted for any changes to take effect.
234        if (! parser.getNamedArguments().isEmpty())
235        {
236          adminActionsRequired.add(
237               "No configuration change has actually been applied.  The new " +
238                    "configuration will not take effect until this access logger " +
239                    "is disabled and re-enabled or until the server is restarted.");
240        }
241    
242        return ResultCode.SUCCESS;
243      }
244    
245    
246    
247      /**
248       * Performs any cleanup which may be necessary when this access logger is to
249       * be taken out of service.
250       */
251      public void finalizeAccessLogger()
252      {
253        // No implementation is required.
254      }
255    
256    
257    
258      /**
259       * Logs a message indicating that a new connection has been established.
260       *
261       * @param  clientContext  Information about the client connection that has
262       *                        been accepted.
263       */
264      public void logConnect(final ClientContext clientContext)
265      {
266        // No action will be taken by default.
267      }
268    
269    
270    
271      /**
272       * Logs a message indicating that a connection has been closed.
273       *
274       * @param  clientContext     Information about the client connection that has
275       *                           been closed.
276       * @param  disconnectReason  A general reason that the connection has been
277       *                           closed.
278       * @param  message           A message with additional information about the
279       *                           closure.  It may be {@code null} if none is
280       *                           available.
281       */
282      public void logDisconnect(final ClientContext clientContext,
283                                final DisconnectReason disconnectReason,
284                                final String message)
285      {
286        // No action will be taken by default.
287      }
288    
289    
290    
291      /**
292       * Logs a message about a certificate chain presented by a client.
293       *
294       * @param  clientContext  Information about the client that presented the
295       *                        certificate chain.
296       * @param  certChain      The certificate chain presented by the client.
297       * @param  authDN         The DN of the user as whom the client was
298       *                        automatically authenticated, or {@code null} if the
299       *                        client was not automatically authenticated.
300       */
301      public void logClientCertificateChain(final ClientContext clientContext,
302                                            final Certificate[] certChain,
303                                            final String authDN)
304      {
305        // No action will be taken by default.
306      }
307    
308    
309    
310      /**
311       * Logs a message about an abandon request received from a client.
312       *
313       * @param  opContext  The operation context for the abandon operation.
314       * @param  request    The abandon request that was received.
315       */
316      public void logAbandonRequest(final OperationContext opContext,
317                                    final AbandonRequest request)
318      {
319        // No action will be taken by default.
320      }
321    
322    
323    
324      /**
325       * Logs a message about an abandon request that will be forwarded to another
326       * server.
327       *
328       * @param  opContext  The operation context for the abandon operation.
329       * @param  request    The abandon request that was received.
330       * @param  target     Information about the server to which the request will
331       *                    be forwarded.
332       */
333      public void logAbandonForward(final OperationContext opContext,
334                                    final AbandonRequest request,
335                                    final ForwardTarget target)
336      {
337        // No action will be taken by default.
338      }
339    
340    
341    
342      /**
343       * Logs a message about the result of processing an abandon request.
344       *
345       * @param  opContext  The operation context for the abandon operation.
346       * @param  request    The abandon request that was received.
347       * @param  result     The result of processing the abandon request.
348       */
349      public void logAbandonResult(final CompletedOperationContext opContext,
350                                   final AbandonRequest request,
351                                   final GenericResult result)
352      {
353        // No action will be taken by default.
354      }
355    
356    
357    
358      /**
359       * Logs a message about an add request received from a client.
360       *
361       * @param  opContext  The operation context for the add operation.
362       * @param  request    The add request that was received.
363       */
364      public void logAddRequest(final OperationContext opContext,
365                                final AddRequest request)
366      {
367        // No action will be taken by default.
368      }
369    
370    
371    
372      /**
373       * Logs a message about an add request that will be forwarded to another
374       * server.
375       *
376       * @param  opContext  The operation context for the add operation.
377       * @param  request    The add request that was received.
378       * @param  target     Information about the server to which the request will
379       *                    be forwarded.
380       */
381      public void logAddForward(final OperationContext opContext,
382                                final AddRequest request,
383                                final ForwardTarget target)
384      {
385        // No action will be taken by default.
386      }
387    
388    
389    
390      /**
391       * Logs a message about a failure encountered while attempting to forward an
392       * add request to another server.
393       *
394       * @param  opContext  The operation context for the add operation.
395       * @param  request    The add request that was received.
396       * @param  target     Information about the server to which the request was
397       *                    forwarded.
398       * @param  failure    The exception that was received when attempting to
399       *                    forward the request.
400       */
401      public void logAddForwardFailure(final OperationContext opContext,
402                                       final AddRequest request,
403                                       final ForwardTarget target,
404                                       final LDAPException failure)
405      {
406        // No action will be taken by default.
407      }
408    
409    
410    
411      /**
412       * Logs a message about the result of processing an add request.
413       *
414       * @param  opContext  The operation context for the add operation.
415       * @param  request    The add request that was received.
416       * @param  result     The result of processing the add request.
417       */
418      public void logAddResponse(final CompletedOperationContext opContext,
419                                 final AddRequest request,
420                                 final AddResult result)
421      {
422        // No action will be taken by default.
423      }
424    
425    
426    
427      /**
428       * Logs a message about a simple bind request received from a client.
429       *
430       * @param  opContext  The operation context for the bind operation.
431       * @param  request    The bind request that was received.
432       */
433      public void logBindRequest(final OperationContext opContext,
434                                 final SimpleBindRequest request)
435      {
436        // No action will be taken by default.
437      }
438    
439    
440    
441      /**
442       * Logs a message about a simple bind request that will be forwarded to
443       * another server.
444       *
445       * @param  opContext  The operation context for the bind operation.
446       * @param  request    The bind request that was received.
447       * @param  target     Information about the server to which the request will
448       *                    be forwarded.
449       */
450      public void logBindForward(final OperationContext opContext,
451                                    final SimpleBindRequest request,
452                                    final ForwardTarget target)
453      {
454        // No action will be taken by default.
455      }
456    
457    
458    
459      /**
460       * Logs a message about a failure encountered while attempting to forward a
461       * simple bind request to another server.
462       *
463       * @param  opContext  The operation context for the bind operation.
464       * @param  request    The bind request that was received.
465       * @param  target     Information about the server to which the request was
466       *                    forwarded.
467       * @param  failure    The exception that was received when attempting to
468       *                    forward the request.
469       */
470      public void logBindForwardFailure(final OperationContext opContext,
471                                        final SimpleBindRequest request,
472                                        final ForwardTarget target,
473                                        final LDAPException failure)
474      {
475        // No action will be taken by default.
476      }
477    
478    
479    
480      /**
481       * Logs a message about the result of processing a simple bind request.
482       *
483       * @param  opContext  The operation context for the bind operation.
484       * @param  request    The bind request that was received.
485       * @param  result     The result of processing the bind request.
486       */
487      public void logBindResponse(final CompletedOperationContext opContext,
488                                  final SimpleBindRequest request,
489                                  final BindResult result)
490      {
491        // No action will be taken by default.
492      }
493    
494    
495    
496      /**
497       * Logs a message about a SASL bind request received from a client.
498       *
499       * @param  opContext  The operation context for the bind operation.
500       * @param  request    The bind request that was received.
501       */
502      public void logBindRequest(final OperationContext opContext,
503                                 final SASLBindRequest request)
504      {
505        // No action will be taken by default.
506      }
507    
508    
509    
510      /**
511       * Logs a message about a SASL bind request that will be forwarded to
512       * another server.
513       *
514       * @param  opContext  The operation context for the bind operation.
515       * @param  request    The bind request that was received.
516       * @param  target     Information about the server to which the request will
517       *                    be forwarded.
518       */
519      public void logBindForward(final OperationContext opContext,
520                                    final SASLBindRequest request,
521                                    final ForwardTarget target)
522      {
523        // No action will be taken by default.
524      }
525    
526    
527    
528      /**
529       * Logs a message about a failure encountered while attempting to forward a
530       * SASL bind request to another server.
531       *
532       * @param  opContext  The operation context for the bind operation.
533       * @param  request    The bind request that was received.
534       * @param  target     Information about the server to which the request was
535       *                    forwarded.
536       * @param  failure    The exception that was received when attempting to
537       *                    forward the request.
538       */
539      public void logBindForwardFailure(final OperationContext opContext,
540                                        final SASLBindRequest request,
541                                        final ForwardTarget target,
542                                        final LDAPException failure)
543      {
544        // No action will be taken by default.
545      }
546    
547    
548    
549      /**
550       * Logs a message about the result of processing a SASL bind request.
551       *
552       * @param  opContext  The operation context for the bind operation.
553       * @param  request    The bind request that was received.
554       * @param  result     The result of processing the bind request.
555       */
556      public void logBindResponse(final CompletedOperationContext opContext,
557                                  final SASLBindRequest request,
558                                  final BindResult result)
559      {
560        // No action will be taken by default.
561      }
562    
563    
564    
565      /**
566       * Logs a message about a compare request received from a client.
567       *
568       * @param  opContext  The operation context for the compare operation.
569       * @param  request    The compare request that was received.
570       */
571      public void logCompareRequest(final OperationContext opContext,
572                                    final CompareRequest request)
573      {
574        // No action will be taken by default.
575      }
576    
577    
578    
579      /**
580       * Logs a message about a compare request that will be forwarded to another
581       * server.
582       *
583       * @param  opContext  The operation context for the compare operation.
584       * @param  request    The compare request that was received.
585       * @param  target     Information about the server to which the request will
586       *                    be forwarded.
587       */
588      public void logCompareForward(final OperationContext opContext,
589                                    final CompareRequest request,
590                                    final ForwardTarget target)
591      {
592        // No action will be taken by default.
593      }
594    
595    
596    
597      /**
598       * Logs a message about a failure encountered while attempting to forward a
599       * compare request to another server.
600       *
601       * @param  opContext  The operation context for the compare operation.
602       * @param  request    The compare request that was received.
603       * @param  target     Information about the server to which the request was
604       *                    forwarded.
605       * @param  failure    The exception that was received when attempting to
606       *                    forward the request.
607       */
608      public void logCompareForwardFailure(final OperationContext opContext,
609                                           final CompareRequest request,
610                                           final ForwardTarget target,
611                                           final LDAPException failure)
612      {
613        // No action will be taken by default.
614      }
615    
616    
617    
618      /**
619       * Logs a message about the result of processing a compare request.
620       *
621       * @param  opContext  The operation context for the compare operation.
622       * @param  request    The compare request that was received.
623       * @param  result     The result of processing the compare request.
624       */
625      public void logCompareResponse(final CompletedOperationContext opContext,
626                                     final CompareRequest request,
627                                     final CompareResult result)
628      {
629        // No action will be taken by default.
630      }
631    
632    
633    
634      /**
635       * Logs a message about a delete request received from a client.
636       *
637       * @param  opContext  The operation context for the delete operation.
638       * @param  request    The delete request that was received.
639       */
640      public void logDeleteRequest(final OperationContext opContext,
641                                   final DeleteRequest request)
642      {
643        // No action will be taken by default.
644      }
645    
646    
647    
648      /**
649       * Logs a message about a delete request that will be forwarded to another
650       * server.
651       *
652       * @param  opContext  The operation context for the delete operation.
653       * @param  request    The delete request that was received.
654       * @param  target     Information about the server to which the request will
655       *                    be forwarded.
656       */
657      public void logDeleteForward(final OperationContext opContext,
658                                   final DeleteRequest request,
659                                   final ForwardTarget target)
660      {
661        // No action will be taken by default.
662      }
663    
664    
665    
666      /**
667       * Logs a message about a failure encountered while attempting to forward a
668       * delete request to another server.
669       *
670       * @param  opContext  The operation context for the delete operation.
671       * @param  request    The delete request that was received.
672       * @param  target     Information about the server to which the request was
673       *                    forwarded.
674       * @param  failure    The exception that was received when attempting to
675       *                    forward the request.
676       */
677      public void logDeleteForwardFailure(final OperationContext opContext,
678                                          final DeleteRequest request,
679                                          final ForwardTarget target,
680                                          final LDAPException failure)
681      {
682        // No action will be taken by default.
683      }
684    
685    
686    
687      /**
688       * Logs a message about the result of processing a delete request.
689       *
690       * @param  opContext  The operation context for the delete operation.
691       * @param  request    The delete request that was received.
692       * @param  result     The result of processing the delete request.
693       */
694      public void logDeleteResponse(final CompletedOperationContext opContext,
695                                    final DeleteRequest request,
696                                    final DeleteResult result)
697      {
698        // No action will be taken by default.
699      }
700    
701    
702    
703      /**
704       * Logs a message about an extended request received from a client.
705       *
706       * @param  opContext  The operation context for the extended operation.
707       * @param  request    The extended request that was received.
708       */
709      public void logExtendedRequest(final OperationContext opContext,
710                                     final ExtendedRequest request)
711      {
712        // No action will be taken by default.
713      }
714    
715    
716    
717      /**
718       * Logs a message about an extended request that will be forwarded to another
719       * server.
720       *
721       * @param  opContext  The operation context for the extended operation.
722       * @param  request    The extended request that was received.
723       * @param  target     Information about the server to which the request will
724       *                    be forwarded.
725       */
726      public void logExtendedForward(final OperationContext opContext,
727                                     final ExtendedRequest request,
728                                     final ForwardTarget target)
729      {
730        // No action will be taken by default.
731      }
732    
733    
734    
735      /**
736       * Logs a message about a failure encountered while attempting to forward an
737       * extended request to another server.
738       *
739       * @param  opContext  The operation context for the extended operation.
740       * @param  request    The extended request that was received.
741       * @param  target     Information about the server to which the request was
742       *                    forwarded.
743       * @param  failure    The exception that was received when attempting to
744       *                    forward the request.
745       */
746      public void logExtendedForwardFailure(final OperationContext opContext,
747                                            final ExtendedRequest request,
748                                            final ForwardTarget target,
749                                            final LDAPException failure)
750      {
751        // No action will be taken by default.
752      }
753    
754    
755    
756      /**
757       * Logs a message about the result of processing an extended request.
758       *
759       * @param  opContext  The operation context for the extended operation.
760       * @param  request    The extended request that was received.
761       * @param  result     The result of processing the extended request.
762       */
763      public void logExtendedResponse(final CompletedOperationContext opContext,
764                                      final ExtendedRequest request,
765                                      final ExtendedResult result)
766      {
767        // No action will be taken by default.
768      }
769    
770    
771    
772      /**
773       * Logs a message about a modify request received from a client.
774       *
775       * @param  opContext  The operation context for the modify operation.
776       * @param  request    The modify request that was received.
777       */
778      public void logModifyRequest(final OperationContext opContext,
779                                   final ModifyRequest request)
780      {
781        // No action will be taken by default.
782      }
783    
784    
785    
786      /**
787       * Logs a message about a modify request that will be forwarded to another
788       * server.
789       *
790       * @param  opContext  The operation context for the modify operation.
791       * @param  request    The modify request that was received.
792       * @param  target     Information about the server to which the request will
793       *                    be forwarded.
794       */
795      public void logModifyForward(final OperationContext opContext,
796                                   final ModifyRequest request,
797                                   final ForwardTarget target)
798      {
799        // No action will be taken by default.
800      }
801    
802    
803    
804      /**
805       * Logs a message about a failure encountered while attempting to forward a
806       * modify request to another server.
807       *
808       * @param  opContext  The operation context for the modify operation.
809       * @param  request    The modify request that was received.
810       * @param  target     Information about the server to which the request was
811       *                    forwarded.
812       * @param  failure    The exception that was received when attempting to
813       *                    forward the request.
814       */
815      public void logModifyForwardFailure(final OperationContext opContext,
816                                          final ModifyRequest request,
817                                          final ForwardTarget target,
818                                          final LDAPException failure)
819      {
820        // No action will be taken by default.
821      }
822    
823    
824    
825      /**
826       * Logs a message about the result of processing a modify request.
827       *
828       * @param  opContext  The operation context for the modify operation.
829       * @param  request    The modify request that was received.
830       * @param  result     The result of processing the modify request.
831       */
832      public void logModifyResponse(final CompletedOperationContext opContext,
833                                    final ModifyRequest request,
834                                    final ModifyResult result)
835      {
836        // No action will be taken by default.
837      }
838    
839    
840    
841      /**
842       * Logs a message about a modify DN request received from a client.
843       *
844       * @param  opContext  The operation context for the modify DN operation.
845       * @param  request    The modify DN request that was received.
846       */
847      public void logModifyDNRequest(final OperationContext opContext,
848                                     final ModifyDNRequest request)
849      {
850        // No action will be taken by default.
851      }
852    
853    
854    
855      /**
856       * Logs a message about a modify DN request that will be forwarded to another
857       * server.
858       *
859       * @param  opContext  The operation context for the modify DN operation.
860       * @param  request    The modify DN request that was received.
861       * @param  target     Information about the server to which the request will
862       *                    be forwarded.
863       */
864      public void logModifyDNForward(final OperationContext opContext,
865                                     final ModifyDNRequest request,
866                                     final ForwardTarget target)
867      {
868        // No action will be taken by default.
869      }
870    
871    
872    
873      /**
874       * Logs a message about a failure encountered while attempting to forward a
875       * modify DN request to another server.
876       *
877       * @param  opContext  The operation context for the modify DN operation.
878       * @param  request    The modify DN request that was received.
879       * @param  target     Information about the server to which the request was
880       *                    forwarded.
881       * @param  failure    The exception that was received when attempting to
882       *                    forward the request.
883       */
884      public void logModifyDNForwardFailure(final OperationContext opContext,
885                                            final ModifyDNRequest request,
886                                            final ForwardTarget target,
887                                            final LDAPException failure)
888      {
889        // No action will be taken by default.
890      }
891    
892    
893    
894      /**
895       * Logs a message about the result of processing a modify DN request.
896       *
897       * @param  opContext  The operation context for the modify DN operation.
898       * @param  request    The modify DN request that was received.
899       * @param  result     The result of processing the modify DN request.
900       */
901      public void logModifyDNResponse(final CompletedOperationContext opContext,
902                                      final ModifyDNRequest request,
903                                      final ModifyDNResult result)
904      {
905        // No action will be taken by default.
906      }
907    
908    
909    
910      /**
911       * Logs a message about a search request received from a client.
912       *
913       * @param  opContext  The operation context for the search operation.
914       * @param  request    The search request that was received.
915       */
916      public void logSearchRequest(final OperationContext opContext,
917                                   final SearchRequest request)
918      {
919        // No action will be taken by default.
920      }
921    
922    
923    
924      /**
925       * Logs a message about a search request that will be forwarded to another
926       * server.
927       *
928       * @param  opContext  The operation context for the search operation.
929       * @param  request    The search request that was received.
930       * @param  target     Information about the server to which the request will
931       *                    be forwarded.
932       */
933      public void logSearchForward(final OperationContext opContext,
934                                   final SearchRequest request,
935                                   final ForwardTarget target)
936      {
937        // No action will be taken by default.
938      }
939    
940    
941    
942      /**
943       * Logs a message about a failure encountered while attempting to forward a
944       * search request to another server.
945       *
946       * @param  opContext  The operation context for the search operation.
947       * @param  request    The search request that was received.
948       * @param  target     Information about the server to which the request was
949       *                    forwarded.
950       * @param  failure    The exception that was received when attempting to
951       *                    forward the request.
952       */
953      public void logSearchForwardFailure(final OperationContext opContext,
954                                          final SearchRequest request,
955                                          final ForwardTarget target,
956                                          final LDAPException failure)
957      {
958        // No action will be taken by default.
959      }
960    
961    
962    
963      /**
964       * Logs a message about a search result entry that was returned to the client.
965       *
966       * @param  opContext  The operation context for the search operation.
967       * @param  request    The search request that was received.
968       * @param  entry      The entry that was returned.
969       * @param  controls   The set of controls included with the entry, or an empty
970       *                    list if there were none.
971       */
972      public void logSearchResultEntry(final OperationContext opContext,
973                                       final SearchRequest request,
974                                       final Entry entry,
975                                       final List<Control> controls)
976      {
977        // No action will be taken by default.
978      }
979    
980    
981    
982      /**
983       * Logs a message about a search result reference that was returned to the
984       * client.
985       *
986       * @param  opContext     The operation context for the search operation.
987       * @param  request       The search request that was received.
988       * @param  referralURLs  The referral URLs for the reference that was
989       *                       returned.
990       * @param  controls      The set of controls included with the reference, or
991       *                       an empty list if there were none.
992       */
993      public void logSearchResultReference(final OperationContext opContext,
994                                           final SearchRequest request,
995                                           final List<String> referralURLs,
996                                           final List<Control> controls)
997      {
998        // No action will be taken by default.
999      }
1000    
1001    
1002    
1003      /**
1004       * Logs a message about the result of processing a search request.
1005       *
1006       * @param  opContext  The operation context for the search operation.
1007       * @param  request    The search request that was received.
1008       * @param  result     The result of processing the search request.
1009       */
1010      public void logSearchResultDone(
1011                       final CompletedSearchOperationContext opContext,
1012                       final SearchRequest request, final SearchResult result)
1013      {
1014        // No action will be taken by default.
1015      }
1016    
1017    
1018    
1019      /**
1020       * Logs a message about an unbind request received from a client.
1021       *
1022       * @param  opContext  The operation context for the unbind operation.
1023       * @param  request    The unbind request that was received.
1024       */
1025      public void logUnbindRequest(final OperationContext opContext,
1026                                   final UnbindRequest request)
1027      {
1028        // No action will be taken by default.
1029      }
1030    
1031    
1032    
1033      /**
1034       * Logs a message about an intermediate response that was returned to the
1035       * client.
1036       *
1037       * @param  opContext             The operation context for the associated
1038       *                               operation.
1039       * @param  intermediateResponse  The intermediate response that was returned.
1040       */
1041      public void logIntermediateResponse(final OperationContext opContext,
1042                       final IntermediateResponse intermediateResponse)
1043      {
1044        // No action will be taken by default.
1045      }
1046    
1047    
1048    
1049      /**
1050       * {@inheritDoc}
1051       */
1052      public Map<List<String>,String> getExamplesArgumentSets()
1053      {
1054        return Collections.emptyMap();
1055      }
1056    }