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/10/09 15:47:53 UTC

svn commit: r307429 - /directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/utils/DNUtils.java

Author: elecharny
Date: Sun Oct  9 06:47:49 2005
New Revision: 307429

URL: http://svn.apache.org/viewcvs?rev=307429&view=rev
Log:
Extended this class by adding methods that accepts char[] instead of byte[]

Modified:
    directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/utils/DNUtils.java

Modified: directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/utils/DNUtils.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/utils/DNUtils.java?rev=307429&r1=307428&r2=307429&view=diff
==============================================================================
--- directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/utils/DNUtils.java (original)
+++ directory/shared/ldap/trunk/apache2-provider/src/java/main/org/apache/asn1new/ldap/codec/utils/DNUtils.java Sun Oct  9 06:47:49 2005
@@ -86,6 +86,36 @@
         false, false, false, false, false, false, false, false
     };
 
+    /** "oid." static */
+    public static final char[] OID_LOWER = new char[] { 'o', 'i', 'd', '.' };
+
+    /** "OID." static */
+    public static final char[] OID_UPPER = new char[] { 'O', 'I', 'D', '.' };
+    
+    /** "oid." static */
+    public static final byte[] OID_LOWER_BYTES = new byte[] { 'o', 'i', 'd', '.' };
+
+    /** "OID." static */
+    public static final byte[] OID_UPPER_BYTES = new byte[] { 'O', 'I', 'D', '.' };
+
+    /** A value if we got an error while parsing */
+    public static final int PARSING_ERROR = -1;
+
+    /** If an hex pair contains only one char, this value is returned */ 
+    public static final int BAD_HEX_PAIR = -2;
+    
+    /** A constant representing one char length */
+    public static final int ONE_CHAR = 1;
+
+    /** A constant representing two chars length */
+    public static final int TWO_CHARS = 2;
+
+    /** A constant representing one byte length */
+    public static final int ONE_BYTE = 1;
+
+    /** A constant representing two bytes length */
+    public static final int TWO_BYTES = 2;
+
     //~ Methods ------------------------------------------------------------------------------------
 
     /**
@@ -166,6 +196,37 @@
     }
 
     /**
+     * Walk the buffer while characters are Alpha characters :
+     *  <alpha>    ::= [0x41-0x5A] | [0x61-0x7A]
+     * 
+     * @param charArray The buffer which contains the data
+     * @param index Current position in the buffer
+     *
+     * @return The position of the first character which is not an Alpha Char
+     */
+    public static int parseAlphaASCII( char[] charArray, int index )
+    {
+        if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
+                ( index >= charArray.length ) )
+        {
+            return PARSING_ERROR;
+        }
+        else
+        {
+            char c = charArray[index++];
+
+            if ( ( c > 127 ) || ( StringUtils.ALPHA[c] == false ) )
+            {
+                return PARSING_ERROR;
+            }
+            else
+            {
+                return index;
+            }
+        }
+    }
+
+    /**
      * Check if the current character is a Pair Char
      *  <pairchar>    ::= ',' | '=' | '+' | '<' | '>' | '#' | ';' | '\' | '"' | [0-9a-fA-F] [0-9a-fA-F]
      *  
@@ -204,6 +265,44 @@
     }
 
     /**
+     * Check if the current character is a Pair Char
+     *  <pairchar>    ::= ',' | '=' | '+' | '<' | '>' | '#' | ';' | '\' | '"' | [0-9a-fA-F] [0-9a-fA-F]
+     *  
+     * @param charArray The buffer which contains the data
+     * @param index Current position in the buffer
+     *
+     * @return <code>true</code> if the current character is a Pair Char
+     */
+    public static boolean isPairChar( char[] charArray, int index )
+    {
+        if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
+                ( index >= charArray.length ) )
+        {
+            return false;
+        }
+        else
+        {
+            char c = charArray[index];
+
+            if ( ( c > 127 ) || ( PAIR_CHAR[c] == false ) )
+            {
+                return false;
+            }
+            else
+            {
+                if ( StringUtils.isHex( charArray, index++ ) )
+                {
+                    return StringUtils.isHex( charArray, index );
+                }
+                else
+                {
+                    return true;
+                }
+            }
+        }
+    }
+
+    /**
      * Check if the current character is a String Char.
      * Chars are Unicode, not ASCII.
      *  <stringchar>    ::= [0x00-0xFFFF] - [,=+<>#;\"\n\r]
@@ -245,6 +344,47 @@
     }
 
     /**
+     * Check if the current character is a String Char.
+     * Chars are Unicode, not ASCII.
+     *  <stringchar>    ::= [0x00-0xFFFF] - [,=+<>#;\"\n\r]
+     * @param charArray The buffer which contains the data
+     * @param index Current position in the buffer
+     *
+     * @return The current char if it is a String Char, or '#' (this is
+     * simpler than throwing an exception :)
+     */
+    public static int isStringChar( char[] charArray, int index )
+    {
+        if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
+                ( index >= charArray.length ) )
+        {
+            return PARSING_ERROR;
+        }
+        else
+        {
+            char c = charArray[index];
+
+            if ( ( c == 0x0A ) ||
+                    ( c == 0x0D ) ||
+                    ( c == '"' ) ||
+                    ( c == '#' ) ||
+                    ( c == '+' ) ||
+                    ( c == ',' ) ||
+                    ( c == ';' ) ||
+                    ( c == '<' ) ||
+                    ( c == '=' ) ||
+                    ( c == '>' ) )
+            {
+                return PARSING_ERROR;
+            }
+            else
+            {
+                return ONE_CHAR;
+            }
+        }
+    }
+
+    /**
      * Check if the current character is a Quote Char
      * We are testing Unicode chars
      *  <quotechar>    ::= [0x00-0xFFFF] - [\"]
@@ -277,6 +417,38 @@
     }
 
     /**
+     * Check if the current character is a Quote Char
+     * We are testing Unicode chars
+     *  <quotechar>    ::= [0x00-0xFFFF] - [\"]
+     * 
+     * @param charArray The buffer which contains the data
+     * @param index Current position in the buffer
+     *
+     * @return <code>true</code> if the current character is a Quote Char
+     */
+    public static int isQuoteChar( char[] charArray, int index )
+    {
+        if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
+                ( index >= charArray.length ) )
+        {
+            return PARSING_ERROR;
+        }
+        else
+        {
+            char c = charArray[index];
+
+            if ( ( c == '\\' ) || ( c == '"' ) )
+            {
+                return PARSING_ERROR;
+            }
+            else
+            {
+                return ONE_CHAR;
+            }
+        }
+    }
+
+    /**
      * Parse an hex pair
      *   <hexpair>    ::= <hex> <hex>
      *
@@ -306,6 +478,35 @@
     }
 
     /**
+     * Parse an hex pair
+     *   <hexpair>    ::= <hex> <hex>
+     *
+     * @param charArray The buffer which contains the data
+     * @param index Current position in the buffer
+     *
+     * @return The new position, -1 if the buffer does not contain an HexPair, -2 if the
+     * buffer contains an hex byte but not two.
+     */
+    public static int parseHexPair( char[] charArray, int index )
+    {
+        if ( StringUtils.isHex( charArray, index ) )
+        {
+            if ( StringUtils.isHex( charArray, index + 1 ) )
+            {
+                return index + TWO_CHARS;
+            }
+            else
+            {
+                return BAD_HEX_PAIR;
+            }
+        }
+        else
+        {
+            return PARSING_ERROR;
+        }
+    }
+
+    /**
      * Parse an hex string, which is a list of hex pairs
      *  <hexstring>    ::= <hexpair> <hexpairs>
      *  <hexpairs>    ::= <hexpair> <hexpairs> | e
@@ -335,6 +536,38 @@
         }
 
         return ( ( result == -2 ) ? -1 : index );
+    }
+
+    /**
+     * Parse an hex string, which is a list of hex pairs
+     *  <hexstring>    ::= <hexpair> <hexpairs>
+     *  <hexpairs>    ::= <hexpair> <hexpairs> | e
+     *
+     * @param charArray The buffer which contains the data
+     * @param index Current position in the buffer
+     *
+     * @return Return the first position which is not an hex pair, or -1 if there is no
+     * hexpair at the beginning or if an hexpair is invalid (if we have only one hex instead of 2)
+     */
+    public static int parseHexString( char[] charArray, int index )
+    {
+        int result = parseHexPair( charArray, index );
+
+        if ( result < 0 )
+        {
+            return PARSING_ERROR;
+        }
+        else
+        {
+            index += TWO_CHARS;
+        }
+
+        while ( ( result = parseHexPair( charArray, index ) ) >= 0 )
+        {
+            index += TWO_CHARS;
+        }
+
+        return ( ( result == BAD_HEX_PAIR ) ? PARSING_ERROR : index );
     }
 
     /**