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:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to