costin      02/04/04 14:34:46

  Modified:    http11/src/java/org/apache/coyote/http11
                        Http11Processor.java
  Log:
  Moved the parseHost method from coyote.
  
  That's another step in merging the connector code and sharing a single
  codebase.
  
  The Host: header is specific to http, other protocols may not need
  this operation.
  
  Revision  Changes    Path
  1.12      +56 -0     
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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Http11Processor.java      20 Mar 2002 05:33:27 -0000      1.11
  +++ Http11Processor.java      4 Apr 2002 22:34:46 -0000       1.12
  @@ -69,6 +69,7 @@
   import org.apache.tomcat.util.buf.MessageBytes;
   import org.apache.tomcat.util.http.FastHttpDateFormat;
   import org.apache.tomcat.util.http.MimeHeaders;
  +import org.apache.tomcat.util.buf.HexUtils;
   
   import org.apache.coyote.ActionHook;
   import org.apache.coyote.ActionCode;
  @@ -322,6 +323,8 @@
               // Setting up filters, and parse some request headers
               prepareRequest();
   
  +            parseHost(request);
  +
               if(maxKeepAliveRequests > 0 && --keepAliveLeft == 0)
                   keepAlive=false;
   
  @@ -648,7 +651,60 @@
   
       }
   
  +    /**
  +     * Parse host.
  +     */
  +    public static void parseHost(Request req)
  +        throws IOException
  +    {
  +        MessageBytes valueMB = req.getMimeHeaders().getValue("host");
  +        // 3.3 version. In 4.0 it is extracted from the host header.
  +        // XXX I would rather trust the socket...
  +        //serverPort = socket.getLocalPort();
  +        ByteChunk valueBC = null;
  +        if (valueMB == null) {
  +            // That was in the 3.3 connector. 4.0 let it unset.
  +            //// InetAddress localAddress = socket.getLocalAddress();
  +            ////localHost = localAddress.getHostName();
  +            // serverNameMB.setString( getLocalHost() );
  +            return;
  +        }
  +        valueBC = valueMB.getByteChunk();
  +        byte[] valueB = valueBC.getBytes();
  +        int valueL = valueBC.getLength();
  +        int valueS = valueBC.getStart();
  +        int colonPos = -1;
  +
  +        for (int i = 0; i < valueL; i++) {
  +            char b = (char) valueB[i + valueS];
  +            if (b == ':') {
  +                colonPos = i;
  +                break;
  +            }
  +        }
  +        
  +        if (colonPos < 0) {
  +            req.setServerPort(80);
  +            req.serverName().setBytes( valueB, valueS, valueL);
  +        } else {
  +            req.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;
  +                    break;
  +                }
  +                port = port + (charValue * mult);
  +                mult = 10 * mult;
  +            }
  +            req.setServerPort(port);
  +        }
  +    }
  +    
       /**
        * When committing the response, we have to validate the set of headers, as
        * well as setup the response filters.
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to