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/03/30 06:02:51 UTC
svn commit: rev 9815 - in incubator/directory/snickers/trunk/ber: . src/java/org/apache/snickers/ber src/java/org/apache/snickers/ber/digester src/java/org/apache/snickers/ber/primitives src/test/org/apache/snickers/ber
Author: akarasulu
Date: Mon Mar 29 20:02:49 2004
New Revision: 9815
Added:
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/TagOctetCollector.java (contents, props changed)
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/AbstractRule.java (contents, props changed)
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/BERDigester.java (contents, props changed)
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/Rule.java (contents, props changed)
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/Rules.java (contents, props changed)
Modified:
incubator/directory/snickers/trunk/ber/project.xml
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/BERDecoder.java
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/Length.java
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/Tag.java
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/TupleTreeDecoder.java
incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/primitives/UniversalTag.java
incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/LengthTest.java
incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/MultiByteTagTests.java
incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/TagTest.java
Log:
o Removed the dependency on ArrayByteList in commons primitives
o Using ByteBuffer in LengthDecoder to collect length bytes
o Using a new collector for Tag octets that stores octets in a Java int
o Updated tests to reflect these changes to the core decoder
o Started adding some interfaces to implement a rule based event digester
Modified: incubator/directory/snickers/trunk/ber/project.xml
==============================================================================
--- incubator/directory/snickers/trunk/ber/project.xml (original)
+++ incubator/directory/snickers/trunk/ber/project.xml Mon Mar 29 20:02:49 2004
@@ -26,13 +26,6 @@
</dependency>
<dependency>
- <groupId>commons-primitives</groupId>
- <artifactId>commons-primitives</artifactId>
- <version>1.1-dev</version>
- <url>http://jakarta.apache.org/commons/primitives/api</url>
- </dependency>
-
- <dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>SNAPSHOT</version>
Modified: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/BERDecoder.java
==============================================================================
--- incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/BERDecoder.java (original)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/BERDecoder.java Mon Mar 29 20:02:49 2004
@@ -53,7 +53,7 @@
* callbacks before attempting to interpret their values. Also this decoder
* chunks value data returning it in parts rather than in one complete peice
* in the end. The value of the TLV Tuple returned is the part of the value
- * that was read from the input fed into the decoder. These 'chuncks' returned
+ * that was read from the input fed into the decoder. These 'chunks' returned
* by callback makes it so there are no size limits to the value of a TLV. Again
* to reiterate chunking on values is only performed on primitive TLV Tuple
* types.
Modified: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/Length.java
==============================================================================
--- incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/Length.java (original)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/Length.java Mon Mar 29 20:02:49 2004
@@ -17,8 +17,9 @@
package org.apache.snickers.ber ;
+import java.nio.ByteBuffer ;
+
import org.apache.commons.codec.DecoderException ;
-import org.apache.commons.collections.primitives.ArrayByteList ;
/**
@@ -44,10 +45,9 @@
/** whether or not this length has been fixated */
private boolean isFixated = false ;
/** a byte buffer used to collect the arriving length octets */
- private final ArrayByteList buf = new ArrayByteList( 10 ) ;
+ private final ByteBuffer buf = ByteBuffer.allocate( 5 ) ;
+
-
-
/**
* Checks to see if the length has been fixated.
*
@@ -81,6 +81,7 @@
*/
void fixate() throws DecoderException
{
+ buf.flip() ;
value = getLength( buf ) ;
isFixated = true ;
}
@@ -99,9 +100,9 @@
throw new IllegalStateException( "data added to fixated length" ) ;
}
- buf.add( octet ) ;
+ buf.put( octet ) ;
- if ( buf.size() == 1 )
+ if ( buf.position() == 1 )
{
// if its the long form
if ( END_MASK == ( octet & END_MASK ) && ( octet & 0x7F ) > 0 )
@@ -119,7 +120,7 @@
* if we have collected all the octets needed for computing the long
* form length so we need to calculate the length and just fixate
*/
- else if ( buf.size() >= numOctets + 1 )
+ else if ( buf.position() >= numOctets + 1 )
{
fixate() ;
}
@@ -138,24 +139,13 @@
/**
- * Gets a copy of the octets composing this Length component.
- *
- * @return the octets representing this Length component
- */
- public byte[] getOctets()
- {
- return buf.toArray() ;
- }
-
-
- /**
* Gets the number of octets currently in this Length component.
*
* @return the number of octets currently within this Length component
*/
public int size()
{
- return buf.size() ;
+ return buf.position() ;
}
@@ -166,9 +156,9 @@
* @return the length of the TLV
* @throws DecoderException if the precision cannot hold the number
*/
- public static int getLength( ArrayByteList octets ) throws DecoderException
+ public static int getLength( ByteBuffer octets ) throws DecoderException
{
- if ( octets.size() >= 6 )
+ if ( octets.remaining() >= 6 )
{
/*
* If this exception is ever thrown which is highly unlikely, then
@@ -178,13 +168,15 @@
throw new DecoderException( "Length number is too large." ) ;
}
+ byte octet = octets.get() ;
+
// if we are using the short form then just return the first octet
- if ( ( octets.get( 0 ) & END_MASK ) == 0 )
+ if ( ( octet & END_MASK ) == 0 )
{
- return octets.get( 0 ) ;
+ return octet ;
}
// using the indefinate form
- else if ( ( octets.get( 0 ) & 0x7F ) == 0 )
+ else if ( ( octet & 0x7F ) == 0 )
{
return INDEFINATE ;
}
@@ -193,11 +185,14 @@
int length = 0 ;
// calculate tag value w/ long tag format
- for( int ii = 1 ; ii < octets.size(); ii++ )
- {
- int shift = ( ii - 1 ) * 8 ;
- length |= ( 0xFF & ( int ) octets.get( ii ) ) << shift ;
+
+ int shift = 0 ;
+ do
+ {
+ length |= ( 0xFF & ( int ) octets.get() ) << shift ;
+ shift += 8 ;
}
+ while ( octets.hasRemaining() ) ;
return length ;
}
Modified: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/Tag.java
==============================================================================
--- incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/Tag.java (original)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/Tag.java Mon Mar 29 20:02:49 2004
@@ -18,7 +18,6 @@
import org.apache.commons.codec.DecoderException ;
-import org.apache.commons.collections.primitives.ArrayByteList ;
/**
@@ -46,7 +45,7 @@
/** the type class of this tag */
private TypeClass typeClass = TypeClass.APPLICATION ;
/** a byte buffer used to collect the arriving tag octets */
- private final ArrayByteList buf = new ArrayByteList( 10 ) ;
+ private final TagOctetCollector buf = new TagOctetCollector() ;
/**
@@ -92,7 +91,7 @@
throw new IllegalStateException( "data added to fixated tag" ) ;
}
- buf.add( octet ) ;
+ buf.put( octet ) ;
if ( buf.size() == 1 )
{
@@ -236,19 +235,9 @@
* @throws DecoderException if the id cannot be determined due to
* type limitations of this method's return type.
*/
- public final static int getTagId( ArrayByteList octets )
+ public final static int getTagId( TagOctetCollector octets )
throws DecoderException
{
- if ( octets.size() > 6 )
- {
- /*
- * If this exception is ever thrown which is highly unlikely, then
- * we need to switch to another data type to return because after
- * 5 bytes the int can no longer hold the number.
- */
- throw new DecoderException( "Tag number is too large." ) ;
- }
-
int id = octets.get( 0 ) & SHORT_MASK ;
// if bits are not all 1's then return the value which is less than 31
Added: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/TagOctetCollector.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/TagOctetCollector.java Mon Mar 29 20:02:49 2004
@@ -0,0 +1,182 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.nio.BufferOverflowException;
+
+import org.apache.commons.lang.ArrayUtils ;
+
+
+/**
+ * Collects up to 4 tag octets.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class TagOctetCollector
+{
+ /** the int used to store the tag octets */
+ private int intValue = 0 ;
+ /** the number of octets currently stored */
+ private int _size = 0 ;
+
+
+ /**
+ * Puts an octet into this collector.
+ *
+ * @param octet the octet to put into the collector.
+ */
+ public void put( byte octet )
+ {
+ switch( _size )
+ {
+ case(0):
+ intValue = octet << 24 ;
+ _size = 1 ;
+ break ;
+ case(1):
+ intValue |= ( octet << 16 ) & 0x00FF0000 ;
+ _size = 2 ;
+ break ;
+ case(2):
+ intValue |= ( octet << 8 ) & 0x0000FF00 ;
+ _size = 3 ;
+ break ;
+ case(3):
+ intValue |= octet ;
+ _size = 4 ;
+ break ;
+ default:
+ throw new BufferOverflowException() ;
+ }
+ }
+
+
+ /**
+ * Clears all the tag octets resetting the tag and size to zero.
+ */
+ public void clear()
+ {
+ intValue = 0 ;
+ _size = 0 ;
+ }
+
+
+ /**
+ * Gets the number of octets stored by this TagOctetCollector
+ *
+ * @return
+ */
+ public int size()
+ {
+ return _size ;
+ }
+
+
+ /**
+ * Gets a unique integer value representing the tag octets.
+ *
+ * @return the integer value of the tag.
+ */
+ public int getIntValue()
+ {
+ return intValue ;
+ }
+
+
+ /**
+ * Gets the 4 octets for the tag.
+ *
+ * @return
+ */
+ public byte[] toArray()
+ {
+ byte[] octets = new byte[_size] ;
+
+ switch( _size )
+ {
+ case(0):
+ octets = ArrayUtils.EMPTY_BYTE_ARRAY ;
+ break ;
+ case(1):
+ octets[0] = ( byte ) ( ( intValue & 0xff000000 ) >> 24 ) ;
+ break ;
+ case(2):
+ octets[0] = ( byte ) ( ( intValue & 0xff000000 ) >> 24 ) ;
+ octets[1] = ( byte ) ( ( intValue & 0x00ff0000 ) >> 16 ) ;
+ break ;
+ case(3):
+ octets[0] = ( byte ) ( ( intValue & 0xff000000 ) >> 24 ) ;
+ octets[1] = ( byte ) ( ( intValue & 0x00ff0000 ) >> 16 ) ;
+ octets[2] = ( byte ) ( ( intValue & 0x0000ff00 ) >> 8 ) ;
+ break ;
+ case(4):
+ octets[0] = ( byte ) ( ( intValue & 0xff000000 ) >> 24 ) ;
+ octets[1] = ( byte ) ( ( intValue & 0x00ff0000 ) >> 16 ) ;
+ octets[2] = ( byte ) ( ( intValue & 0x0000ff00 ) >> 8 ) ;
+ octets[3] = ( byte ) ( intValue & 0x000000ff ) ;
+ break ;
+ default:
+ throw new IllegalArgumentException(
+ "Cannot support more than 4 octets" ) ;
+ }
+
+ return octets ;
+ }
+
+
+ /**
+ * Gets the byte at a specific index.
+ *
+ * @param index
+ * @return
+ * @throws IndexOutOfBoundsException
+ */
+ public byte get( int index )
+ {
+ byte octet ;
+
+ if ( index >= _size )
+ {
+ throw new IndexOutOfBoundsException( "accesing index " + index
+ + " with a size of " + _size ) ;
+ }
+
+ switch( index )
+ {
+ case(0):
+ octet = ( byte ) ( ( intValue & 0xff000000 ) >> 24 ) ;
+ break ;
+ case(1):
+ octet = ( byte ) ( ( intValue & 0x00ff0000 ) >> 16 ) ;
+ break ;
+ case(2):
+ octet = ( byte ) ( ( intValue & 0x0000ff00 ) >> 8 ) ;
+ break ;
+ case(3):
+ octet = ( byte ) ( intValue & 0x000000ff ) ;
+ break ;
+ default:
+ throw new IllegalArgumentException(
+ "Cannot support more than 4 octets" ) ;
+ }
+
+ return octet ;
+ }
+}
Modified: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/TupleTreeDecoder.java
==============================================================================
--- incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/TupleTreeDecoder.java (original)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/TupleTreeDecoder.java Mon Mar 29 20:02:49 2004
@@ -17,8 +17,9 @@
package org.apache.snickers.ber ;
-import java.util.ArrayList;
import java.util.Stack ;
+import java.util.ArrayList ;
+
import java.nio.ByteBuffer ;
import org.apache.commons.codec.DecoderException ;
Added: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/AbstractRule.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/AbstractRule.java Mon Mar 29 20:02:49 2004
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.snickers.ber.digester;
+
+
+import java.nio.ByteBuffer ;
+
+import org.apache.snickers.ber.BERDecoder;
+import org.apache.snickers.ber.TypeClass;
+
+
+/**
+ * A rule base class.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public abstract class AbstractRule implements Rule
+{
+ private BERDecoder decoder = null ;
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.Rule#getDecoder()
+ */
+ public BERDecoder getDecoder()
+ {
+ return decoder ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.Rule#setDecoder(
+ * org.apache.snickers.ber.BERDecoder)
+ */
+ public void setDecoder( BERDecoder decoder )
+ {
+ this.decoder = decoder ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.Rule#tag(int, boolean,
+ * org.apache.snickers.ber.TypeClass)
+ */
+ public void tag( int id, boolean isPrimitive, TypeClass typeClass )
+ {
+ // do nothing base class
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.Rule#length(int)
+ */
+ public void length( int length )
+ {
+ // do nothing base class
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.Rule#value(java.nio.ByteBuffer)
+ */
+ public void value( ByteBuffer buf )
+ {
+ // do nothing base class
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.Rule#finish()
+ */
+ public void finish()
+ {
+ // do nothing base class
+ }
+}
Added: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/BERDigester.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/BERDigester.java Mon Mar 29 20:02:49 2004
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.snickers.ber.digester ;
+
+
+import org.apache.snickers.ber.Tuple ;
+import org.apache.snickers.ber.BERDecoderCallback ;
+
+import org.apache.commons.codec.stateful.StatefulDecoder ;
+
+
+/**
+ * A special BER TLV event digester. This class was inspired by the XML
+ * digester in Jakarta Commons.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BERDigester implements BERDecoderCallback
+{
+ // ------------------------------------------------------------------------
+ // BERDecoderCallback methods
+ // ------------------------------------------------------------------------
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.BERDecoderCallback#tagDecoded(
+ * org.apache.snickers.ber.Tuple)
+ */
+ public void tagDecoded( Tuple tlv )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.BERDecoderCallback#lengthDecoded(
+ * org.apache.snickers.ber.Tuple)
+ */
+ public void lengthDecoded( Tuple tlv )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.BERDecoderCallback#partialValueDecoded(
+ * org.apache.snickers.ber.Tuple)
+ */
+ public void partialValueDecoded( Tuple tlv )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderCallback#decodeOccurred(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Object)
+ */
+ public void decodeOccurred( StatefulDecoder decoder, Object decoded )
+ {
+ }
+
+
+ // ------------------------------------------------------------------------
+ // BERDecoderCallback methods
+ // ------------------------------------------------------------------------
+
+
+}
Added: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/Rule.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/Rule.java Mon Mar 29 20:02:49 2004
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.snickers.ber.digester;
+
+
+import java.nio.ByteBuffer ;
+
+import org.apache.snickers.ber.BERDecoder;
+import org.apache.snickers.ber.TypeClass;
+
+
+/**
+ * A BER event processing rule.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface Rule
+{
+ /**
+ * Get the <code>BERDecoder</code> with which this <code>Rule</code> has
+ * been associated.
+ *
+ * @return the associated decoder
+ */
+ BERDecoder getDecoder() ;
+
+ /**
+ * Set the <code>BERDecoder</code> with which this <code>Rule</code> will
+ * be associated.
+ *
+ * @param decoder the decoder to associate this rule with
+ */
+ void setDecoder( BERDecoder decoder ) ;
+
+ /**
+ * Called when the tag of the matched TLV is encountered.
+ *
+ * @param id the tag's id
+ * @param isPrimitive whether tlv is primitive or constructed
+ * @param typeClass the tag's type class
+ */
+ void tag( int id, boolean isPrimitive, TypeClass typeClass ) ;
+
+ /**
+ * Called when the length of a TLV is encountered.
+ *
+ * @param length the length in bytes of the value
+ */
+ void length( int length ) ;
+
+ /**
+ * Called when a peice of the value is available.
+ *
+ * @param buf a portion of the value
+ */
+ void value( ByteBuffer buf ) ;
+
+ /**
+ * Called when the tlv has been completely consumed.
+ */
+ void finish() ;
+}
Added: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/Rules.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/digester/Rules.java Mon Mar 29 20:02:49 2004
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.snickers.ber.digester;
+
+
+import java.util.List ;
+
+import org.apache.snickers.ber.BERDecoder;
+
+
+/**
+ * Public interface defining a collection of Rule instances (and corresponding
+ * matching patterns) plus an implementation of a matching policy that selects
+ * the rules that match a particular pattern of nested elements discovered
+ * during parsing. The interface has been inspired by the digester equivalent.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface Rules
+{
+ /**
+ * Get the <code>BERDecoder</code> instance with which this <code>Rules
+ * </code> instance is associated.
+ *
+ * @return the BERDecoder associated with this Rules instance
+ */
+ public BERDecoder getDecoder() ;
+
+ /**
+ * Get the <code>BERDecoder</code> instance with which this <code>Rules
+ * </code> instance is associated.
+ *
+ * @param the new BERDecoder to be associated with this Rules instance
+ */
+ public void setDecoder( BERDecoder decoder ) ;
+
+ /**
+ * Register a new Rule instance matching the specified pattern.
+ *
+ * @param pattern Tag nesting pattern to be matched for this Rule
+ * @param rule Rule instance to be registered
+ */
+ public void add( int[] pattern, Rule rule ) ;
+
+ /**
+ * Clear all existing Rule instance registrations.
+ */
+ public void clear() ;
+
+ /**
+ * Return a List of all registered Rule instances that match the specified
+ * nesting pattern, or a zero-length List if there are no matches. If more
+ * than one Rule instance matches, they <strong>must</strong> be returned
+ * in the order originally registered through the <code>add()</code>
+ * method.
+ *
+ * @param pattern Nesting pattern to be matched
+ *
+ * @deprecated Call match(namespaceURI,pattern) instead.
+ */
+ public List match( int[] pattern ) ;
+
+ /**
+ * Return a List of all registered Rule instances, or a zero-length List
+ * if there are no registered Rule instances. If more than one Rule
+ * instance has been registered, they <strong>must</strong> be returned
+ * in the order originally registered through the <code>add()</code>
+ * method.
+ */
+ public List rules() ;
+}
Modified: incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/primitives/UniversalTag.java
==============================================================================
--- incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/primitives/UniversalTag.java (original)
+++ incubator/directory/snickers/trunk/ber/src/java/org/apache/snickers/ber/primitives/UniversalTag.java Mon Mar 29 20:02:49 2004
@@ -25,8 +25,13 @@
/**
- * Type safe enum for ASN.1 UNIVERSAL class tags. These tags can have one of
- * the following values:
+ * Type safe enum for ASN.1 UNIVERSAL class tags. The tags values are
+ * constructed using the SNACC representation for tags without the
+ * primitive/constructed bit. This is done because several bit, octet and
+ * character string types can be encoded as primitives or as constructed types
+ * to chunk the value out.
+ * <p>
+ * These tags can have one of the following values:
* <p>
* <table border=1 cellspacing=1 width=60% >
* <tr><th>Id</th><th>Usage</th></tr>
@@ -71,70 +76,69 @@
public class UniversalTag extends ValuedEnum
{
/** value for the tag */
- public static final int RESERVED0_VAL = 0 ;
- /** value for the tag */
- public static final int BOOLEAN_VAL = 1 ;
+ public static final int RESERVED0_VAL = 0x00000000 ;
/** value for the tag */
- public static final int INTEGER_VAL = 2 ;
+ public static final int BOOLEAN_VAL = 0x01000000 ;
/** value for the tag */
- public static final int BIT_STRING_VAL = 3 ;
+ public static final int INTEGER_VAL = 0x02000000 ;
/** value for the tag */
- public static final int OCTET_STRING_VAL = 4 ;
+ public static final int BIT_STRING_VAL = 0x03000000 ;
/** value for the tag */
- public static final int NULL_VAL = 5 ;
+ public static final int OCTET_STRING_VAL = 0x04000000 ;
/** value for the tag */
- public static final int OBJECT_IDENTIFIER_VAL = 6 ;
+ public static final int NULL_VAL = 0x05000000 ;
/** value for the tag */
- public static final int OBJECT_DESCRIPTOR_VAL = 7 ;
+ public static final int OBJECT_IDENTIFIER_VAL = 0x06000000 ;
/** value for the tag */
- public static final int EXTERNAL_INSTANCE_OF_VAL = 8 ;
+ public static final int OBJECT_DESCRIPTOR_VAL = 0x07000000 ;
/** value for the tag */
- public static final int REAL_VAL = 9 ;
+ public static final int EXTERNAL_INSTANCE_OF_VAL = 0x08000000 ;
/** value for the tag */
- public static final int ENUMERATED_VAL = 10 ;
+ public static final int REAL_VAL = 0x09000000 ;
/** value for the tag */
- public static final int EMBEDDED_PDV_VAL = 11 ;
+ public static final int ENUMERATED_VAL = 0x0a000000 ;
/** value for the tag */
- public static final int UTF8_STRING_VAL = 12 ;
+ public static final int EMBEDDED_PDV_VAL = 0x0b000000 ;
/** value for the tag */
- public static final int RELATIVE_OID_VAL = 13 ;
+ public static final int UTF8_STRING_VAL = 0x0c000000 ;
/** value for the tag */
- public static final int RESERVED14_VAL = 14 ;
+ public static final int RELATIVE_OID_VAL = 0x0d000000 ;
/** value for the tag */
- public static final int RESERVED15_VAL = 15 ;
+ public static final int RESERVED14_VAL = 0x0e000000 ;
/** value for the tag */
- public static final int SEQUENCE_SEQUENCE_OF_VAL = 16 ;
+ public static final int RESERVED15_VAL = 0x0f000000 ;
/** value for the tag */
- public static final int SET_SET_OF_VAL = 17 ;
+ public static final int SEQUENCE_SEQUENCE_OF_VAL = 0x10000000 ;
/** value for the tag */
- public static final int NUMERIC_STRING_VAL = 18 ;
+ public static final int SET_SET_OF_VAL = 0x11000000 ;
/** value for the tag */
- public static final int PRINTABLE_STRING_VAL = 19 ;
+ public static final int NUMERIC_STRING_VAL = 0x12000000 ;
/** value for the tag */
- public static final int TELETEX_STRING_T61_STRING_VAL = 20 ;
+ public static final int PRINTABLE_STRING_VAL = 0x13000000 ;
/** value for the tag */
- public static final int VIDEOTEX_STRING_VAL = 21 ;
+ public static final int TELETEX_STRING_VAL = 0x14000000 ;
/** value for the tag */
- public static final int IA5_STRING_VAL = 22 ;
+ public static final int VIDEOTEX_STRING_VAL = 0x15000000 ;
/** value for the tag */
- public static final int UTC_TIME_VAL = 23 ;
+ public static final int IA5_STRING_VAL = 0x16000000 ;
/** value for the tag */
- public static final int GENERALIZED_TIME_VAL = 24 ;
+ public static final int UTC_TIME_VAL = 0x17000000 ;
/** value for the tag */
- public static final int GRAPHIC_STRING_VAL = 25 ;
+ public static final int GENERALIZED_TIME_VAL = 0x18000000 ;
/** value for the tag */
- public static final int VISIBLE_STRING_ISO646_STRING_VAL = 26 ;
+ public static final int GRAPHIC_STRING_VAL = 0x19000000 ;
/** value for the tag */
- public static final int GENERAL_STRING_VAL = 27 ;
+ public static final int VISIBLE_STRING_VAL = 0x1a000000 ;
/** value for the tag */
- public static final int UNIVERSAL_STRING_VAL = 28 ;
+ public static final int GENERAL_STRING_VAL = 0x1b000000 ;
/** value for the tag */
- public static final int CHARACTER_STRING_VAL = 29 ;
+ public static final int UNIVERSAL_STRING_VAL = 0x1c000000 ;
/** value for the tag */
- public static final int BMP_STRING_VAL = 30 ;
+ public static final int CHARACTER_STRING_VAL = 0x1d000000 ;
/** value for the tag */
- public static final int RESERVED31_VAL = 31 ;
+ public static final int BMP_STRING_VAL = 0x1e000000 ;
/** value for the tag */
+ public static final int RESERVED31_VAL = 0x1f000000 ;
/** enum for the tag */
public static final UniversalTag BOOLEAN =
@@ -197,8 +201,8 @@
public static final UniversalTag PRINTABLE_STRING =
new UniversalTag( "PRINTABLE_STRING", PRINTABLE_STRING_VAL ) ;
/** enum for the tag */
- public static final UniversalTag TELETEX_STRING_T61_STRING =
- new UniversalTag( "TELETEX_STRING_T61_STRING", TELETEX_STRING_T61_STRING_VAL ) ;
+ public static final UniversalTag TELETEX_STRING =
+ new UniversalTag( "TELETEX_STRING", TELETEX_STRING_VAL ) ;
/** enum for the tag */
public static final UniversalTag VIDEOTEX_STRING =
new UniversalTag( "VIDEOTEX_STRING", VIDEOTEX_STRING_VAL ) ;
@@ -215,9 +219,8 @@
public static final UniversalTag GRAPHIC_STRING =
new UniversalTag( "GRAPHIC_STRING", GRAPHIC_STRING_VAL ) ;
/** enum for the tag */
- public static final UniversalTag VISIBLE_STRING_ISO646_STRING =
- new UniversalTag( "VISIBLE_STRING_ISO646_STRING",
- VISIBLE_STRING_ISO646_STRING_VAL ) ;
+ public static final UniversalTag VISIBLE_STRING =
+ new UniversalTag( "VISIBLE_STRING", VISIBLE_STRING_VAL ) ;
/** enum for the tag */
public static final UniversalTag GENERAL_STRING =
new UniversalTag( "GENERAL_STRING", GENERAL_STRING_VAL ) ;
@@ -272,124 +275,7 @@
/**
- * Gets the ASN.1 UNIVERSAL type tag's enum using an id value.
- *
- * @param octet the first octet of the TLV
- * @return the valued enum for the ASN.1 UNIVERSAL type tag
- */
- public static boolean isPrimitive( int value )
- {
- boolean isPrimitive = false ;
-
- switch ( value )
- {
- case( RESERVED0_VAL ):
- isPrimitive = false ;
- break ;
- case( BOOLEAN_VAL ):
- isPrimitive = true ;
- break ;
- case( INTEGER_VAL ):
- isPrimitive = true ;
- break ;
- case( BIT_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( OCTET_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( NULL_VAL ):
- isPrimitive = true ;
- break ;
- case( OBJECT_IDENTIFIER_VAL ):
- isPrimitive = true ;
- break ;
- case( OBJECT_DESCRIPTOR_VAL ):
- isPrimitive = true ;
- break ;
- case( EXTERNAL_INSTANCE_OF_VAL ):
- isPrimitive = true ;
- break ;
- case( REAL_VAL ):
- isPrimitive = true ;
- break ;
- case( ENUMERATED_VAL ):
- isPrimitive = true ;
- break ;
- case( EMBEDDED_PDV_VAL ):
- isPrimitive = false ;
- break ;
- case( UTF8_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( RELATIVE_OID_VAL ):
- isPrimitive = true ;
- break ;
- case( RESERVED14_VAL ):
- isPrimitive = false ;
- break ;
- case( RESERVED15_VAL ):
- isPrimitive = false ;
- break ;
- case( SEQUENCE_SEQUENCE_OF_VAL ):
- isPrimitive = false ;
- break ;
- case( SET_SET_OF_VAL ):
- isPrimitive = false ;
- break ;
- case( NUMERIC_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( PRINTABLE_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( TELETEX_STRING_T61_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( VIDEOTEX_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( IA5_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( UTC_TIME_VAL ):
- isPrimitive = true ;
- break ;
- case( GENERALIZED_TIME_VAL ):
- isPrimitive = true ;
- break ;
- case( GRAPHIC_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( VISIBLE_STRING_ISO646_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( GENERAL_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( UNIVERSAL_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( CHARACTER_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( BMP_STRING_VAL ):
- isPrimitive = true ;
- break ;
- case( RESERVED31_VAL ):
- isPrimitive = false ;
- break ;
- default:
- throw new IllegalArgumentException( "Only values between [0-31]"
- + " inclusive constitute valid UNIVERSAL Tags" ) ;
- }
-
- return isPrimitive ;
- }
-
-
- /**
- * Gets the ASN.1 UNIVERSAL type tag's enum using an id value.
+ * Gets the ASN.1 UNIVERSAL type tag's enum using a tag value.
*
* @param octet the first octet of the TLV
* @return the valued enum for the ASN.1 UNIVERSAL type tag
@@ -397,6 +283,7 @@
public static UniversalTag getUniversalTag( int value )
{
UniversalTag type = null ;
+ value &= 0xdfffffff ;
switch ( value )
{
@@ -460,8 +347,8 @@
case( PRINTABLE_STRING_VAL ):
type = PRINTABLE_STRING ;
break ;
- case( TELETEX_STRING_T61_STRING_VAL ):
- type = TELETEX_STRING_T61_STRING ;
+ case( TELETEX_STRING_VAL ):
+ type = TELETEX_STRING ;
break ;
case( VIDEOTEX_STRING_VAL ):
type = VIDEOTEX_STRING ;
@@ -478,8 +365,8 @@
case( GRAPHIC_STRING_VAL ):
type = GRAPHIC_STRING ;
break ;
- case( VISIBLE_STRING_ISO646_STRING_VAL ):
- type = VISIBLE_STRING_ISO646_STRING ;
+ case( VISIBLE_STRING_VAL ):
+ type = VISIBLE_STRING ;
break ;
case( GENERAL_STRING_VAL ):
type = GENERAL_STRING ;
Modified: incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/LengthTest.java
==============================================================================
--- incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/LengthTest.java (original)
+++ incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/LengthTest.java Mon Mar 29 20:02:49 2004
@@ -17,11 +17,10 @@
package org.apache.snickers.ber ;
-import org.apache.commons.collections.primitives.ArrayByteList ;
-import org.apache.commons.lang.ArrayUtils;
-
import junit.framework.TestCase ;
+import java.nio.ByteBuffer ;
+
/**
* Tests the Length class.
@@ -54,15 +53,15 @@
*/
public void testGetLength() throws Exception
{
- ArrayByteList list = new ArrayByteList() ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
+ ByteBuffer list = ByteBuffer.allocate( 8 ) ;
+ list.put( (byte) 0x1 ) ;
+ list.put( (byte) 0x1 ) ;
+ list.put( (byte) 0x1 ) ;
+ list.put( (byte) 0x1 ) ;
+ list.put( (byte) 0x1 ) ;
+ list.put( (byte) 0x1 ) ;
+ list.put( (byte) 0x1 ) ;
+ list.put( (byte) 0x1 ) ;
try
{
@@ -76,7 +75,8 @@
list.clear() ;
- list.add(( byte ) 0x7 ) ;
+ list.put(( byte ) 0x7 ) ;
+ list.flip() ;
assertEquals( 7, Length.getLength( list ) ) ;
}
@@ -91,18 +91,6 @@
{
}
- public void testGetOctets() throws Exception
- {
- byte[] bites = { (byte) 0xff, (byte) 0xff, (byte) 0x0f } ;
-
- Length length = new Length() ;
- length.add( bites[0] ) ;
- length.add( bites[1] ) ;
- length.add( bites[2] ) ;
-
- assertTrue( ArrayUtils.isEquals( bites, length.getOctets() ) ) ;
- }
-
public void testGetOctets2() throws Exception
{
Modified: incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/MultiByteTagTests.java
==============================================================================
--- incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/MultiByteTagTests.java (original)
+++ incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/MultiByteTagTests.java Mon Mar 29 20:02:49 2004
@@ -198,33 +198,6 @@
}
- public void testIdShift21() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( BIT_20, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
public void testIdShift21Minus1() throws Exception
{
Tuple tlv = decode( "01011111" ) ;
@@ -244,122 +217,6 @@
tlv = decode( "01111111" ) ;
assertEquals( BIT_20 - 1, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift21Plus1() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( BIT_20 + 1, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift28() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( BIT_27, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift28Minus1() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "01111111" ) ;
- assertEquals( BIT_27 - 1, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift28Plus1() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( BIT_27 + 1, tlv.id ) ;
assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
}
}
Modified: incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/TagTest.java
==============================================================================
--- incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/TagTest.java (original)
+++ incubator/directory/snickers/trunk/ber/src/test/org/apache/snickers/ber/TagTest.java Mon Mar 29 20:02:49 2004
@@ -18,7 +18,6 @@
import org.apache.commons.lang.ArrayUtils ;
-import org.apache.commons.collections.primitives.ArrayByteList ;
import junit.framework.TestCase ;
@@ -32,20 +31,22 @@
*/
public class TagTest extends TestCase
{
-
- private static final int BIT_7 = 0x80;
- private static final int BIT_6 = 0x40;
- private static final int BIT_4 = 0x10;
- private static final int BIT_3 = 0x08;
- private static final int BIT_2 = 0x04;
- private static final int BIT_1 = 0x02;
- private static final int BIT_0 = 0x01;
- private static final int BIT_5 = 0x20;
- public static void main(String[] args)
+ private static final int BIT_7 = 0x80 ;
+ private static final int BIT_6 = 0x40 ;
+ private static final int BIT_4 = 0x10 ;
+ private static final int BIT_3 = 0x08 ;
+ private static final int BIT_2 = 0x04 ;
+ private static final int BIT_1 = 0x02 ;
+ private static final int BIT_0 = 0x01 ;
+ private static final int BIT_5 = 0x20 ;
+
+
+ public static void main( String[] args )
{
- junit.textui.TestRunner.run(TagTest.class);
+ junit.textui.TestRunner.run( TagTest.class ) ;
}
+
/*
* @see TestCase#setUp()
*/
@@ -54,6 +55,7 @@
super.setUp();
}
+
/*
* @see TestCase#tearDown()
*/
@@ -62,6 +64,7 @@
super.tearDown();
}
+
/**
* Constructor for TagTest.
* @param arg0
@@ -77,6 +80,7 @@
assertEquals( TypeClass.UNIVERSAL, TypeClass.getTypeClass( (byte) 0 ) );
}
+
public void testIsPrimitive() throws Exception
{
byte octet = BIT_5 ;
@@ -193,29 +197,6 @@
}
}
- ArrayByteList list = new ArrayByteList() ;
- list.add( (byte)1) ;
- assertEquals( 1, Tag.getTagId( list ) ) ;
-
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- try
- {
- Tag.getTagId( list ) ;
- fail( "should fail before getting here" ) ;
- }
- catch ( Throwable t )
- {
- assertNotNull( t ) ;
- }
-
-
try
{
Tag.getTagId( new byte[56] ) ;
@@ -237,7 +218,8 @@
tag.add( bites[1] ) ;
tag.add( bites[2] ) ;
- assertTrue( ArrayUtils.isEquals( bites, tag.getOctets() ) ) ;
+ byte[] octets = tag.getOctets() ;
+ assertTrue( ArrayUtils.isEquals( bites, octets ) ) ;
}