rhoegg 2003/02/01 14:29:37
Modified: . Tag: XMLRPC_1_2_BRANCH build.xml
src/java/org/apache/xmlrpc Tag: XMLRPC_1_2_BRANCH
Base64.java
src/test/org/apache/xmlrpc Tag: XMLRPC_1_2_BRANCH
Base64Test.java
Log:
Brought Base64 up to date with HEAD.
Revision Changes Path
No revision
No revision
1.20.2.1 +1 -1 xml-rpc/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/xml-rpc/build.xml,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -u -r1.20 -r1.20.2.1
--- build.xml 10 Oct 2002 00:33:24 -0000 1.20
+++ build.xml 1 Feb 2003 22:29:37 -0000 1.20.2.1
@@ -3,7 +3,7 @@
<project name="xmlrpc" default="jar" basedir=".">
<!-- Properties which are not allowed to be overridden -->
- <property name="version" value="1.2-a3-dev"/>
+ <property name="version" value="1.2-b1-dev"/>
<!-- Allow any user specific values to override the defaults -->
<property file="${user.home}/build.properties" />
No revision
No revision
1.4.2.1 +32 -8 xml-rpc/src/java/org/apache/xmlrpc/Base64.java
Index: Base64.java
===================================================================
RCS file: /home/cvs/xml-rpc/src/java/org/apache/xmlrpc/Base64.java,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- Base64.java 1 Nov 2002 22:06:10 -0000 1.4
+++ Base64.java 1 Feb 2003 22:29:37 -0000 1.4.2.1
@@ -79,6 +79,9 @@
*/
public final class Base64
{
+ static final int CHUNK_SIZE = 76;
+ static final byte[] CHUNK_SEPARATOR = "\n".getBytes();
+
static private final int BASELENGTH = 255;
static private final int LOOKUPLENGTH = 64;
static private final int TWENTYFOURBITGROUP = 24;
@@ -167,24 +170,34 @@
int fewerThan24bits = lengthDataBits%TWENTYFOURBITGROUP;
int numberTriplets = lengthDataBits/TWENTYFOURBITGROUP;
byte encodedData[] = null;
-
+ int encodedDataLength = 0;
if (fewerThan24bits != 0)
{
//data not divisible by 24 bit
- encodedData = new byte[ (numberTriplets + 1 ) * 4 ];
+ encodedDataLength = (numberTriplets + 1 ) * 4;
}
else
{
// 16 or 8 bit
- encodedData = new byte[ numberTriplets * 4 ];
+ encodedDataLength = numberTriplets * 4;
}
+ // allow extra length for the separator
+ int nbrChunks = (CHUNK_SEPARATOR.length == 0 ? 0 :
+ (int) Math.ceil((float) encodedDataLength / CHUNK_SIZE));
+
+ encodedDataLength += (nbrChunks - 1) * CHUNK_SEPARATOR.length;
+ encodedData = new byte[encodedDataLength];
+
byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
int encodedIndex = 0;
int dataIndex = 0;
int i = 0;
+ int nextSeparatorIndex = CHUNK_SIZE;
+ int chunksSoFar = 0;
+
//log.debug("number of triplets = " + numberTriplets);
for ( i = 0; i<numberTriplets; i++ )
{
@@ -198,7 +211,6 @@
l = (byte)(b2 & 0x0f);
k = (byte)(b1 & 0x03);
- encodedIndex = i * 4;
byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
byte val3 = ((b3 & SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc);
@@ -212,11 +224,23 @@
encodedData[encodedIndex+2] =
lookUpBase64Alphabet[ (l <<2 ) | val3 ];
encodedData[encodedIndex+3] = lookUpBase64Alphabet[ b3 & 0x3f ];
+
+ encodedIndex += 4;
+
+ // this assumes that CHUNK_SIZE % 4 == 0
+ if(encodedIndex == nextSeparatorIndex){
+ System.arraycopy(CHUNK_SEPARATOR, 0, encodedData,
+ encodedIndex, CHUNK_SEPARATOR.length);
+ chunksSoFar++;
+ nextSeparatorIndex = (CHUNK_SIZE * (chunksSoFar + 1)) +
+ (chunksSoFar * CHUNK_SEPARATOR.length);
+ encodedIndex += CHUNK_SEPARATOR.length;
+ }
}
// form integral number of 6-bit groups
dataIndex = i*3;
- encodedIndex = i*4;
+
if (fewerThan24bits == EIGHTBIT )
{
b1 = binaryData[dataIndex];
No revision
No revision
1.7.2.1 +7 -4 xml-rpc/src/test/org/apache/xmlrpc/Base64Test.java
Index: Base64Test.java
===================================================================
RCS file: /home/cvs/xml-rpc/src/test/org/apache/xmlrpc/Base64Test.java,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -r1.7 -r1.7.2.1
--- Base64Test.java 1 Nov 2002 22:06:10 -0000 1.7
+++ Base64Test.java 1 Feb 2003 22:29:37 -0000 1.7.2.1
@@ -131,9 +131,8 @@
assertEquals(TEST_DATA[i], new String(decoded));
}
- // FIXME: The Base64.encode() function doesn't wrap at 76 chars.
- //assertEquals(Base64.encode(UNENCODED.getBytes()),
- // ENCODED.getBytes());
+ assertEquals(Base64.encode(UNENCODED.getBytes()),
+ ENCODED.getBytes());
assertEquals(UNENCODED.getBytes(),
Base64.decode(ENCODED.getBytes()));
}
@@ -149,11 +148,15 @@
*/
private void assertEquals(byte[] a, byte[] b)
{
+ if (a.length != b.length)
+ {
+ fail("Byte arrays have different lengths (" + a.length + " != " +
b.length + ")");
+ }
for (int i = 0; i < a.length; i++)
{
if (a[i] != b[i])
{
- fail("Byte arrays not equal (" + a[i] + " != " + b[i] + ")");
+ fail("Byte arrays not equal (" + a[i] + " != " + b[i] + " at
position + " + i + ")");
}
}
}