You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bi...@apache.org on 2002/04/01 06:48:42 UTC

cvs commit: jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat3 CoyoteRequest.java

billbarker    02/03/31 20:48:42

  Modified:    coyote/src/java/org/apache/coyote/tomcat3 CoyoteRequest.java
  Log:
  Port the optimized "Host" header parsing from tomcat4.
  
  Revision  Changes    Path
  1.8       +33 -10    jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat3/CoyoteRequest.java
  
  Index: CoyoteRequest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat3/CoyoteRequest.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- CoyoteRequest.java	17 Mar 2002 05:26:20 -0000	1.7
  +++ CoyoteRequest.java	1 Apr 2002 04:48:42 -0000	1.8
  @@ -204,18 +204,41 @@
   	MessageBytes hH=getMimeHeaders().getValue("host");
           serverPort = socket.getLocalPort();
   	if (hH != null) {
  -	    // XXX use MessageBytes
  -	    String hostHeader = hH.toString();
  -	    int i = hostHeader.indexOf(':');
  -	    if (i > -1) {
  -		serverNameMB.setString( hostHeader.substring(0,i));
  -                hostHeader = hostHeader.substring(i+1);
  -                try{
  -                    serverPort=Integer.parseInt(hostHeader);
  +	    ByteChunk valueBC = hH.getByteChunk();
  +	    byte [] valueB = valueBC.getBytes();
  +	    int valueL = valueBC.getLength();
  +	    int valueS = valueBC.getStart();
  +	    int colonPos = -1;
  +	    for( int i = 0; i < valueL; i++) {
  +		byte b = valueB[i+valueS];
  +		if(b == ':') {
  +		    colonPos = i;
  +		    break;
  +		}
  +	    }
  +	    if (colonPos > -1) {
  +		serverNameMB.setBytes( valueB, valueS, colonPos);
  +		int port = 0;
  +		int mult = 1;
  +		try {
  +		    for(int i = colonPos+1; i < valueL; i++) {
  +			int charValue = HexUtils.DEC[(int)valueB[i+valueS]];
  +			if(charValue == -1) {
  +			    throw new NumberFormatException(
  +					      "Invalid port number: " + 
  +					      valueB[i+valueS]);
  +			}
  +			port *= 10;
  +			port += charValue;
  +		    }
  +		    serverPort = port;
                   }catch(NumberFormatException  nfe){
  +		    contextM.log("Port Parsing error", nfe);
                   }
  -	    }else serverNameMB.setString( hostHeader);
  -        return;
  +	    }else {
  +		serverNameMB.setBytes(valueB, valueS, valueL);
  +	    }
  +	    return;
   	}
   	if( localHost != null ) {
   	    serverNameMB.setString( localHost );
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>