cvs server: Diffing . cvs server: Diffing docs cvs server: Diffing src cvs server: Diffing src/conf cvs server: Diffing src/examples cvs server: Diffing src/java cvs server: Diffing src/java/org cvs server: Diffing src/java/org/apache cvs server: Diffing src/java/org/apache/commons cvs server: Diffing src/java/org/apache/commons/httpclient Index: src/java/org/apache/commons/httpclient/HttpMethodBase.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.32 diff -d -u -b -B -w -u -r1.32 HttpMethodBase.java --- src/java/org/apache/commons/httpclient/HttpMethodBase.java 18 Jul 2002 17:05:51 -0000 1.32 +++ src/java/org/apache/commons/httpclient/HttpMethodBase.java 19 Jul 2002 16:15:35 -0000 @@ -113,6 +113,7 @@ * @author Sean C. Sullivan * @author dIon Gillard * @author Jeff Dever + * @author Davanum Srinivas * @version $Revision: 1.32 $ $Date: 2002/07/18 17:05:51 $ */ public abstract class HttpMethodBase implements HttpMethod { @@ -1079,6 +1080,8 @@ } responseHeaders.clear(); + String name = null; + String value = null; for(;;) { String line = conn.readLine(); if ((line == null) || (line.length() < 1)) { @@ -1086,20 +1089,44 @@ } // Parse the header name and value + // Check for folded headers first + // Detect LWS-char see HTTP/1.0 or HTTP/1.1 Section 2.2 + // discussion on folded headers + + boolean isFolded = false; + if ( line.charAt(0) == ' ' || line.charAt(0) == '\t' ) + { + // we have continuation folded header + // so append value + isFolded = true; + value = line.substring(1).trim(); + } + else + { + // Otherwise we should have normal HTTP header line + // Parse the header name and value int colon = line.indexOf(":"); if (colon < 0) { throw new HttpException("Unable to parse header: " + line); } - String name = line.substring(0, colon).trim(); + name = line.substring(0, colon).trim(); + value = line.substring(colon + 1).trim(); + } String match = name.toLowerCase(); - String value = line.substring(colon + 1).trim(); Header header = (Header)(responseHeaders.get(match)); if (null == header) { header = new Header(name, value); } else { String oldvalue = header.getValue(); if (null != oldvalue) { + if ( isFolded ) { + // LWS becomes space plus extended value + header = new Header(name,oldvalue + " " + value); + } + else { + // Append additional header value header = new Header(name,oldvalue + ", " + value); + } } else { header = new Header(name,value); } cvs server: Diffing src/java/org/apache/commons/httpclient/log cvs server: Diffing src/java/org/apache/commons/httpclient/methods cvs server: Diffing src/test cvs server: Diffing src/test/org cvs server: Diffing src/test/org/apache cvs server: Diffing src/test/org/apache/commons cvs server: Diffing src/test/org/apache/commons/httpclient cvs server: Diffing src/test-webapp cvs server: Diffing src/test-webapp/conf cvs server: Diffing src/test-webapp/src cvs server: Diffing src/test-webapp/src/org cvs server: Diffing src/test-webapp/src/org/apache cvs server: Diffing src/test-webapp/src/org/apache/commons cvs server: Diffing src/test-webapp/src/org/apache/commons/httpclient cvs server: Diffing xdocs cvs server: Diffing xdocs/images cvs server: Diffing xdocs/stylesheets