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.extendedRequest;
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.ExtendedRequestDecorator;
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.model.message.ExtendedRequest;
32 import org.apache.directory.api.util.Strings;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36
37
38
39
40
41
42
43
44
45
46 public class StoreExtendedRequestName extends GrammarAction<LdapMessageContainer<ExtendedRequestDecorator<?>>>
47 {
48
49 private static final Logger LOG = LoggerFactory.getLogger( StoreExtendedRequestName.class );
50
51
52 private static final boolean IS_DEBUG = LOG.isDebugEnabled();
53
54
55
56
57
58 public StoreExtendedRequestName()
59 {
60 super( "Store ExtendedRequest Name" );
61 }
62
63
64
65
66
67 public void action( LdapMessageContainer<ExtendedRequestDecorator<?>> container ) throws DecoderException
68 {
69 ExtendedRequest req;
70
71
72 TLV tlv = container.getCurrentTLV();
73
74
75
76 if ( tlv.getLength() == 0 )
77 {
78 String msg = I18n.err( I18n.ERR_04095 );
79 LOG.error( msg );
80
81 throw new DecoderException( msg );
82 }
83 else
84 {
85 byte[] requestNameBytes = tlv.getValue().getData();
86
87 try
88 {
89 String requestName = Strings.utf8ToString( requestNameBytes );
90
91 if ( !Oid.isOid( requestName ) )
92 {
93
94 String msg = "The Request name is not a valid OID : "
95 + Strings.utf8ToString( requestNameBytes ) + " ("
96 + Strings.dumpBytes( requestNameBytes ) + ") is invalid";
97 LOG.error( msg );
98
99
100 throw new DecoderException( msg );
101 }
102
103 req = LdapApiServiceFactory.getSingleton().newExtendedRequest( requestName, null );
104 req.setMessageId( container.getMessageId() );
105 container.setMessage( LdapApiServiceFactory.getSingleton().decorate( req ) );
106 }
107 catch ( DecoderException de )
108 {
109 String msg = "The Request name is not a valid OID : "
110 + Strings.utf8ToString( requestNameBytes ) + " ("
111 + Strings.dumpBytes( requestNameBytes ) + ") is invalid";
112 LOG.error( "{} : {}", msg, de.getMessage() );
113
114
115 throw de;
116 }
117 }
118
119
120 container.setGrammarEndAllowed( true );
121
122 if ( IS_DEBUG )
123 {
124 LOG.debug( "OID read : {}", req.getRequestName() );
125 }
126 }
127 }