You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ad...@apache.org on 2004/09/13 17:45:17 UTC
svn commit: rev 45980 - incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber
Author: adc
Date: Mon Sep 13 08:45:16 2004
New Revision: 45980
Added:
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/ASN1ObjectIdentifierEncoder.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/ASN1OctetStringEncoder.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BERDecodes.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BEREncoder.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BERInputStream.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BEROutputStream.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Util.java
Modified:
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Decoder.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderCallback.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderMonitor.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderMonitorAdapter.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Length.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Tag.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Tuple.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TupleNode.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TupleStack.java
incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TypeClass.java
Log:
Checkin
Added: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/ASN1ObjectIdentifierEncoder.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/ASN1ObjectIdentifierEncoder.java Mon Sep 13 08:45:16 2004
@@ -0,0 +1,83 @@
+/**
+ *
+ * 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.encoding.ber;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.apache.snickers.encoding.EncoderException;
+import org.apache.snickers.runtime.ASN1ObjectIdentifier;
+import org.apache.snickers.runtime.ASN1Type;
+
+
+/**
+ * @version $Revision: $ $Date: $
+ */
+public class ASN1ObjectIdentifierEncoder implements BEREncoder
+{
+ public void encode( OutputStream stream, ASN1Type object ) throws EncoderException
+ {
+ if ( !( object instanceof ASN1ObjectIdentifier ) )
+ {
+ throw new EncoderException( "Object not instance of ASN1ObjectIdentifier" );
+ }
+
+ ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) object;
+
+ if ( !oid.isConsistent() )
+ {
+ throw new EncoderException( "ASN1ObjectIdentifier is not consistent." );
+ }
+
+ encode( new BEROutputStream( stream ), object );
+ }
+
+ public int length( int tagNumber, ASN1Type object ) throws EncoderException
+ {
+ if ( !( object instanceof ASN1ObjectIdentifier ) )
+ {
+ throw new EncoderException( "Object not instance of ASN1ObjectIdentifier" );
+ }
+
+ ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) object;
+
+ int length = 0;
+
+ length = Util.calculateLength( tagNumber, BEROutputStream.contentLength( ( tagNumber < 0 ? 6 : tagNumber ), oid ) );
+
+ return length;
+ }
+
+ public void encode( BEROutputStream out, ASN1Type object ) throws EncoderException
+ {
+ if ( !( object instanceof ASN1ObjectIdentifier ) )
+ {
+ throw new EncoderException( "Object not instance of ASN1ObjectIdentifier" );
+ }
+
+ ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) object;
+
+ try
+ {
+ out.encode( oid );
+ }
+ catch ( IOException ioe )
+ {
+ throw new EncoderException( ioe );
+ }
+ }
+}
Added: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/ASN1OctetStringEncoder.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/ASN1OctetStringEncoder.java Mon Sep 13 08:45:16 2004
@@ -0,0 +1,88 @@
+/**
+ *
+ * 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.encoding.ber;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.apache.snickers.encoding.EncoderException;
+import org.apache.snickers.runtime.ASN1OctetString;
+import org.apache.snickers.runtime.ASN1Type;
+
+
+/**
+ * @version $Revision: $ $Date: $
+ */
+public class ASN1OctetStringEncoder implements BEREncoder
+{
+ public void encode( OutputStream stream, ASN1Type object ) throws EncoderException
+ {
+ if ( !( object instanceof ASN1OctetString ) )
+ {
+ throw new EncoderException( "Object not instance of ASN1OctetString" );
+ }
+
+ ASN1OctetString octetString = (ASN1OctetString) object;
+
+ if ( !octetString.isConsistent() )
+ {
+ throw new EncoderException( "ASN1OctetString is not consistent." );
+ }
+
+ encode( new BEROutputStream( stream ), object );
+ }
+
+ public int length( int tagNumber, ASN1Type object ) throws EncoderException
+ {
+ if ( !( object instanceof ASN1OctetString ) )
+ {
+ throw new EncoderException( "Object not instance of ASN1OctetString" );
+ }
+
+ ASN1OctetString octetString = (ASN1OctetString) object;
+
+ if ( !octetString.isConsistent() )
+ {
+ throw new EncoderException( "ASN1OctetString is not consistent." );
+ }
+
+ int length = 0;
+
+ length = Util.calculateLength( tagNumber, BEROutputStream.contentLength( ( tagNumber < 0 ? 4 : tagNumber ), octetString ) );
+
+ return length;
+ }
+
+ public void encode( BEROutputStream out, ASN1Type object ) throws EncoderException
+ {
+ if ( !( object instanceof ASN1OctetString ) )
+ {
+ throw new EncoderException( "Object not instance of ASN1OctetString" );
+ }
+
+ ASN1OctetString octetString = (ASN1OctetString) object;
+
+ try
+ {
+ out.encode( octetString );
+ }
+ catch ( IOException ioe )
+ {
+ throw new EncoderException( ioe );
+ }
+ }
+}
Added: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BERDecodes.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BERDecodes.java Mon Sep 13 08:45:16 2004
@@ -0,0 +1,33 @@
+/**
+ *
+ * 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.encoding.ber;
+
+import java.io.InputStream;
+
+import org.apache.snickers.runtime.ASN1Type;
+import org.apache.snickers.encoding.DecoderException;
+
+
+/**
+ * @version $Revision: $ $Date: $
+ */
+public interface BERDecoder extends org.apache.snickers.encoding.Decoder
+{
+ public ASN1Type decode( InputStream stream ) throws DecoderException;
+
+ public ASN1Type decode( BERInputStream stream ) throws DecoderException;
+}
Added: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BEREncoder.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BEREncoder.java Mon Sep 13 08:45:16 2004
@@ -0,0 +1,50 @@
+/**
+ *
+ * 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.encoding.ber;
+
+import org.apache.snickers.encoding.Encoder;
+import org.apache.snickers.encoding.EncoderException;
+import org.apache.snickers.runtime.ASN1Type;
+
+
+/**
+ * @version $Revision: $ $Date: $
+ */
+public interface BEREncoder extends Encoder
+{
+ /**
+ * Encode an ASN1 object onto the output stream.
+ *
+ * @param stream the stream that is to receive the encoded ASN1 object.
+ * @param object the ASN1 object to be encoded
+ * @throws org.apache.snickers.encoding.EncoderException
+ * if an error occurs during encoding
+ */
+ public void encode( BEROutputStream stream, ASN1Type object ) throws EncoderException;
+
+ /**
+ * Obtain the number of bytes that this encoder would use to encode an
+ * ASN1 object.
+ * <p/>
+ * Return -1 if the number of bytes is indefinite.
+ *
+ * @return the number of bytes that this encoder would use to encode an
+ * ASN1 object
+ * @throws EncoderException if an error occurs during the calculation
+ */
+ public int length( int tagNumber, ASN1Type object ) throws EncoderException;
+}
Added: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BERInputStream.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BERInputStream.java Mon Sep 13 08:45:16 2004
@@ -0,0 +1,88 @@
+/**
+ *
+ * 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.encoding.ber;
+
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+
+/**
+ * @version $Revision: $ $Date: $
+ */
+public class BERInputStream extends FilterInputStream
+{
+ private boolean constructed;
+ private int tag;
+
+ /**
+ * Creates a <code>FilterInputStream</code>
+ * by assigning the argument <code>in</code>
+ * to the field <code>this.in</code> so as
+ * to remember it for later use.
+ *
+ * @param in the underlying input stream, or <code>null</code> if
+ * this instance is to be created without an underlying stream.
+ */
+ public BERInputStream( InputStream in )
+ {
+ super( in );
+ }
+
+ public TypeClass readTypeClass() throws IOException
+ {
+ byte b = (byte) in.read();
+
+ constructed = ( b & 0x20 ) != 0;
+
+ tag = b & 0x1F;
+ if ( tag == 0x1F )
+ {
+ tag = 0;
+ while ( true )
+ {
+ tag <<= 7;
+ b = (byte) in.read();
+ tag |= b & 0x7f;
+ if ( ( b & 0x80 ) != 0x80 ) break;
+
+ }
+ }
+
+ switch ( b & 0xc0 )
+ {
+ case 0x40:
+ return TypeClass.APPLICATION;
+ case 0x80:
+ return TypeClass.CONTEXT_SPECIFIC;
+ case 0xC0:
+ return TypeClass.PRIVATE;
+ default:
+ return TypeClass.UNIVERSAL;
+ }
+ }
+
+ public boolean readConstructed() throws IOException
+ {
+ return constructed;
+ }
+
+ public int readTag() throws IOException
+ {
+ return tag;
+ }
+}
Added: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BEROutputStream.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/BEROutputStream.java Mon Sep 13 08:45:16 2004
@@ -0,0 +1,354 @@
+/**
+ *
+ * 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.encoding.ber;
+
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.math.BigInteger;
+import java.util.Stack;
+
+import org.apache.snickers.runtime.ASN1BMPString;
+import org.apache.snickers.runtime.ASN1BitString;
+import org.apache.snickers.runtime.ASN1GeneralString;
+import org.apache.snickers.runtime.ASN1GraphicString;
+import org.apache.snickers.runtime.ASN1IA5String;
+import org.apache.snickers.runtime.ASN1NumericString;
+import org.apache.snickers.runtime.ASN1ObjectIdentifier;
+import org.apache.snickers.runtime.ASN1OctetString;
+import org.apache.snickers.runtime.ASN1PrintableString;
+import org.apache.snickers.runtime.ASN1TeletexString;
+import org.apache.snickers.runtime.ASN1VideotexString;
+import org.apache.snickers.runtime.ASN1VisibleString;
+
+
+/**
+ * @version $Revision: $ $Date: $
+ */
+public class BEROutputStream extends FilterOutputStream
+{
+ private final static Boolean INDEFINITE = new Boolean( true );
+ private final static Boolean DEFINITE = new Boolean( false );
+ private Identifier implicitID;
+ private Stack lengthEncodings = new Stack();
+
+ public BEROutputStream( OutputStream output )
+ {
+ super( output );
+ }
+
+ public void encodeExplicit( TypeClass typeClass, boolean primitive, int tag ) throws IOException
+ {
+ if ( implicitID != null )
+ {
+ typeClass = implicitID.getTypeClass();
+ primitive = implicitID.isPrimitive();
+ tag = implicitID.getTag();
+ implicitID = null;
+ }
+ int result = 0;
+
+ if ( typeClass == TypeClass.APPLICATION )
+ {
+ result = 0x40;
+ }
+ else if ( typeClass == TypeClass.CONTEXT_SPECIFIC )
+ {
+ result = 0x80;
+ }
+ else if ( typeClass == TypeClass.PRIVATE )
+ {
+ result = 0xC0;
+ }
+
+ result |= ( primitive ? 0 : 0x20 );
+
+ if ( tag >= 31 )
+ {
+ result |= 0x1F;
+ out.write( result );
+
+ if ( tag >= 0x10000000 ) out.write( tag >>> 28 | 0x80 );
+ if ( tag >= 0x200000 ) out.write( tag >>> 21 | 0x80 );
+ if ( tag >= 0x4000 ) out.write( tag >>> 14 | 0x80 );
+ if ( tag >= 0x80 ) out.write( tag >>> 7 | 0x80 );
+ out.write( tag & 0x7f );
+ }
+ else
+ {
+ result |= tag;
+ out.write( result );
+ }
+ }
+
+ public void encodeImplicit( TypeClass typeClass, boolean primitive, int tag ) throws IOException
+ {
+ implicitID = new Identifier( typeClass, primitive, tag );
+ }
+
+ public void encodeLengthBegin( int length ) throws IOException
+ {
+ if ( length >= 0 )
+ {
+ if ( length >= 128 )
+ {
+ int count;
+
+ if ( length >= 0x1000000 )
+ {
+ count = 4;
+ }
+ else if ( length >= 0x10000 )
+ {
+ count = 3;
+ }
+ else if ( length >= 256 )
+ {
+ count = 2;
+ }
+ else
+ {
+ count = 1;
+ }
+ out.write( 0x80 | count );
+
+ for ( int j = ( count - 1 ) * 8; j >= 0; j -= 8 )
+ {
+ out.write( length >> j );
+ }
+
+ }
+ else
+ {
+ out.write( length );
+ }
+ lengthEncodings.push( DEFINITE );
+ }
+ else
+ {
+ out.write( 0x80 );
+ lengthEncodings.push( INDEFINITE );
+ }
+ }
+
+ public void encodeLengthEnd() throws IOException
+ {
+ if ( lengthEncodings.pop() == INDEFINITE )
+ {
+ out.write( 0x0 );
+ out.write( 0x0 );
+ }
+ }
+
+ public void encode( boolean value ) throws IOException
+ {
+ }
+
+ public void encode( byte value ) throws IOException
+ {
+ out.write( value );
+ }
+
+ public void encode( Byte value ) throws IOException
+ {
+ }
+
+ public void encode( int value ) throws IOException
+ {
+ }
+
+ public void encode( Integer value ) throws IOException
+ {
+ }
+
+ public void encode( long value ) throws IOException
+ {
+ }
+
+ public void encode( Long value ) throws IOException
+ {
+ }
+
+ public void encode( BigInteger value ) throws IOException
+ {
+ }
+
+ public void encode( float value ) throws IOException
+ {
+ }
+
+ public void encode( double value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1BitString value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1OctetString value ) throws IOException
+ {
+ encodeExplicit( org.apache.snickers.encoding.ber.TypeClass.UNIVERSAL, true, 4 );
+ encodeLengthBegin( contentLength( 4, value ) );
+
+ out.write( value.getOctetString() );
+
+ encodeLengthEnd();
+ }
+
+ static int contentLength( int tagNumber, ASN1OctetString octetString )
+ {
+ return octetString.getOctetString().length;
+ }
+
+ public void encode( byte[] value ) throws IOException
+ {
+ }
+
+ /**
+ * Encode a null value
+ */
+ public void encode() throws IOException
+ {
+ }
+
+ public void encode( ASN1ObjectIdentifier value ) throws IOException
+ {
+ encodeExplicit( org.apache.snickers.encoding.ber.TypeClass.UNIVERSAL, true, 6 );
+ encodeLengthBegin( contentLength( 6, value ) );
+
+ write( value.getId( 0 ) * 40 + value.getId( 1 ) );
+ for ( int i = 2; i < value.size(); i++ )
+ {
+ int id = value.getId( i );
+ if ( id >= 0x10000000 )
+ {
+ out.write( id >>> 28 | 0x80 );
+ }
+ if ( id >= 0x200000 )
+ {
+ out.write( id >>> 21 | 0x80 );
+ }
+ if ( id >= 0x4000 )
+ {
+ out.write( id >>> 14 | 0x80 );
+ }
+ if ( id >= 0x80 )
+ {
+ out.write( id >>> 7 | 0x80 );
+ }
+ out.write( id & 0x7f );
+ }
+
+ encodeLengthEnd();
+ }
+
+ static int contentLength( int tagNumber, ASN1ObjectIdentifier oid )
+ {
+ int length = 1;
+ for ( int i = 2; i < oid.size(); i++ )
+ {
+ int id = oid.getId( i );
+ if ( id >= 0x10000000 )
+ {
+ length += 5;
+ }
+ else if ( id >= 0x200000 )
+ {
+ length += 4;
+ }
+ else if ( id >= 0x4000 )
+ {
+ length += 3;
+ }
+ else if ( id >= 0x80 )
+ {
+ length += 2;
+ }
+ else
+ {
+ length++;
+ }
+ }
+
+ return length;
+ }
+
+ public void encode( ASN1BMPString value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1NumericString value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1PrintableString value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1TeletexString value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1VideotexString value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1VisibleString value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1IA5String value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1GraphicString value ) throws IOException
+ {
+ }
+
+ public void encode( ASN1GeneralString value ) throws IOException
+ {
+ }
+
+ private class Identifier
+ {
+ private final TypeClass typeClass;
+ private final boolean primitive;
+ private final int tag;
+
+ public Identifier( TypeClass typeClass, boolean primitive, int tag )
+ {
+ this.typeClass = typeClass;
+ this.primitive = primitive;
+ this.tag = tag;
+ }
+
+ public TypeClass getTypeClass()
+ {
+ return typeClass;
+ }
+
+ public boolean isPrimitive()
+ {
+ return primitive;
+ }
+
+ public int getTag()
+ {
+ return tag;
+ }
+ }
+}
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Decoder.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Decoder.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Decoder.java Mon Sep 13 08:45:16 2004
@@ -17,9 +17,7 @@
package org.apache.snickers.encoding.ber;
import java.nio.ByteBuffer;
-import java.io.InputStream;
-import org.apache.snickers.runtime.ASN1Type;
import org.apache.snickers.encoding.DecoderException;
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderCallback.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderCallback.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderCallback.java Mon Sep 13 08:45:16 2004
@@ -18,8 +18,6 @@
import java.nio.ByteBuffer;
-import org.apache.snickers.encoding.ber.Decoder;
-
/**
* Callback interface for stateful decoder callbacks.
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderMonitor.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderMonitor.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderMonitor.java Mon Sep 13 08:45:16 2004
@@ -16,8 +16,7 @@
*/
package org.apache.snickers.encoding.ber;
-import org.apache.snickers.encoding.ber.Decoder;
-import org.apache.snickers.encoding.ber.DecoderCallback;
+
/**
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderMonitorAdapter.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderMonitorAdapter.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/DecoderMonitorAdapter.java Mon Sep 13 08:45:16 2004
@@ -16,9 +16,7 @@
*/
package org.apache.snickers.encoding.ber;
-import org.apache.snickers.encoding.ber.Decoder;
-import org.apache.snickers.encoding.ber.DecoderCallback;
-import org.apache.snickers.encoding.ber.DecoderMonitor;
+
/**
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Length.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Length.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Length.java Mon Sep 13 08:45:16 2004
@@ -64,7 +64,7 @@
/**
* Checks to see if the length has been fixated.
- *
+ *
* @return true if it is fixated, false if not
*/
public boolean isFixated()
@@ -91,7 +91,8 @@
* properties from the existing set of octets. While fixated octets
* cannot be added.
*
- * @throws org.apache.snickers.encoding.DecoderException if this Length is invalid
+ * @throws org.apache.snickers.encoding.DecoderException
+ * if this Length is invalid
*/
void fixate() throws DecoderException
{
@@ -104,7 +105,7 @@
/**
* Adds an octet to this Length component and as a side effect fixates the
* Length component if all the required length data has arrived.
- *
+ *
* @param octet the 8 bit byte to add
*/
public void add( byte octet ) throws DecoderException
@@ -143,7 +144,7 @@
/**
* Gets the length of the value.
- *
+ *
* @return the length of the value
*/
public int getLength()
@@ -154,7 +155,7 @@
/**
* Gets the number of octets currently in this Length component.
- *
+ *
* @return the number of octets currently within this Length component
*/
public int size()
@@ -165,7 +166,7 @@
/**
* Decodes the length of a value for a tlv using the Length field bytes.
- *
+ *
* @param octets the length field bytes in the TLV
* @return the length of the TLV
* @throws DecoderException if the precision cannot hold the number
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Tag.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Tag.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Tag.java Mon Sep 13 08:45:16 2004
@@ -108,7 +108,8 @@
* properties from the existing set of octets. While fixated octets
* cannot be added.
*
- * @throws org.apache.snickers.encoding.DecoderException if this Tag is invalid
+ * @throws org.apache.snickers.encoding.DecoderException
+ * if this Tag is invalid
*/
void fixate() throws DecoderException
{
@@ -124,7 +125,7 @@
/**
* Adds an octet to this Tag and as a size effect may fixate the Tag if
* all the expected data has arrived.
- *
+ *
* @param octet the 8 bit byte to add
*/
void add( byte octet ) throws DecoderException
@@ -159,7 +160,7 @@
/**
* Gets a copy of the octets composing this Tag.
- *
+ *
* @return the octets representing this Tag
*/
byte[] getOctets()
@@ -170,7 +171,7 @@
/**
* Gets the number of octets in this Tag.
- *
+ *
* @return the number of octets within this Tag
*/
int size()
@@ -181,7 +182,7 @@
/**
* Gets the id.
- *
+ *
* @return the id
*/
int getId()
@@ -192,7 +193,7 @@
/**
* Gets the raw tag as it is stuffed into a primitive int.
- *
+ *
* @return a primitive int stuffed with the first four octets of the tag
*/
int getRawTag()
@@ -215,7 +216,7 @@
/**
* Checks to see if the tag has been fixated.
- *
+ *
* @return true if it is fixated, false if not
*/
boolean isFixated()
@@ -226,7 +227,7 @@
/**
* Gets the type class for this Tag.
- *
+ *
* @return the typeClass for this Tag
*/
TypeClass getTypeClass()
@@ -297,8 +298,9 @@
* @param octets the set of octets needed to determine the tag value
* (a.k.a identifier octets)
* @return the tag id
- * @throws org.apache.snickers.encoding.DecoderException if the id cannot be determined due to
- * type limitations of this method's return type.
+ * @throws org.apache.snickers.encoding.DecoderException
+ * if the id cannot be determined due to
+ * type limitations of this method's return type.
*/
final static int getTagId( byte[] octets ) throws DecoderException
{
@@ -336,7 +338,7 @@
/**
* Checks to see if the tag is a primitive.
- *
+ *
* @param octet the first octet of the tag
* @return true if this tag is of the simple type, false if constructed
*/
@@ -348,7 +350,7 @@
/**
* Checks to see if the tag is constructed.
- *
+ *
* @param octet the first octet of the tag
* @return true if constructed, false if primitive
*/
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Tuple.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Tuple.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Tuple.java Mon Sep 13 08:45:16 2004
@@ -20,9 +20,6 @@
import java.nio.ByteBuffer;
import java.util.List;
-import org.apache.snickers.encoding.ber.Length;
-import org.apache.snickers.encoding.ber.Tag;
-
/**
* TLV Tuple used by the value chunking decoder. Because the length field is
@@ -107,7 +104,7 @@
{
}
- public Tuple(Tag tag)
+ public Tuple( Tag tag )
{
rawTag = tag.getRawTag();
id = tag.getId();
@@ -202,7 +199,7 @@
/**
* Gets the tag id for this TLV Tuple.
- *
+ *
* @return the tag id
*/
public int getId()
@@ -212,6 +209,7 @@
/**
* Sets the tag id for this TLV Tuple.
+ *
* @param id the tag id
*/
public void setId( int id )
@@ -221,7 +219,7 @@
/**
* Gets the raw tag as it is stuffed into a primitive int.
- *
+ *
* @return a primitive int stuffed with the first four octets of the tag
*/
public int getRawTag()
@@ -246,7 +244,7 @@
/**
* Get's whether or not this tuples's length is indefinite.
- *
+ *
* @return whether or not this tuple's length is indefinite
*/
public boolean isIndefinite()
@@ -259,7 +257,7 @@
* Get's whether or not this tuple terminates an indefinite constructed
* tuple. This means that length == 0 && isPrimitive = true && id == 0
* and the type class is universal.
- *
+ *
* @return whether or not this node's length is indefinate
*/
public boolean isIndefiniteTerminator()
@@ -271,7 +269,7 @@
/**
* Gets whether or not this TLV tuple is primitive or constructed.
- *
+ *
* @return true if it is primitive, false if it is constructed
*/
public boolean isPrimitive()
@@ -281,6 +279,7 @@
/**
* Sets whether or not this TLV tuple is primitive or constructed.
+ *
* @param primitive
*/
public void setPrimitive( boolean primitive )
@@ -290,7 +289,7 @@
/**
* Gets the value length for this TLV Tuple.
- *
+ *
* @return the length in bytes of the value field for this TLV tuple
*/
public int getLength()
@@ -310,7 +309,7 @@
/**
* Gets the BER TLV TypeClass for this TLV Tuple.
- *
+ *
* @return the BER TLV TypeClass for this TLV Tuple
*/
public TypeClass getTypeClass()
@@ -320,6 +319,7 @@
/**
* Sets the BER TLV TypeClass for this TLV Tuple.
+ *
* @param typeClass the BER TLV TypeClass for this TLV Tuple
*/
public void setTypeClass( TypeClass typeClass )
@@ -331,7 +331,7 @@
* Gets the total size of this TLV tuple in bytes. This includes the
* length of the tag field, the length of the length field and the length
* of the value filed.
- *
+ *
* @return the total TLV size in bytes
*/
public int size()
@@ -593,7 +593,7 @@
/**
* Gets the length in bytes of the tag section for this TLV tuple.
- *
+ *
* @return the length in bytes of the tag section for this TLV tuple
*/
public int getTagLength()
@@ -627,7 +627,7 @@
/**
* Gets the length in bytes of the length section of this TLV Tuple.
- *
+ *
* @return the length in bytes of the length section
*/
public int getLengthLength()
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TupleNode.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TupleNode.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TupleNode.java Mon Sep 13 08:45:16 2004
@@ -21,8 +21,6 @@
import java.util.Iterator;
import java.util.List;
-import org.apache.snickers.encoding.ber.Tuple;
-
/**
* A TLV Tuple tree node modeled in the likeness of a TreeNode.
@@ -54,7 +52,7 @@
/**
* Gets a tuple node at an index. The analogous interface on <code>TreeNode
* </code> would be the <code>getChildAt</code> method.
- *
+ *
* @param index the index of the child to get
* @return the child node at the specified index
*/
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TupleStack.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TupleStack.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TupleStack.java Mon Sep 13 08:45:16 2004
@@ -44,7 +44,7 @@
* a reference to the stack's decoder which is used used to report status
* with monitor
*/
- private final BERDecoder decoder;
+ private final AOKDecoder decoder;
/**
* internal stack used to track incomplete tuples
@@ -58,7 +58,7 @@
* @param decoder the stack's decoder which is used used to report status
* with monitor
*/
- TupleStack( BERDecoder decoder )
+ TupleStack( AOKDecoder decoder )
{
this.decoder = decoder;
}
Modified: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TypeClass.java
==============================================================================
--- incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TypeClass.java (original)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/TypeClass.java Mon Sep 13 08:45:16 2004
@@ -90,7 +90,7 @@
/**
* Gets the enumeration type for the type class regardless of case.
- *
+ *
* @param className the type class name
* @return the TypeClass for the name
*/
@@ -141,7 +141,7 @@
/**
* Gets a List of the enumerations for ASN.1 type classes.
- *
+ *
* @return the List of enumerations possible for ASN.1 type classes
*/
public static List list()
@@ -152,7 +152,7 @@
/**
* Gets the Map of TypeClass objects by name using the TypeClass class.
- *
+ *
* @return the Map by name of TypeClass
*/
public static Map map()
@@ -163,7 +163,7 @@
/**
* Gets the ASN.1 type's class using a TLV tag.
- *
+ *
* @param octet the first octet of the TLV
* @return the TypeClass enumeration for the ASN.1 type's class
*/
Added: incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Util.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/branches/ber-decoder/modules/runtime/src/java/org/apache/snickers/encoding/ber/Util.java Mon Sep 13 08:45:16 2004
@@ -0,0 +1,113 @@
+/**
+ *
+ * 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.encoding.ber;
+
+/**
+ * Utility methods for BER encoding/decoding.
+ *
+ * @version $Revision: $ $Date: $
+ */
+public class Util
+{
+ /**
+ * Increment the length, given the current length and increment.
+ * <p/>
+ * If either are less than zero, meaning that the length is indefinite,
+ * then the incremented length is also less than zero.
+ *
+ * @param original the current length
+ * @param increment the increment length
+ * @return the incremented length
+ */
+ public static int incrementLength( int original, int increment )
+ {
+ if ( original < 0 || increment < 0 ) return -1;
+ return original + increment;
+ }
+
+ /**
+ * Calculate the total length, which would include the identifier octests
+ * and length octets as well as the contents octets.
+ * <p/>
+ * If length is less than zero, meaning that the length is indefinite,
+ * then the calculated length is also less than zero.
+ *
+ * @param length
+ * @return
+ */
+ public static int calculateLength( int tag, int length )
+ {
+ if ( length < 0 ) return -1;
+
+ int result = 1;
+
+ /**
+ * length of tag
+ */
+ if ( tag >= 0x10000000 )
+ {
+ result += 5;
+ }
+ else if ( tag >= 0x200000 )
+ {
+ result += 4;
+ }
+ else if ( tag >= 0x4000 )
+ {
+ result += 3;
+ }
+ else if ( tag >= 0x80 )
+ {
+ result += 2;
+ }
+ else if ( tag >= 0x1F )
+ {
+ result += 1;
+ }
+
+ /**
+ * length of length octets
+ */
+ if ( length >= 0x1000000 )
+ {
+ result += 5;
+ }
+ else if ( length >= 0x10000 )
+ {
+ result += 4;
+ }
+ else if ( length >= 0x100 )
+ {
+ result += 3;
+ }
+ else if ( length >= 0x80 )
+ {
+ result += 2;
+ }
+ else
+ {
+ result++;
+ }
+
+ /**
+ * length of contents
+ */
+ result += length;
+
+ return result;
+ }
+}