1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.ldap.handlers;
21
22
23 import org.apache.directory.server.ldap.ExtendedOperationHandler;
24 import org.apache.directory.server.ldap.LdapSession;
25 import org.apache.directory.shared.ldap.message.ExtendedRequest;
26 import org.apache.directory.shared.ldap.message.ExtendedResponse;
27 import org.apache.directory.shared.ldap.message.LdapResult;
28 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
29 import org.apache.directory.shared.ldap.util.ExceptionUtils;
30
31
32
33
34
35
36
37
38 public class ExtendedHandler extends LdapRequestHandler<ExtendedRequest>
39 {
40 public void handle( LdapSession session, ExtendedRequest req ) throws Exception
41 {
42 ExtendedOperationHandler handler = getLdapServer().getExtendedOperationHandler( req.getOid() );
43
44 if ( handler == null )
45 {
46
47
48 String msg = "Unrecognized extended operation EXTENSION_OID: " + req.getOid();
49 LdapResult result = req.getResultResponse().getLdapResult();
50 result.setResultCode( ResultCodeEnum.PROTOCOL_ERROR );
51 result.setErrorMessage( msg );
52 session.getIoSession().write( req.getResultResponse() );
53 return;
54 }
55
56 try
57 {
58 handler.handleExtendedOperation( session, req );
59 }
60 catch ( Exception e )
61 {
62 LdapResult result = req.getResultResponse().getLdapResult();
63 result.setResultCode( ResultCodeEnum.OTHER );
64 result.setErrorMessage( ResultCodeEnum.OTHER
65 + ": Extended operation handler for the specified EXTENSION_OID (" + req.getOid()
66 + ") has failed to process your request:\n" + ExceptionUtils.getStackTrace( e ) );
67 ExtendedResponse resp = ( ExtendedResponse ) req.getResultResponse();
68 resp.setResponse( new byte[0] );
69 session.getIoSession().write( req.getResultResponse() );
70 }
71 }
72 }