remm 02/04/12 07:47:22
Modified: http11/src/java/org/apache/coyote/http11
Http11Processor.java
Log:
- Refactor a bit parseHost.
- If Host header is present in HTTP/1.0, the behavior is identical to HTTP/1.1.
This looks the most reasonable, but I don't see many HTTP/1.0 clients sending the
Host header. Is everything ok now ? ;-)
Revision Changes Path
1.26 +28 -27
jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java
Index: Http11Processor.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- Http11Processor.java 12 Apr 2002 06:22:46 -0000 1.25
+++ Http11Processor.java 12 Apr 2002 14:47:22 -0000 1.26
@@ -372,8 +372,6 @@
// Setting up filters, and parse some request headers
prepareRequest();
- parseHost(request);
-
if (maxKeepAliveRequests > 0 && --keepAliveLeft == 0)
keepAlive = false;
@@ -573,7 +571,7 @@
http11 = true;
http09 = false;
contentDelimitation = false;
- if(sslSupport != null)
+ if (sslSupport != null)
request.scheme().setString("https");
MessageBytes protocolMB = request.protocol();
@@ -710,13 +708,17 @@
}
}
+ MessageBytes valueMB = request.getMimeHeaders().getValue("host");
+
// Check host header
- if (http11 && (request.getMimeHeaders().getValue("host") == null)) {
+ if (http11 && (valueMB == null)) {
error = true;
// 400 - Bad request
response.setStatus(400);
}
+ parseHost(valueMB);
+
if (!contentDelimitation) {
// If there's no content length and we're using HTTP/1.1, assume
// the client is not broken and didn't send a body
@@ -736,25 +738,22 @@
/**
* Parse host.
*/
- public void parseHost(Request req)
- throws IOException {
-
- MessageBytes valueMB = req.getMimeHeaders().getValue("host");
+ public void parseHost(MessageBytes valueMB) {
- ByteChunk valueBC = null;
if (valueMB == null || valueMB.isNull()) {
// HTTP/1.0
// Default is what the socket tells us. Overriden if a host is
// found/parsed
- req.setServerPort(socket.getLocalPort());
+ request.setServerPort(socket.getLocalPort());
InetAddress localAddress = socket.getLocalAddress();
- // Setting the socket-related fields. The adapter doesn't know about
- // socket.
- req.setLocalHost(localAddress.getHostName());
- req.serverName().setString(localAddress.getHostName());
+ // Setting the socket-related fields. The adapter doesn't know
+ // about socket.
+ request.setLocalHost(localAddress.getHostName());
+ request.serverName().setString(localAddress.getHostName());
return;
}
- valueBC = valueMB.getByteChunk();
+
+ ByteChunk valueBC = valueMB.getByteChunk();
byte[] valueB = valueBC.getBytes();
int valueL = valueBC.getLength();
int valueS = valueBC.getStart();
@@ -769,32 +768,34 @@
}
if (colonPos < 0) {
- if( http11 ) {
- if(sslSupport == null) // not configured Secure
- req.setServerPort(80);
- else
- req.setServerPort(443); // if Secure, assume https
+ if (sslSupport == null) {
+ // 80 - Default HTTTP port
+ request.setServerPort(80);
} else {
- // Assume that non-HTTP/1.1 clients are broken
- req.setServerPort(socket.getLocalPort());
+ // 443 - Default HTTPS port
+ request.setServerPort(443);
}
- req.serverName().setBytes( valueB, valueS, valueL);
+ request.serverName().setBytes(valueB, valueS, valueL);
} else {
- req.serverName().setBytes( valueB, valueS, colonPos);
+
+ request.serverName().setBytes(valueB, valueS, colonPos);
int port = 0;
int mult = 1;
for (int i = valueL - 1; i > colonPos; i--) {
int charValue = HexUtils.DEC[(int) valueB[i + valueS]];
if (charValue == -1) {
- // Use the default
- port=80;
+ // Invalid character
+ error = true;
+ // 400 - Bad request
+ response.setStatus(400);
break;
}
port = port + (charValue * mult);
mult = 10 * mult;
}
- req.setServerPort(port);
+ request.setServerPort(port);
+
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>