jsdever 2002/12/03 07:20:32 Modified: httpclient build.xml httpclient/src/java/org/apache/commons/httpclient Authenticator.java HttpMethodBase.java NTLM.java URIUtil.java Added: httpclient/src/java/org/apache/commons/httpclient/util Base64.java Log: Move Base64 class to util package. Base64.java was copied to the util package an depreceated in the root httpclient package. The copy in the root package should be removed for the Beta 1 release. Turned on the deprecation flag in build.xml so we can clearly see which deprecated APIs we are using. Contributed by: Jeff Dever Revision Changes Path 1.21 +2 -2 jakarta-commons/httpclient/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/build.xml,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- build.xml 29 Oct 2002 06:08:20 -0000 1.20 +++ build.xml 3 Dec 2002 15:20:31 -0000 1.21 @@ -82,7 +82,7 @@ <property name="compile.debug" value="true"/> <!-- Should Java compilations set the 'deprecation' compiler option? --> - <property name="compile.deprecation" value="false"/> + <property name="compile.deprecation" value="true"/> <!-- Should Java compilations set the 'optimize' compiler option? --> <property name="compile.optimize" value="true"/> 1.35 +6 -4 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Authenticator.java Index: Authenticator.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Authenticator.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- Authenticator.java 29 Oct 2002 06:23:25 -0000 1.34 +++ Authenticator.java 3 Dec 2002 15:20:31 -0000 1.35 @@ -61,6 +61,8 @@ */ package org.apache.commons.httpclient; +import org.apache.commons.httpclient.util.Base64; + import java.security.MessageDigest; import java.util.Map; import java.util.Hashtable; 1.82 +4 -6 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java Index: HttpMethodBase.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.81 retrieving revision 1.82 diff -u -r1.81 -r1.82 --- HttpMethodBase.java 3 Dec 2002 05:46:15 -0000 1.81 +++ HttpMethodBase.java 3 Dec 2002 15:20:32 -0000 1.82 @@ -503,7 +503,6 @@ * Provide access to the status code. * * @return the status code associated with the latest response. - * @deprecated use getStatusLine().getStatusCode() */ public int getStatusCode() { return statusLine.getStatusCode(); @@ -665,7 +664,6 @@ * * @return the status text (or "reason phrase") associated with the latest * response. - * @deprecated use getStatusLine.getReasonPhrase() */ public String getStatusText() { return statusLine.getReasonPhrase(); 1.6 +6 -4 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/NTLM.java Index: NTLM.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/NTLM.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- NTLM.java 24 Oct 2002 08:27:08 -0000 1.5 +++ NTLM.java 3 Dec 2002 15:20:32 -0000 1.6 @@ -62,6 +62,8 @@ package org.apache.commons.httpclient; +import org.apache.commons.httpclient.util.Base64; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 1.15 +6 -4 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/URIUtil.java Index: URIUtil.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/URIUtil.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- URIUtil.java 16 Oct 2002 16:58:26 -0000 1.14 +++ URIUtil.java 3 Dec 2002 15:20:32 -0000 1.15 @@ -90,6 +90,8 @@ * @author Park, Sung-Gu * @author Rodney Waldhoff * @version $Revision$ $Date$ + * + * @deprecated This class will be removed before 2.0 release. Use util.URIUtil instead. */ public final class URIUtil { 1.1 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/util/Base64.java Index: Base64.java =================================================================== /* * $Header: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/util/Base64.java,v 1.1 2002/12/03 15:20:32 jsdever Exp $ * $Revision: 1.1 $ * $Date: 2002/12/03 15:20:32 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "HttpClient", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.commons.httpclient.util; /** * <p>Base64 encoder and decoder.</p> * <p> * This class provides encoding/decoding methods for * the Base64 encoding as defined by RFC 2045, * N. Freed and N. Borenstein. * RFC 2045: Multipurpose Internet Mail Extensions (MIME) * Part One: Format of Internet Message Bodies. Reference * 1996. Available at: * <a href="http://www.ietf.org/rfc/rfc2045.txt"> * http://www.ietf.org/rfc/rfc2045.txt</a> * </p> * * @author Jeffrey Rodriguez * @version $Revision: 1.1 $ $Date: 2002/12/03 15:20:32 $ * */ public final class Base64 { private static final int BASELENGTH = 255; private static final int LOOKUPLENGTH = 64; private static final int TWENTYFOURBITGROUP = 24; private static final int EIGHTBIT = 8; private static final int SIXTEENBIT = 16; private static final int SIXBIT = 6; private static final int FOURBYTE = 4; private static final int SIGN = -128; private static final byte PAD = (byte) '='; private static byte [] base64Alphabet = new byte[BASELENGTH]; private static byte [] lookUpBase64Alphabet = new byte[LOOKUPLENGTH]; static { for (int i = 0; i < BASELENGTH; i++) { base64Alphabet[i] = -1; } for (int i = 'Z'; i >= 'A'; i--) { base64Alphabet[i] = (byte) (i - 'A'); } for (int i = 'z'; i >= 'a'; i--) { base64Alphabet[i] = (byte) (i - 'a' + 26); } for (int i = '9'; i >= '0'; i--) { base64Alphabet[i] = (byte) (i - '0' + 52); } base64Alphabet['+'] = 62; base64Alphabet['/'] = 63; for (int i = 0; i <= 25; i++) { lookUpBase64Alphabet[i] = (byte) ('A' + i); } for (int i = 26, j = 0; i <= 51; i++, j++) { lookUpBase64Alphabet[i] = (byte) ('a' + j); } for (int i = 52, j = 0; i <= 61; i++, j++) { lookUpBase64Alphabet[i] = (byte) ('0' + j); } lookUpBase64Alphabet[62] = (byte) '+'; lookUpBase64Alphabet[63] = (byte) '/'; } private Base64() { // the constructor is intentionally private } public static boolean isBase64(String isValidString) { return isArrayByteBase64(isValidString.getBytes()); } static boolean isBase64(byte octect) { // Should we ignore white space? return (octect == PAD || base64Alphabet[octect] != -1); } public static boolean isArrayByteBase64(byte[] arrayOctect) { int length = arrayOctect.length; if (length == 0) { return true; } for (int i = 0; i < length; i++) { if (!Base64.isBase64(arrayOctect[i])) { return false; } } return true; } /** * Encodes hex octects into Base64 * * @param binaryData Array containing binaryData * @return Base64-encoded array */ public static byte[] encode(byte[] binaryData) { int lengthDataBits = binaryData.length * EIGHTBIT; int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; byte encodedData[] = null; if (fewerThan24bits != 0) { //data not divisible by 24 bit encodedData = new byte[(numberTriplets + 1) * 4]; } else { // 16 or 8 bit encodedData = new byte[numberTriplets * 4]; } byte k = 0; byte l = 0; byte b1 = 0; byte b2 = 0; byte b3 = 0; int encodedIndex = 0; int dataIndex = 0; int i = 0; for (i = 0; i < numberTriplets; i++) { dataIndex = i * 3; b1 = binaryData[dataIndex]; b2 = binaryData[dataIndex + 1]; b3 = binaryData[dataIndex + 2]; 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); encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; encodedData[encodedIndex + 1] = lookUpBase64Alphabet[val2 | (k << 4)]; encodedData[encodedIndex + 2] = lookUpBase64Alphabet[(l << 2) | val3]; encodedData[encodedIndex + 3] = lookUpBase64Alphabet[b3 & 0x3f]; } // form integral number of 6-bit groups dataIndex = i * 3; encodedIndex = i * 4; if (fewerThan24bits == EIGHTBIT) { b1 = binaryData[dataIndex]; k = (byte) (b1 & 0x03); byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; encodedData[encodedIndex + 1] = lookUpBase64Alphabet[k << 4]; encodedData[encodedIndex + 2] = PAD; encodedData[encodedIndex + 3] = PAD; } else if (fewerThan24bits == SIXTEENBIT) { b1 = binaryData[dataIndex]; b2 = binaryData[dataIndex + 1]; l = (byte) (b2 & 0x0f); k = (byte) (b1 & 0x03); byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; encodedData[encodedIndex + 1] = lookUpBase64Alphabet[val2 | (k << 4)]; encodedData[encodedIndex + 2] = lookUpBase64Alphabet[l << 2]; encodedData[encodedIndex + 3] = PAD; } return encodedData; } /** * Decodes Base64 data into octects * * @param base64Data byte array containing Base64 data * @return Array containing decoded data. */ public static byte[] decode(byte[] base64Data) { // Should we throw away anything not in base64Data ? // handle the edge case, so we don't have to worry about it later if (base64Data.length == 0) { return new byte[0]; } int numberQuadruple = base64Data.length / FOURBYTE; byte decodedData[] = null; byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0; int encodedIndex = 0; int dataIndex = 0; { // this block sizes the output array properly - rlw int lastData = base64Data.length; // ignore the '=' padding while (base64Data[lastData - 1] == PAD) { if (--lastData == 0) { return new byte[0]; } } decodedData = new byte[lastData - numberQuadruple]; } for (int i = 0; i < numberQuadruple; i++) { dataIndex = i * 4; marker0 = base64Data[dataIndex + 2]; marker1 = base64Data[dataIndex + 3]; b1 = base64Alphabet[base64Data[dataIndex]]; b2 = base64Alphabet[base64Data[dataIndex + 1]]; if (marker0 != PAD && marker1 != PAD) { //No PAD e.g 3cQl b3 = base64Alphabet[marker0]; b4 = base64Alphabet[marker1]; decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); decodedData[encodedIndex + 1] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); decodedData[encodedIndex + 2] = (byte) (b3 << 6 | b4); } else if (marker0 == PAD) { //Two PAD e.g. 3c[Pad][Pad] decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4) ; } else if (marker1 == PAD) { //One PAD e.g. 3cQ[Pad] b3 = base64Alphabet[marker0]; decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); decodedData[encodedIndex + 1] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); } encodedIndex += 3; } return decodedData; } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>