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.decorators;
21
22
23 import java.nio.BufferOverflowException;
24 import java.nio.ByteBuffer;
25
26 import org.apache.directory.api.asn1.EncoderException;
27 import org.apache.directory.api.asn1.ber.tlv.TLV;
28 import org.apache.directory.api.i18n.I18n;
29 import org.apache.directory.api.ldap.codec.api.LdapApiService;
30 import org.apache.directory.api.ldap.codec.api.LdapCodecConstants;
31 import org.apache.directory.api.ldap.model.message.BindResponse;
32
33
34
35
36
37
38
39 public class BindResponseDecorator extends ResponseDecorator<BindResponse> implements BindResponse
40 {
41
42 private int bindResponseLength;
43
44
45
46
47
48
49
50
51 public BindResponseDecorator( LdapApiService codec, BindResponse decoratedMessage )
52 {
53 super( codec, decoratedMessage );
54 }
55
56
57
58
59
60
61
62
63
64 @Override
65 public byte[] getServerSaslCreds()
66 {
67 return getDecorated().getServerSaslCreds();
68 }
69
70
71
72
73
74 @Override
75 public void setServerSaslCreds( byte[] serverSaslCreds )
76 {
77 getDecorated().setServerSaslCreds( serverSaslCreds );
78 }
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 @Override
99 public int computeLength()
100 {
101 BindResponse bindResponse = getDecorated();
102 int ldapResultLength = ( ( LdapResultDecorator ) getLdapResult() ).computeLength();
103
104 bindResponseLength = ldapResultLength;
105
106 byte[] serverSaslCreds = bindResponse.getServerSaslCreds();
107
108 if ( serverSaslCreds != null )
109 {
110 bindResponseLength += 1 + TLV.getNbBytes( serverSaslCreds.length ) + serverSaslCreds.length;
111 }
112
113 return 1 + TLV.getNbBytes( bindResponseLength ) + bindResponseLength;
114 }
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 @Override
131 public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
132 {
133 BindResponse bindResponse = getDecorated();
134
135 try
136 {
137
138 buffer.put( LdapCodecConstants.BIND_RESPONSE_TAG );
139 buffer.put( TLV.getBytes( bindResponseLength ) );
140
141
142 ( ( LdapResultDecorator ) getLdapResult() ).encode( buffer );
143
144
145 byte[] serverSaslCreds = bindResponse.getServerSaslCreds();
146
147 if ( serverSaslCreds != null )
148 {
149 buffer.put( ( byte ) LdapCodecConstants.SERVER_SASL_CREDENTIAL_TAG );
150
151 buffer.put( TLV.getBytes( serverSaslCreds.length ) );
152
153 if ( serverSaslCreds.length != 0 )
154 {
155 buffer.put( serverSaslCreds );
156 }
157 }
158 }
159 catch ( BufferOverflowException boe )
160 {
161 throw new EncoderException( I18n.err( I18n.ERR_04005 ), boe );
162 }
163
164 return buffer;
165 }
166 }