Index: HttpMethodBase.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.163 diff -u -r1.163 HttpMethodBase.java --- HttpMethodBase.java 8 Jul 2003 21:59:18 -0000 1.163 +++ HttpMethodBase.java 10 Jul 2003 18:50:57 -0000 @@ -1,5 +1,5 @@ /* - * $Header: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v 1.163 2003/07/08 21:59:18 olegk Exp $ + * $Header: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v 1.163 2003/07/08 21:59:18 olegk Exp $ * $Revision: 1.163 $ * $Date: 2003/07/08 21:59:18 $ * @@ -71,6 +71,7 @@ import java.util.BitSet; import java.util.HashSet; import java.util.Set; + import org.apache.commons.httpclient.auth.AuthScheme; import org.apache.commons.httpclient.auth.AuthenticationException; import org.apache.commons.httpclient.auth.HttpAuthenticator; @@ -2041,26 +2042,23 @@ is = new WireLogInputStream(is); } InputStream result = null; - Header[] transferEncodingHeaders = responseHeaders.getHeaders("Transfer-Encoding"); + Header transferEncodingHeader = responseHeaders.getFirstHeader("Transfer-Encoding"); // We use Transfer-Encoding if present and ignore Content-Length. // RFC2616, 4.4 item number 3 - if (transferEncodingHeaders.length > 0) { - boolean containsChunked = false; - for (int i = 0; i < transferEncodingHeaders.length; i++) { - String encoding = transferEncodingHeaders[i].getValue(); - if ("chunked".equalsIgnoreCase(encoding)) { - containsChunked = true; - break; - } else if ("identity".equalsIgnoreCase(encoding)) { - //No content transformation needed - } else { - if (LOG.isWarnEnabled()) { - LOG.warn("Unsupported transfer encoding: " + encoding); - } + if (transferEncodingHeader != null) { + + String transferEncoding = transferEncodingHeader.getValue(); + if (!"chunked".equalsIgnoreCase(transferEncoding) && + !"identity".equalsIgnoreCase(transferEncoding)) { + if (LOG.isWarnEnabled()) { + LOG.warn("Unsupported transfer encoding: " + transferEncoding); } } - if (containsChunked) { - // Some HTTP servers do not bother sending a closing chunk + HeaderElement[] encodings = transferEncodingHeader.getValues(); + // The chunck encoding must be the last one applied + // RFC2616, 14.41 + int len = encodings.length; + if ((len > 0) && ("chunked".equalsIgnoreCase(encodings[len - 1].getName() ))) { // if response body is empty if (conn.isResponseAvailable(conn.getSoTimeout())) { result = new ChunkedInputStream(is, this); @@ -2074,7 +2072,7 @@ } else { if (isStrictMode() && LOG.isWarnEnabled()) { LOG.warn("Transfer-Encoding is set but does not contain \"chunked\": " - + getResponseHeader("Transfer-Encoding")); + + transferEncoding); } // The connection must be terminated by closing // the socket as per RFC 2616, 3.6