1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.api.ldap.codec.actions.extendedResponse;
21
22
23 import org.apache.directory.api.asn1.DecoderException;
24 import org.apache.directory.api.asn1.ber.grammar.GrammarAction;
25 import org.apache.directory.api.asn1.ber.tlv.TLV;
26 import org.apache.directory.api.asn1.util.Oid;
27 import org.apache.directory.api.i18n.I18n;
28 import org.apache.directory.api.ldap.codec.api.ExtendedResponseDecorator;
29 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
30 import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
31 import org.apache.directory.api.ldap.codec.decorators.LdapResultDecorator;
32 import org.apache.directory.api.ldap.model.message.ExtendedResponse;
33 import org.apache.directory.api.util.Strings;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public class StoreExtendedResponseName extends GrammarAction<LdapMessageContainer<ExtendedResponseDecorator<?>>>
50 {
51
52 private static final Logger LOG = LoggerFactory.getLogger( StoreExtendedResponseName.class );
53
54
55 private static final boolean IS_DEBUG = LOG.isDebugEnabled();
56
57
58
59
60
61 public StoreExtendedResponseName()
62 {
63 super( "Store response name" );
64 }
65
66
67
68
69
70 public void action( LdapMessageContainer<ExtendedResponseDecorator<?>> container ) throws DecoderException
71 {
72
73 ExtendedResponse extendedResponse = null;
74
75
76 TLV tlv = container.getCurrentTLV();
77
78
79
80 if ( tlv.getLength() == 0 )
81 {
82 String msg = I18n.err( I18n.ERR_04017 );
83 LOG.error( msg );
84 throw new DecoderException( msg );
85 }
86 else
87 {
88 String responseName = new Oid( Strings.asciiBytesToString( tlv.getValue().getData() ) )
89 .toString();
90
91 extendedResponse = LdapApiServiceFactory.getSingleton().newExtendedResponse( responseName,
92 container.getMessageId(), null );
93
94 ((ExtendedResponseDecorator<?>)extendedResponse).setLdapResult( ((LdapResultDecorator)(container.getMessage().getLdapResult() ) ) );
95 container.setMessage( LdapApiServiceFactory.getSingleton().decorate( extendedResponse ) );
96 }
97
98
99 container.setGrammarEndAllowed( true );
100
101 if ( IS_DEBUG )
102 {
103 LOG.debug( "OID read : {}", extendedResponse.getResponseName() );
104 }
105 }
106 }