From: markt Date: Sun, 5 Jun 2011 10:06:49 +0000 (+0000) Subject: Pull up parseHost X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=47e56f828ceb69f3d8b0b5582a49d78778ffecf2;p=tomcat7.0 Pull up parseHost git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1132362 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/coyote/http11/AbstractHttp11Processor.java b/java/org/apache/coyote/http11/AbstractHttp11Processor.java index 52a6da475..b4f96cc5d 100644 --- a/java/org/apache/coyote/http11/AbstractHttp11Processor.java +++ b/java/org/apache/coyote/http11/AbstractHttp11Processor.java @@ -41,6 +41,7 @@ import org.apache.juli.logging.Log; import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.buf.Ascii; import org.apache.tomcat.util.buf.ByteChunk; +import org.apache.tomcat.util.buf.HexUtils; import org.apache.tomcat.util.buf.MessageBytes; import org.apache.tomcat.util.http.FastHttpDateFormat; import org.apache.tomcat.util.http.MimeHeaders; @@ -967,6 +968,78 @@ public abstract class AbstractHttp11Processor extends AbstractProcessor { abstract boolean prepareSendfile(OutputFilter[] outputFilters); + /** + * Parse host. + */ + protected void parseHost(MessageBytes valueMB) { + + if (valueMB == null || valueMB.isNull()) { + // HTTP/1.0 + // If no host header, use the port info from the endpoint + // The host will be obtained lazily from the socket if required + // using ActionCode#REQ_LOCAL_NAME_ATTRIBUTE + request.setServerPort(endpoint.getPort()); + return; + } + + ByteChunk valueBC = valueMB.getByteChunk(); + byte[] valueB = valueBC.getBytes(); + int valueL = valueBC.getLength(); + int valueS = valueBC.getStart(); + int colonPos = -1; + if (hostNameC.length < valueL) { + hostNameC = new char[valueL]; + } + + boolean ipv6 = (valueB[valueS] == '['); + boolean bracketClosed = false; + for (int i = 0; i < valueL; i++) { + char b = (char) valueB[i + valueS]; + hostNameC[i] = b; + if (b == ']') { + bracketClosed = true; + } else if (b == ':') { + if (!ipv6 || bracketClosed) { + colonPos = i; + break; + } + } + } + + if (colonPos < 0) { + if (!endpoint.isSSLEnabled()) { + // 80 - Default HTTP port + request.setServerPort(80); + } else { + // 443 - Default HTTPS port + request.setServerPort(443); + } + request.serverName().setChars(hostNameC, 0, valueL); + } else { + + request.serverName().setChars(hostNameC, 0, colonPos); + + int port = 0; + int mult = 1; + for (int i = valueL - 1; i > colonPos; i--) { + int charValue = HexUtils.getDec(valueB[i + valueS]); + if (charValue == -1) { + // Invalid character + error = true; + // 400 - Bad request + response.setStatus(400); + adapter.log(request, response, 0); + break; + } + port = port + (charValue * mult); + mult = 10 * mult; + } + request.setServerPort(port); + + } + + } + public void endRequest() { // Finish the handling of the request diff --git a/java/org/apache/coyote/http11/Http11AprProcessor.java b/java/org/apache/coyote/http11/Http11AprProcessor.java index 47580cf63..a9cb82f36 100644 --- a/java/org/apache/coyote/http11/Http11AprProcessor.java +++ b/java/org/apache/coyote/http11/Http11AprProcessor.java @@ -818,79 +818,6 @@ public class Http11AprProcessor extends AbstractHttp11Processor { } - /** - * Parse host. - */ - protected void parseHost(MessageBytes valueMB) { - - if (valueMB == null || valueMB.isNull()) { - // HTTP/1.0 - // If no host header, use the port info from the endpoint - // The host will be obtained lazily from the socket if required - // using ActionCode#REQ_LOCAL_NAME_ATTRIBUTE - request.setServerPort(endpoint.getPort()); - return; - } - - ByteChunk valueBC = valueMB.getByteChunk(); - byte[] valueB = valueBC.getBytes(); - int valueL = valueBC.getLength(); - int valueS = valueBC.getStart(); - int colonPos = -1; - if (hostNameC.length < valueL) { - hostNameC = new char[valueL]; - } - - boolean ipv6 = (valueB[valueS] == '['); - boolean bracketClosed = false; - for (int i = 0; i < valueL; i++) { - char b = (char) valueB[i + valueS]; - hostNameC[i] = b; - if (b == ']') { - bracketClosed = true; - } else if (b == ':') { - if (!ipv6 || bracketClosed) { - colonPos = i; - break; - } - } - } - - if (colonPos < 0) { - if (!endpoint.isSSLEnabled()) { - // 80 - Default HTTP port - request.setServerPort(80); - } else { - // 443 - Default HTTPS port - request.setServerPort(443); - } - request.serverName().setChars(hostNameC, 0, valueL); - } else { - - request.serverName().setChars(hostNameC, 0, colonPos); - - int port = 0; - int mult = 1; - for (int i = valueL - 1; i > colonPos; i--) { - int charValue = HexUtils.getDec(valueB[i + valueS]); - if (charValue == -1) { - // Invalid character - error = true; - // 400 - Bad request - response.setStatus(400); - adapter.log(request, response, 0); - break; - } - port = port + (charValue * mult); - mult = 10 * mult; - } - request.setServerPort(port); - - } - - } - - @Override protected boolean prepareSendfile(OutputFilter[] outputFilters) { String fileName = (String) request.getAttribute("org.apache.tomcat.sendfile.filename"); diff --git a/java/org/apache/coyote/http11/Http11NioProcessor.java b/java/org/apache/coyote/http11/Http11NioProcessor.java index 836ba22e5..9c8d8c87f 100644 --- a/java/org/apache/coyote/http11/Http11NioProcessor.java +++ b/java/org/apache/coyote/http11/Http11NioProcessor.java @@ -861,78 +861,6 @@ public class Http11NioProcessor extends AbstractHttp11Processor { } - /** - * Parse host. - */ - protected void parseHost(MessageBytes valueMB) { - - if (valueMB == null || valueMB.isNull()) { - // HTTP/1.0 - // If no host header, use the port info from the endpoint - // The host will be obtained lazily from the socket if required - // using ActionCode#REQ_LOCAL_NAME_ATTRIBUTE - request.setServerPort(endpoint.getPort()); - return; - } - - ByteChunk valueBC = valueMB.getByteChunk(); - byte[] valueB = valueBC.getBytes(); - int valueL = valueBC.getLength(); - int valueS = valueBC.getStart(); - int colonPos = -1; - if (hostNameC.length < valueL) { - hostNameC = new char[valueL]; - } - - boolean ipv6 = (valueB[valueS] == '['); - boolean bracketClosed = false; - for (int i = 0; i < valueL; i++) { - char b = (char) valueB[i + valueS]; - hostNameC[i] = b; - if (b == ']') { - bracketClosed = true; - } else if (b == ':') { - if (!ipv6 || bracketClosed) { - colonPos = i; - break; - } - } - } - - if (colonPos < 0) { - if (!endpoint.isSSLEnabled()) { - // 80 - Default HTTP port - request.setServerPort(80); - } else { - // 443 - Default HTTPS port - request.setServerPort(443); - } - request.serverName().setChars(hostNameC, 0, valueL); - } else { - - request.serverName().setChars(hostNameC, 0, colonPos); - - int port = 0; - int mult = 1; - for (int i = valueL - 1; i > colonPos; i--) { - int charValue = HexUtils.getDec(valueB[i + valueS]); - if (charValue == -1) { - // Invalid character - error = true; - // 400 - Bad request - response.setStatus(400); - adapter.log(request, response, 0); - break; - } - port = port + (charValue * mult); - mult = 10 * mult; - } - request.setServerPort(port); - - } - - } - @Override protected boolean prepareSendfile(OutputFilter[] outputFilters) { String fileName = (String) request.getAttribute("org.apache.tomcat.sendfile.filename"); diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index 04eabd877..067f1bbda 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -787,78 +787,6 @@ public class Http11Processor extends AbstractHttp11Processor { return false; } - /** - * Parse host. - */ - protected void parseHost(MessageBytes valueMB) { - - if (valueMB == null || valueMB.isNull()) { - // HTTP/1.0 - // If no host header, use the port info from the endpoint - // The host will be obtained lazily from the socket if required - // using ActionCode#REQ_LOCAL_NAME_ATTRIBUTE - request.setServerPort(endpoint.getPort()); - return; - } - - ByteChunk valueBC = valueMB.getByteChunk(); - byte[] valueB = valueBC.getBytes(); - int valueL = valueBC.getLength(); - int valueS = valueBC.getStart(); - int colonPos = -1; - if (hostNameC.length < valueL) { - hostNameC = new char[valueL]; - } - - boolean ipv6 = (valueB[valueS] == '['); - boolean bracketClosed = false; - for (int i = 0; i < valueL; i++) { - char b = (char) valueB[i + valueS]; - hostNameC[i] = b; - if (b == ']') { - bracketClosed = true; - } else if (b == ':') { - if (!ipv6 || bracketClosed) { - colonPos = i; - break; - } - } - } - - if (colonPos < 0) { - if (!endpoint.isSSLEnabled()) { - // 80 - Default HTTP port - request.setServerPort(80); - } else { - // 443 - Default HTTPS port - request.setServerPort(443); - } - request.serverName().setChars(hostNameC, 0, valueL); - } else { - - request.serverName().setChars(hostNameC, 0, colonPos); - - int port = 0; - int mult = 1; - for (int i = valueL - 1; i > colonPos; i--) { - int charValue = HexUtils.getDec(valueB[i + valueS]); - if (charValue == -1) { - // Invalid character - error = true; - // 400 - Bad request - response.setStatus(400); - adapter.log(request, response, 0); - break; - } - port = port + (charValue * mult); - mult = 10 * mult; - } - request.setServerPort(port); - - } - - } - @Override protected AbstractInputBuffer getInputBuffer() { return inputBuffer;