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/04/03 20:22:23 UTC
svn commit: r159950 -
directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/codec/utils/DNUtils.java
Author: elecharny
Date: Sun Apr 3 11:22:22 2005
New Revision: 159950
URL: http://svn.apache.org/viewcvs?view=rev&rev=159950
Log:
- Corrected some metho to handle Unicode encoded bytes
- reverted from char[] to byte[], as it was before (Unicode again ...)
Modified:
directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/codec/utils/DNUtils.java
Modified: directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/codec/utils/DNUtils.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/codec/utils/DNUtils.java?view=diff&r1=159949&r2=159950
==============================================================================
--- directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/codec/utils/DNUtils.java (original)
+++ directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/ldap/codec/utils/DNUtils.java Sun Apr 3 11:22:22 2005
@@ -16,6 +16,8 @@
*/
package org.apache.asn1.ldap.codec.utils;
+import org.apache.asn1.util.StringUtils;
+
/**
* Utility class used by the LdapDN Parser.
*
@@ -28,176 +30,129 @@
/** <safe-init-char> ::= [0x01-0x09] | 0x0B | 0x0C | [0x0E-0x1F] | [0x21-0x39] | 0x3B | [0x3D-0x7F] */
private static final boolean[] SAFE_INIT_CHAR =
{
- false, true, true, true, true, true, true, true,
- true, true, false, true, true, false, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- false, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, false, true, false, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true
+ false, true, true, true, true, true, true, true, true, true, false, true, true, false,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, false, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, false,
+ true, false, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true
};
/** <safe-char> ::= [0x01-0x09] | 0x0B | 0x0C | [0x0E-0x7F] */
private static final boolean[] SAFE_CHAR =
{
- false, true, true, true, true, true, true, true,
- true, true, false, true, true, false, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true
+ false, true, true, true, true, true, true, true, true, true, false, true, true, false,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true
};
/** <base64-char> ::= 0x2B | 0x2F | [0x30-0x39] | 0x3D | [0x41-0x5A] | [0x61-0x7A] */
private static final boolean[] BASE64_CHAR =
{
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, true, false, false, false, true,
- true, true, true, true, true, true, true, true,
- true, true, false, false, false, true, false, false,
- false, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, false, false, false, false, false,
- false, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, false, false, false, false, false
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, true, false, false, false, true, true, true, true, true, true,
+ true, true, true, true, true, false, false, false, true, false, false, false, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, false, false, false, false, false,
+ false, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, false, false,
+ false, false, false
};
/** <alpha> ::= [0x41-0x5A] | [0x61-0x7A] */
private static final boolean[] ALPHA =
{
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, false, false, false, false, false,
- false, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, false, false, false, false, false
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, false, false, false,
+ false, false, false, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ false, false, false, false, false
};
/** <alpha> | <digit> | '-' */
private static final boolean[] CHAR =
{
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, true, false, false,
- true, true, true, true, true, true, true, true,
- true, true, false, false, false, false, false, false,
- false, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, false, false, false, false, false,
- false, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true, true,
- true, true, true, false, false, false, false, false
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, true, false, false, true, true, true, true, true,
+ true, true, true, true, true, false, false, false, false, false, false, false, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, false, false, false, false, false,
+ false, true, true, true, true, true, true, true, true, true, true, true, true, true, true,
+ true, true, true, true, true, true, true, true, true, true, true, true, false, false,
+ false, false, false
};
/** '"' | '#' | '+' | ',' | [0-9] | ';' | '<' | '=' | '>' | [A-F] | '\' | [a-f]
* 0x22 | 0x23 | 0x2B | 0x2C | [0x30-0x39] | 0x3B | 0x3C | 0x3D | 0x3E | [0x41-0x46] | 0x5C | [0x61-0x66] */
private static final boolean[] PAIR_CHAR =
{
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, true, true, false, false, false, false,
- false, false, false, true, true, false, false, false,
- true, true, true, true, true, true, true, true,
- true, true, false, true, true, true, true, false,
- false, true, true, true, true, true, true, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, true, false, false, false,
- false, true, true, true, true, true, true, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, true, true, false, false, false,
+ false, false, false, false, true, true, false, false, false, true, true, true, true, true,
+ true, true, true, true, true, false, true, true, true, true, false, false, true, true,
+ true, true, true, true, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, true,
+ false, false, false, false, true, true, true, true, true, true, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false
};
/** '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' */
private static final boolean[] DIGIT =
{
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- true, true, true, true, true, true, true, true,
- true, true, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, true, true, true, true,
+ true, true, true, true, true, true, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false,
};
/** <hex> ::= [0x30-0x39] | [0x41-0x46] | [0x61-0x66] */
private static final boolean[] HEX =
{
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- true, true, true, true, true, true, true, true,
- true, true, false, false, false, false, false, false,
- false, true, true, true, true, true, true, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, true, true, true, true, true, true, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false,
- false, false, false, false, false, false, false, false
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, true, true, true, true,
+ true, true, true, true, true, true, false, false, false, false, false, false, false, true,
+ true, true, true, true, true, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, true, true, true, true, true, true, false, false, false,
+ false, false, false, false, false, false, false, false, false, false, false, false, false,
+ false, false, false, false, false, false, false, false, false
};
//~ Methods ------------------------------------------------------------------------------------
/**
- * Test if the current character is equal to a specific character
+ * Test if the current character is equal to a specific character.
+ * This function works only for character between 0 and 127, as it
+ * does compare a byte and a char (which is 16 bits wide)
+ *
*
* @param byteArray The buffer which contains the data
* @param index Current position in the buffer
@@ -205,19 +160,16 @@
*
* @return <code>true</code> if the current character equals the given character.
*/
- public static boolean isChar( char[] charArray, int index, char car )
+ public static boolean isCharASCII( byte[] byteArray, int index, char car )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
-
return false;
}
else
{
-
- return ( ( charArray[index] == car ) ? true : false );
+ return ( ( byteArray[index] == car ) ? true : false );
}
}
@@ -230,18 +182,16 @@
*
* @return <code>true</code> if the current character is a Digit
*/
- public static boolean isDigit( char[] charArray, int index )
+ public static boolean isDigit( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
-
return false;
}
else
{
- return ( ( ( charArray[index] > 127 ) || ! DIGIT[charArray[index]] ) ? false : true );
+ return ( ( ( byteArray[index] > 127 ) || ! DIGIT[byteArray[index]] ) ? false : true );
}
}
@@ -249,22 +199,19 @@
* Test if the current character is a digit
* <digit> ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
*
- * @param charArray The buffer which contains the data
+ * @param byteArray The buffer which contains the data
*
* @return <code>true</code> if the current character is a Digit
*/
- public static boolean isDigit( char[] charArray )
+ public static boolean isDigit( byte[] byteArray )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) )
{
-
return false;
}
else
{
-
- return ( ( ( charArray[0] > 127 ) || ! DIGIT[charArray[0]] ) ? false : true );
+ return ( ( ( byteArray[0] > 127 ) || ! DIGIT[byteArray[0]] ) ? false : true );
}
}
@@ -272,38 +219,33 @@
* Test if the current character is an Alpha character :
* <alpha> ::= [0x41-0x5A] | [0x61-0x7A]
*
- * @param charArray The buffer which contains the data
+ * @param byteArray The buffer which contains the data
* @param index Current position in the buffer
*
* @return <code>true</code> if the current character is an Alpha character
*/
- public static boolean isAlpha( char[] charArray, int index )
+ public static boolean isAlphaASCII( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
-
return false;
}
else
{
-
- char c = charArray[index++];
+ byte c = byteArray[index++];
if ( ( c > 127 ) || ( ALPHA[c] == false ) )
{
-
return false;
}
else
{
-
return true;
}
}
}
-
+
/**
* Walk the buffer while characters are Safe String characters :
* <safe-string> ::= <safe-init-char> <safe-chars>
@@ -311,40 +253,35 @@
* <safe-chars> ::= <safe-char> <safe-chars> |
* <safe-char> ::= [0x01-0x09] | 0x0B | 0x0C | [0x0E-0x7F]
*
- * @param charArray The buffer which contains the data
+ * @param byteArray The buffer which contains the data
* @param index Current position in the buffer
*
* @return The position of the first character which is not a Safe Char
*/
- public static int parseSafeString( char[] charArray, int index )
+ public static int parseSafeString( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
-
return -1;
}
else
{
-
- char c = charArray[index];
+ byte c = byteArray[index];
if ( ( c > 127 ) || ( SAFE_INIT_CHAR[c] == false ) )
{
-
return -1;
}
index++;
- while ( index < charArray.length )
+ while ( index < byteArray.length )
{
- c = charArray[index];
+ c = byteArray[index];
if ( ( c > 127 ) || ( SAFE_CHAR[c] == false ) )
{
-
break;
}
@@ -359,33 +296,28 @@
* Walk the buffer while characters are Alpha characters :
* <alpha> ::= [0x41-0x5A] | [0x61-0x7A]
*
- * @param charArray The buffer which contains the data
+ * @param byteArray 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 parseAlpha( char[] charArray, int index )
+ public static int parseAlphaASCII( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
-
return -1;
}
else
{
-
- char c = charArray[index++];
+ byte c = byteArray[index++];
if ( ( c > 127 ) || ( ALPHA[c] == false ) )
{
-
return -1;
}
else
{
-
return index;
}
}
@@ -395,33 +327,28 @@
* Check if the current character is an Hex Char
* <hex> ::= [0x30-0x39] | [0x41-0x46] | [0x61-0x66]
*
- * @param charArray The buffer which contains the data
+ * @param byteArray The buffer which contains the data
* @param index Current position in the buffer
*
* @return <code>true</code> if the current character is a Hex Char
*/
- public static boolean isHex( char[] charArray, int index )
+ public static boolean isHex( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
-
return false;
}
else
{
-
- char c = charArray[index];
+ byte c = byteArray[index];
if ( ( c > 127 ) || ( HEX[c] == false ) )
{
-
return false;
}
else
{
-
return true;
}
}
@@ -431,66 +358,60 @@
* 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 byteArray 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 )
+ public static boolean isPairChar( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
-
return false;
}
else
{
-
- char c = charArray[index];
+ byte c = byteArray[index];
if ( ( c > 127 ) || ( PAIR_CHAR[c] == false ) )
{
-
return false;
}
else
{
-
- if (isHex(charArray, index++))
- {
- return isHex(charArray, index);
- }
- else
- {
- return true;
- }
+ if ( isHex( byteArray, index++ ) )
+ {
+ return isHex( byteArray, index );
+ }
+ else
+ {
+ return true;
+ }
}
}
}
/**
- * Check if the current character is a String Char
- * <stringchar> ::= [0x00-0xFF] - [,=+<>#;\"\n\r]
- * @param charArray The buffer which contains the data
+ * Check if the current character is a String Char.
+ * Chars are Unicode, not ASCII.
+ * <stringchar> ::= [0x00-0xFFFF] - [,=+<>#;\"\n\r]
+ * @param byteArray The buffer which contains the data
* @param index Current position in the buffer
*
- * @return <code>true</code> if the current character is a String Char
+ * @return The current char if it is a String Char, or '#' (this is
+ * simpler than throwing an exception :)
*/
- public static boolean isStringChar( char[] charArray, int index )
+ public static int isStringChar( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
-
- return false;
+ return -1;
}
else
{
-
- char c = charArray[index++];
+ byte c = byteArray[index];
if ( ( c == 0x0A ) ||
( c == 0x0D ) ||
@@ -503,43 +424,43 @@
( c == '=' ) ||
( c == '>' ) )
{
- return false;
+ return -1;
}
else
{
- return true;
+ return StringUtils.countBytesPerChar(byteArray, index);
}
}
}
/**
* Check if the current character is a Quote Char
- * <quotechar> ::= [0x00-0xFF] - [\"]
+ * We are testing Unicode chars
+ * <quotechar> ::= [0x00-0xFFFF] - [\"]
*
- * @param charArray The buffer which contains the data
+ * @param byteArray 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 boolean isQuoteChar( char[] charArray, int index )
+ public static int isQuoteChar( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
- return false;
+ return -1;
}
else
{
- char c = charArray[index++];
+ byte c = byteArray[index];
if ( ( c == '\\' ) || ( c == '"' ) )
{
- return false;
+ return -1;
}
else
{
- return true;
+ return StringUtils.countBytesPerChar(byteArray, index);
}
}
}
@@ -548,25 +469,24 @@
* Parse an hex pair
* <hexpair> ::= <hex> <hex>
*
- * @param charArray The buffer which contains the data
+ * @param byteArray 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 )
+ public static int parseHexPair( byte[] byteArray, int index )
{
-
- if ( isHex( charArray, index ))
+ if ( isHex( byteArray, index ) )
{
- if (isHex( charArray, index + 1 ))
- {
- return index + 2;
- }
- else
- {
- return -2;
- }
+ if ( isHex( byteArray, index + 1 ) )
+ {
+ return index + 2;
+ }
+ else
+ {
+ return -2;
+ }
}
else
{
@@ -579,54 +499,52 @@
* <hexstring> ::= <hexpair> <hexpairs>
* <hexpairs> ::= <hexpair> <hexpairs> | e
*
- * @param charArray The buffer which contains the data
+ * @param byteArray 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 )
+ public static int parseHexString( byte[] byteArray, int index )
{
+ int result = parseHexPair( byteArray, index );
- int result = parseHexPair( charArray, index );
-
- if (result < 0)
- {
- return -1;
- }
- else
- {
- index += 2;
- }
+ if ( result < 0 )
+ {
+ return -1;
+ }
+ else
+ {
+ index += 2;
+ }
- while ((result = parseHexPair( charArray, index )) >= 0 )
+ while ( ( result = parseHexPair( byteArray, index ) ) >= 0 )
{
index += 2;
}
- return (result == -2 ? -1 : index);
+ return ( ( result == -2 ) ? -1 : index );
}
/**
- * Check if the current character is a CHAR.
+ * Check if the current character is an 7 bits ASCII CHAR (between 0 and 127).
* <char> ::= <alpha> | <digit> | '-'
*
- * @param charArray The buffer which contains the data
+ * @param byteArray The buffer which contains the data
* @param index Current position in the buffer
*
* @return The position of the next character, if the current one is a CHAR.
*/
- public static int parseChar( char[] charArray, int index )
+ public static int parseCharASCII( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
return -1;
}
else
{
- char c = charArray[index++];
+ byte c = byteArray[index++];
if ( ( c > 127 ) || ( CHAR[c] == false ) )
{
@@ -641,27 +559,25 @@
/**
* Walk the buffer while characters are Base64 characters :
- * <base64-string> ::= <base64-char> <base64-chars>
+ * <base64-string> ::= <base64-char> <base64-chars>
* <base64-chars> ::= <base64-char> <base64-chars> |
* <base64-char> ::= 0x2B | 0x2F | [0x30-0x39] | 0x3D | [0x41-0x5A] | [0x61-0x7A]
*
- * @param charArray The buffer which contains the data
+ * @param byteArray The buffer which contains the data
* @param index Current position in the buffer
*
* @return The position of the first character which is not a Base64 Char
*/
- public static int parseBase64String( char[] charArray, int index )
+ public static int parseBase64String( byte[] byteArray, int index )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( index < 0 ) ||
- ( index >= charArray.length ) )
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( index < 0 ) ||
+ ( index >= byteArray.length ) )
{
return -1;
}
else
{
-
- char c = charArray[index];
+ byte c = byteArray[index];
if ( ( c > 127 ) || ( BASE64_CHAR[c] == false ) )
{
@@ -670,9 +586,9 @@
index++;
- while ( index < charArray.length )
+ while ( index < byteArray.length )
{
- c = charArray[index];
+ c = byteArray[index];
if ( ( c > 127 ) || ( BASE64_CHAR[c] == false ) )
{
@@ -689,27 +605,24 @@
/**
* Check if a text is present at the current position in a buffer.
*
- * @param charArray The buffer which contains the data
+ * @param byteArray The buffer which contains the data
* @param index Current position in the buffer
* @param text The text we want to check
*
* @return <code>true</code> if the buffer contains the text.
*/
- public static int areEquals( char[] charArray, int index, String text )
+ public static int areEquals( byte[] byteArray, int index, String text )
{
-
- if ( ( charArray == null ) || ( charArray.length == 0 ) || ( charArray.length <= index ) ||
+ if ( ( byteArray == null ) || ( byteArray.length == 0 ) || ( byteArray.length <= index ) ||
( index < 0 ) || ( text == null ) )
{
-
return -1;
}
else
{
- char[] data = new char[text.length()];
-
- text.getChars(0, text.length(), data, 0);
- return areEquals(charArray, index, data);
+ byte[] data = text.getBytes();
+
+ return areEquals( byteArray, index, data );
}
}
@@ -725,26 +638,58 @@
public static int areEquals( char[] charArray, int index, char[] charArray2 )
{
- if ( ( charArray == null ) ||
- ( charArray.length == 0 ) ||
- ( charArray.length <= index ) ||
- ( index < 0 ) ||
- ( charArray2 == null ) ||
- ( charArray2.length == 0 ) ||
- ( charArray2.length > charArray.length + index ) )
+ if ( ( charArray == null ) ||
+ ( charArray.length == 0 ) ||
+ ( charArray.length <= index ) ||
+ ( index < 0 ) ||
+ ( charArray2 == null ) ||
+ ( charArray2.length == 0 ) ||
+ ( charArray2.length > ( charArray.length + index ) ) )
{
-
return -1;
}
else
{
-
for ( int i = 0; i < charArray2.length; i++ )
{
-
if ( charArray[index++] != charArray2[i] )
{
+ return -1;
+ }
+ }
+
+ return index;
+ }
+ }
+ /**
+ * Check if a text is present at the current position in a buffer.
+ *
+ * @param byteArray The buffer which contains the data
+ * @param index Current position in the buffer
+ * @param byteArray2 The text we want to check
+ *
+ * @return <code>true</code> if the buffer contains the text.
+ */
+ public static int areEquals( byte[] byteArray, int index, byte[] byteArray2 )
+ {
+
+ if ( ( byteArray == null ) ||
+ ( byteArray.length == 0 ) ||
+ ( byteArray.length <= index ) ||
+ ( index < 0 ) ||
+ ( byteArray2 == null ) ||
+ ( byteArray2.length == 0 ) ||
+ ( byteArray2.length > ( byteArray.length + index ) ) )
+ {
+ return -1;
+ }
+ else
+ {
+ for ( int i = 0; i < byteArray2.length; i++ )
+ {
+ if ( byteArray[index++] != byteArray2[i] )
+ {
return -1;
}
}