You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2004/08/15 21:22:10 UTC
svn commit: rev 36416 - incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder
Author: akarasulu
Date: Sun Aug 15 12:22:10 2004
New Revision: 36416
Modified:
incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder/LdapResultEncoder.java
Log:
toying with tree based determinate encoding
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder/LdapResultEncoder.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder/LdapResultEncoder.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder/LdapResultEncoder.java Sun Aug 15 12:22:10 2004
@@ -16,17 +16,17 @@
*/
package org.apache.snickers.ldap.encoder;
-import org.apache.snickers.ber.TupleEventProducer;
-import org.apache.snickers.ber.TupleEventConsumer;
-import org.apache.snickers.ber.Tuple;
-import org.apache.snickers.ber.Length;
+import org.apache.snickers.ber.*;
import org.apache.snickers.ber.primitives.UniversalTag;
import org.apache.snickers.ber.primitives.PrimitiveUtils;
import org.apache.snickers.ldap.LdapTag;
import org.apache.ldap.common.message.LdapResult;
+import org.apache.ldap.common.message.ResultCodeEnum;
+import org.apache.ldap.common.message.Referral;
import java.nio.ByteBuffer;
import java.util.Iterator;
+import java.util.ArrayList;
/**
@@ -104,5 +104,93 @@
consumer.finish( referrals );
}
+ }
+
+
+ /**
+ * Encodes an LdapResult fields into TupleNodes adding them to the top
+ * argument.
+ *
+ * @param top the topmost node to add LDAP result fields to
+ * @param result the ldap result to encode
+ */
+ public void encode( DefaultMutableTupleNode top, LdapResult result )
+ {
+ encodeResultCode( top, result.getResultCode() );
+ encodeMatchedDn( top, result.getMatchedDn() );
+ encodeErrorMsg( top, result.getErrorMessage() );
+
+ if ( result.getReferral() != null &&
+ result.getReferral().getLdapUrls().size() > 0 )
+ {
+ encodeReferral( top, result.getReferral() );
+ }
+
+ }
+
+
+ private void encodeResultCode( DefaultMutableTupleNode top,
+ ResultCodeEnum resultCode )
+ {
+ Tuple tlv = new Tuple();
+ tlv.setTag( UniversalTag.ENUMERATED, true );
+ ByteBuffer chunk = ByteBuffer.wrap( PrimitiveUtils
+ .encodeInt( resultCode.getValue() ) ) ;
+ tlv.setLength( 1 );
+ tlv.setLastValueChunk( chunk );
+ ArrayList list = new ArrayList(1);
+ list.add( chunk );
+ top.addLast( new DefaultMutableTupleNode( tlv, list ) );
+ }
+
+
+ private void encodeMatchedDn( DefaultMutableTupleNode top, String dn )
+ {
+ Tuple tlv = new Tuple();
+ tlv.setTag( UniversalTag.OCTET_STRING, true );
+ ByteBuffer chunk = ByteBuffer.wrap( dn.getBytes() );
+ tlv.setLength( chunk.remaining() );
+ tlv.setLastValueChunk( chunk );
+ ArrayList list = new ArrayList(1);
+ list.add( chunk );
+ top.addLast( new DefaultMutableTupleNode( tlv, list ) );
+ }
+
+
+ private void encodeErrorMsg( DefaultMutableTupleNode top, String msg )
+ {
+ Tuple tlv = new Tuple();
+ tlv.setTag( UniversalTag.OCTET_STRING, true );
+ ByteBuffer chunk = ByteBuffer.wrap( msg.getBytes() );
+ tlv.setLength( chunk.remaining() );
+ tlv.setLastValueChunk( chunk );
+ ArrayList list = new ArrayList(1);
+ list.add( chunk );
+ top.addLast( new DefaultMutableTupleNode( tlv, list ) );
+ }
+
+
+ private void encodeReferral( DefaultMutableTupleNode top, Referral ref )
+ {
+ Tuple referrals = new Tuple();
+ referrals.setTag( LdapTag.REFERRAL_TAG, false );
+ referrals.setLength( Length.INDEFINATE );
+ DefaultMutableTupleNode refs = new DefaultMutableTupleNode( referrals );
+
+ Iterator list = ref.getLdapUrls().iterator();
+ while( list.hasNext() )
+ {
+ Tuple tlv = new Tuple();
+ tlv.setTag( UniversalTag.OCTET_STRING, true );
+ ByteBuffer chunk =
+ ByteBuffer.wrap( ( ( String ) list.next()).getBytes() );
+ tlv.setLength( chunk.remaining() );
+ tlv.setLastValueChunk( chunk );
+ ArrayList values = new ArrayList(1);
+ values.add( chunk );
+ refs.addLast( new DefaultMutableTupleNode( tlv, values ) );
+ }
+
+ top.addLast( refs );
}
}