cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java
remm00/11/16 23:25:36 Modified:catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java Log: - Skip extra CRLF before starting reading the request line, as is heavily recommended to do that in the HTTP spec. Revision ChangesPath 1.2 +12 -3 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java Index: SocketInputStream.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SocketInputStream.java2000/11/17 03:30:43 1.1 +++ SocketInputStream.java2000/11/17 07:25:36 1.2 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.1 2000/11/17 03:30:43 remm Exp $ - * $Revision: 1.1 $ - * $Date: 2000/11/17 03:30:43 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.2 2000/11/17 07:25:36 remm Exp $ + * $Revision: 1.2 $ + * $Date: 2000/11/17 07:25:36 $ * * * @@ -161,6 +161,15 @@ if (requestLine.methodEnd != 0) requestLine.recycle(); +// Checking for a blank line +int chr = 0; +while ((chr = read()) == CR) { // Skipping CR +read(); // Skipping LF +} +if (chr != CR) { +pos--; +} + // Reading the method name int maxRead = requestLine.method.length;
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java
remm00/11/21 18:28:20 Modified:catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java Log: - Avoid throwing an ArrayOutOfBoundException when the client disconnects before starting a new request. Revision ChangesPath 1.3 +9 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java Index: SocketInputStream.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SocketInputStream.java2000/11/17 07:25:36 1.2 +++ SocketInputStream.java2000/11/22 02:28:19 1.3 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.2 2000/11/17 07:25:36 remm Exp $ - * $Revision: 1.2 $ - * $Date: 2000/11/17 07:25:36 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.3 2000/11/22 02:28:19 remm Exp $ + * $Revision: 1.3 $ + * $Date: 2000/11/22 02:28:19 $ * * * @@ -67,6 +67,7 @@ import java.io.IOException; import java.io.BufferedInputStream; import java.io.InputStream; +import java.io.EOFException; import org.apache.catalina.util.StringManager; /** @@ -166,6 +167,9 @@ while ((chr = read()) == CR) { // Skipping CR read(); // Skipping LF } +if (chr == -1) +throw new EOFException +(sm.getString("requestStream.readline.error")); if (chr != CR) { pos--; } @@ -457,7 +461,8 @@ eol = true; } else { // FIXME : Check if binary conversion is working fine -header.value[readCount] = (char) (buf[pos] & 0xff); +int ch = buf[pos] & 0xff; +header.value[readCount] = (char) ch; readCount++; } pos++;
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java
remm00/12/01 19:51:31 Modified:catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java Log: - The IS is now more tolerant when parsing the HTTP header. It now doesn't require that CRLF to end a line (LF is enough), as is recommended in the HTTP spec for improved robustness. Note that a client which would do that is actually not compliant with the spec, and needs to be fixed. - Removed some old test code. Revision ChangesPath 1.4 +18 -200 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java Index: SocketInputStream.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SocketInputStream.java2000/11/22 02:28:19 1.3 +++ SocketInputStream.java2000/12/02 03:51:31 1.4 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.3 2000/11/22 02:28:19 remm Exp $ - * $Revision: 1.3 $ - * $Date: 2000/11/22 02:28:19 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.4 2000/12/02 03:51:31 remm Exp $ + * $Revision: 1.4 $ + * $Date: 2000/12/02 03:51:31 $ * * * @@ -164,13 +164,13 @@ // Checking for a blank line int chr = 0; -while ((chr = read()) == CR) { // Skipping CR -read(); // Skipping LF -} +do { // Skipping CR or LF +chr = read(); +} while ((chr == CR) || (chr == LF)); if (chr == -1) throw new EOFException (sm.getString("requestStream.readline.error")); -if (chr != CR) { +if ((chr != CR) || (chr != LF)) { pos--; } @@ -263,8 +263,6 @@ readStart = pos; readCount = 0; -int crPos = -2; - boolean eol = false; while (!eol) { @@ -285,12 +283,6 @@ if (pos >= count) { // Copying part (or all) of the internal buffer to the line // buffer -if (pos != readStart) { -// Hack to reintialize the internal buffer. We pretend the -// first character was never read and we'll reread it from -// the buffer. -crPos = crPos - count; -} int val = read(); if (val == -1) throw new IOException @@ -299,17 +291,17 @@ readStart = 0; } if (buf[pos] == CR) { -// We found a CR. Next character has to be a LF. -crPos = pos; -} else if ((buf[pos] == LF) && (crPos == (pos - 1))) { +// Skip CR. +} else if (buf[pos] == LF) { eol = true; +} else { +requestLine.protocol[readCount] = (char) buf[pos]; +readCount++; } -requestLine.protocol[readCount] = (char) buf[pos]; -readCount++; pos++; } -requestLine.protocolEnd = readCount - 2; +requestLine.protocolEnd = readCount; } @@ -332,8 +324,10 @@ header.recycle(); // Checking for a blank line -if (read() == CR) { // Skipping CR -read(); // Skipping LF +int chr = read(); +if ((chr == CR) || (chr == LF)) { // Skipping CR +if (chr == CR) +read(); // Skipping LF header.nameEnd = 0; header.valueEnd = 0; return; @@ -441,12 +435,6 @@ if (pos >= count) { // Copying part (or all) of the internal buffer to the line // buffer -if (pos != readStart) { -// Hack to reintialize the internal buffer. -// We pretend the first character was never read and -// we'll reread it from the buffer. -crPos = crPos - count; -} int val = read(); if (val == -1) throw new IOException @@ -455,9 +443,7 @@ readStart = 0; } if (buf[pos] == CR) { -//
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java
remm01/06/17 17:21:58 Modified:catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java Log: - Handle HTTP/0.9 requests. Revision ChangesPath 1.7 +8 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java Index: SocketInputStream.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- SocketInputStream.java2001/01/23 03:53:00 1.6 +++ SocketInputStream.java2001/06/18 00:21:58 1.7 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.6 2001/01/23 03:53:00 remm Exp $ - * $Revision: 1.6 $ - * $Date: 2001/01/23 03:53:00 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.7 2001/06/18 00:21:58 remm Exp $ + * $Revision: 1.7 $ + * $Date: 2001/06/18 00:21:58 $ * * * @@ -250,6 +250,8 @@ space = false; +boolean eol = false; + while (!space) { // if the buffer is full, extend it if (readCount >= maxRead) { @@ -275,6 +277,10 @@ } if (buf[pos] == SP) { space = true; +} else if ((buf[pos] == CR) || (buf[pos] == LF)) { +// HTTP/0.9 style request +eol = true; +space = true; } requestLine.uri[readCount] = (char) buf[pos]; readCount++; @@ -288,8 +294,6 @@ maxRead = requestLine.protocol.length; readStart = pos; readCount = 0; - -boolean eol = false; while (!eol) { // if the buffer is full, extend it
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java
remm01/08/08 13:02:17 Modified:catalina/src/share/org/apache/catalina/connector/http SocketInputStream.java Log: - A HT (tab) is also considered a leading white space. It was a bit hidden in the HTTP spec, so I had missed it. Revision ChangesPath 1.9 +15 -6 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java Index: SocketInputStream.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- SocketInputStream.java2001/07/22 20:25:07 1.8 +++ SocketInputStream.java2001/08/08 20:02:17 1.9 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.8 2001/07/22 20:25:07 pier Exp $ - * $Revision: 1.8 $ - * $Date: 2001/07/22 20:25:07 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/SocketInputStream.java,v 1.9 2001/08/08 20:02:17 remm Exp $ + * $Revision: 1.9 $ + * $Date: 2001/08/08 20:02:17 $ * * * @@ -100,6 +100,12 @@ /** + * HT. + */ +private static final byte HT = (byte) '\t'; + + +/** * COLON. */ private static final byte COLON = (byte) ':'; @@ -440,7 +446,7 @@ pos = 0; readStart = 0; } -if (buf[pos] == SP) { +if ((buf[pos] == SP) || (buf[pos] == HT)) { pos++; } else { space = false; @@ -483,8 +489,10 @@ } pos++; } + +int nextChr = read(); -if (read() != SP) { +if ((nextChr != SP) && (nextChr != HT)) { pos--; validLine = false; } else { @@ -583,8 +591,9 @@ pos = 0; count = 0; int nRead = is.read(buf, 0, buf.length); -if (nRead > 0) +if (nRead > 0) { count = nRead; +} }