You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2005/08/02 08:03:51 UTC
svn commit: r226961 -
/directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/pojo/filters/ExtensibleMatchFilter.java
Author: elecharny
Date: Mon Aug 1 23:03:49 2005
New Revision: 226961
URL: http://svn.apache.org/viewcvs?rev=226961&view=rev
Log:
- fixed the incorrectly calculated length
- added the encoding method
Modified:
directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/pojo/filters/ExtensibleMatchFilter.java
Modified: directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/pojo/filters/ExtensibleMatchFilter.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/pojo/filters/ExtensibleMatchFilter.java?rev=226961&r1=226960&r2=226961&view=diff
==============================================================================
--- directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/pojo/filters/ExtensibleMatchFilter.java (original)
+++ directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/pojo/filters/ExtensibleMatchFilter.java Mon Aug 1 23:03:49 2005
@@ -16,7 +16,14 @@
*/
package org.apache.asn1.ldap.pojo.filters;
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+
+import org.apache.asn1.EncoderException;
import org.apache.asn1.ber.tlv.Length;
+import org.apache.asn1.ber.tlv.UniversalTag;
+import org.apache.asn1.ber.tlv.Value;
+import org.apache.asn1.ldap.codec.LdapConstants;
import org.apache.asn1.ldap.codec.primitives.LdapString;
import org.apache.asn1.primitives.OctetString;
@@ -45,6 +52,12 @@
/** The dnAttributes flag */
private boolean dnAttributes;
+
+ /** The extensible match length */
+ private transient int extensibleMatchLength;
+
+ /** The matching Rule Assertion Length */
+ private transient int matchingRuleAssertionLength;
//~ Constructors -------------------------------------------------------------------------------
@@ -176,34 +189,113 @@
*/
public int computeLength()
{
- // The type
- int extensibleMatchLength = 0;
-
if ( matchingRule != null )
{
- extensibleMatchLength += 1 + Length.getNbBytes( matchingRule.getLength() ) + matchingRule.getLength();
+ matchingRuleAssertionLength = 1 + Length.getNbBytes( matchingRule.getLength() ) + matchingRule.getLength();
}
if ( type != null )
{
- extensibleMatchLength += 1 + Length.getNbBytes( type.getLength() ) + type.getLength();
+ matchingRuleAssertionLength += 1 + Length.getNbBytes( type.getLength() ) + type.getLength();
}
if ( matchValue != null )
{
- extensibleMatchLength += 1 + Length.getNbBytes( matchValue.getLength() ) + matchValue.getLength();
+ matchingRuleAssertionLength += 1 + Length.getNbBytes( matchValue.getLength() ) + matchValue.getLength();
}
if ( dnAttributes == true )
{
- extensibleMatchLength += 1 + 1 + 1;
+ matchingRuleAssertionLength += 1 + 1 + 1;
}
- extensibleMatchLength += 1 + Length.getNbBytes( extensibleMatchLength );
+ extensibleMatchLength = 1 + Length.getNbBytes( matchingRuleAssertionLength ) + matchingRuleAssertionLength;
return 1 + Length.getNbBytes( extensibleMatchLength ) + extensibleMatchLength;
}
+ /**
+ * Encode the ExtensibleMatch Filters to a PDU.
+ *
+ * ExtensibleMatch filter :
+ *
+ * 0xA9 LL
+ * 0x30 LL matchingRuleAssertion
+ * | 0x81 LL matchingRule
+ * | / | 0x82 LL Type
+ * | / | /0x83 LL matchValue
+ * +--+ +-+
+ * | \ \
+ * | \ 0x83 LL MatchValue
+ * | 0x82 LL type
+ * | 0x83 LL matchValue
+ * +--[0x84 0x01 dnAttributes]
+ *
+ * @param buffer The buffer where to put the PDU
+ * @return The PDU.
+ */
+ public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+ {
+ if (buffer == null)
+ {
+ throw new EncoderException("Cannot put a PDU in a null buffer !");
+ }
+
+ try
+ {
+ // The ExtensibleMatch Tag
+ buffer.put( (byte)LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG );
+ buffer.put( Length.getBytes( extensibleMatchLength ) );
+
+ // The MatchingRuleAssertion sequence tag
+ buffer.put( UniversalTag.SEQUENCE_TAG );
+ buffer.put( Length.getBytes( matchingRuleAssertionLength ) );
+
+ if ( ( matchingRule == null ) && ( type == null ) )
+ {
+ throw new EncoderException("Cannot have a null matching rule and a null type");
+ }
+
+ // The matching rule
+ if ( matchingRule != null )
+ {
+ buffer.put( (byte)LdapConstants.SEARCH_MATCHING_RULE_TAG );
+ buffer.put( Length.getBytes( matchingRule.getLength() ) );
+ buffer.put( matchingRule.getData() );
+ }
+
+ // The type
+ if ( type != null )
+ {
+ buffer.put( (byte)LdapConstants.SEARCH_TYPE_TAG );
+ buffer.put( Length.getBytes( type.getLength() ) );
+ buffer.put( type.getData() );
+ }
+
+ // The match value
+ if ( matchValue != null )
+ {
+ buffer.put( (byte)LdapConstants.SEARCH_MATCH_VALUE_TAG );
+ buffer.put( Length.getBytes( matchValue.getLength() ) );
+ buffer.put( matchValue.getValue() );
+ }
+
+ // The dnAttributes flag, if true only
+ if ( dnAttributes == true )
+ {
+ buffer.put( (byte)LdapConstants.DN_ATTRIBUTES_FILTER_TAG );
+ buffer.put( (byte)1 );
+ buffer.put( Value.TRUE_VALUE );
+ }
+ }
+ catch ( BufferOverflowException boe )
+ {
+ throw new EncoderException("The PDU buffer size is too small !");
+ }
+
+ return buffer;
+ }
+
/**
* Return a String representing an extended filter as of RFC 2254
*