You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by se...@apache.org on 2001/05/17 01:23:43 UTC

cvs commit: jakarta-tomcat-connectors/jk/src/java/org/apache/ajp/tomcat4 Ajp13Request.java

seguin      01/05/16 16:23:43

  Modified:    jk       build.xml
               jk/src/java/org/apache/ajp Ajp13.java Ajp13Packet.java
                        AjpRequest.java
               jk/src/java/org/apache/ajp/tomcat4 Ajp13Request.java
  Removed:     jk/src/java/org/apache/ajp MessageBytes.java
  Log:
  make use of new util stuff (copied from tomcat 3.3)
  
  Revision  Changes    Path
  1.3       +19 -1     jakarta-tomcat-connectors/jk/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/build.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- build.xml	2001/05/15 15:20:43	1.2
  +++ build.xml	2001/05/16 23:23:27	1.3
  @@ -3,9 +3,11 @@
       <!-- ===================== Initialize Property Values =================== -->
       <property name="tomcat4.home" value="../../jakarta-tomcat-4.0/build"/>
       <property name="servletapi.home"   value="../../jakarta-servletapi-4/dist"/>
  +    <property name="tomcat-util.home" value="../util/build"/>
       
       <property name="catalina.jar" value="${tomcat4.home}/server/lib/catalina.jar"/>
       <property name="servlet.jar" value="${servletapi.home}/lib/servlet.jar"/>
  +    <property name="tomcat-util.jar" value="${tomcat-util.home}/lib/tomcat-util.jar"/>
   
       <property name="jk.build" value="${basedir}/build"/>
   
  @@ -19,7 +21,7 @@
       
           <javac srcdir="src/java"
   	       destdir="${jk.build}/classes"
  -	       classpath="${catalina.jar}:${servlet.jar}"
  +	       classpath="${tomcat-util.jar}:${catalina.jar}:${servlet.jar}"
   	       deprecation="on"
   	       debug="on"
   	       optimize="off"
  @@ -39,6 +41,22 @@
   	     basedir="${jk.build}/classes"
   	     />
       </target>
  +
  +    <!-- ================ BUILD: Create Jk Javadocs =================== -->
  +    <target name="javadoc">
  +        <delete dir="${jk.build}/javadoc"/>
  +	<mkdir dir="${jk.build}/javadoc"/>
  +	<javadoc packagenames="org.apache.tomcat.util.*"
  +               sourcepath="src/java"
  +                  destdir="${jk.build}/javadoc"
  +                   author="true"
  +                  version="true"
  +              windowtitle="Jk Connector Documentation"
  +                 doctitle="Jk Connector"
  +                   bottom="Copyright &#169; 2001 Apache Software Foundation.  All Rights Reserved."
  +	/>
  +    </target>
  +
   
       <target name="clean">
           <delete dir="${jk.build}"/>
  
  
  
  1.2       +41 -49    jakarta-tomcat-connectors/jk/src/java/org/apache/ajp/Ajp13.java
  
  Index: Ajp13.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/src/java/org/apache/ajp/Ajp13.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Ajp13.java	2001/05/15 15:22:22	1.1
  +++ Ajp13.java	2001/05/16 23:23:30	1.2
  @@ -66,6 +66,9 @@
   import java.net.Socket;
   import java.util.Enumeration;
   
  +import org.apache.tomcat.util.buf.MessageBytes;
  +import org.apache.tomcat.util.buf.ByteChunk;
  +import org.apache.tomcat.util.http.MimeHeaders;
   
   /**
    * Represents a single, persistent connection between the web server and
  @@ -303,25 +306,26 @@
   	// XXX Awful return values
   
           boolean isSSL = false;
  -        int contentLength = -1;
   
           // Translate the HTTP method code to a String.
           byte methodCode = msg.getByte();
  -        req.method.setString(methodTransArray[(int)methodCode - 1]);
  +        req.method.setString( methodTransArray[(int)methodCode - 1] );
   
  -        msg.getMessageBytes(req.protocol);
  +        msg.getMessageBytes(req.protocol); 
           msg.getMessageBytes(req.requestURI);
  +
           msg.getMessageBytes(req.remoteAddr);
           msg.getMessageBytes(req.remoteHost);
           msg.getMessageBytes(req.serverName);
           req.serverPort = msg.getInt();
  +
   	isSSL = msg.getBool();
   
   	// Decode headers
  +	MimeHeaders headers = req.headers;
   	int hCount = msg.getInt();
           for(int i = 0 ; i < hCount ; i++) {
  -            MessageBytes hName = new MessageBytes();
  -            MessageBytes hValue = new MessageBytes();
  +            String hName = null;
   
   	    // Header names are encoded as either an integer code starting
   	    // with 0xA0, or as a normal string (in which case the first
  @@ -329,38 +333,28 @@
               int isc = msg.peekInt();
               int hId = isc & 0xFF;
   
  +	    MessageBytes vMB=null;
               isc &= 0xFF00;
               if(0xA000 == isc) {
                   msg.getInt(); // To advance the read position
  -                hName.setString(headerTransArray[hId - 1]);
  +                hName = headerTransArray[hId - 1];
  +		vMB= headers.addValue( hName );
               } else {
  -                msg.getMessageBytes(hName);
  -                hId = -1;
  +		// XXX Not very elegant
  +		vMB=msg.addHeader( headers );
  +		if( vMB==null) return 500; // wrong packet
               }
  +
  +            msg.getMessageBytes(vMB);
   
  -            switch (hId) {
  -            case SC_REQ_CONTENT_TYPE:
  -                    msg.getMessageBytes(req.contentType);
  -                    break;
  -
  -            case SC_REQ_CONTENT_LENGTH:
  -                    try {
  -                        contentLength = Integer.parseInt(msg.getString());
  -                    } catch (Exception e) {
  -                        logger.log("parse content-length", e);
  -                    }
  -                    break;
  -
  -            case SC_REQ_COOKIE:
  -            case SC_REQ_COOKIE2:
  -                    msg.getMessageBytes(hValue);
  -                    req.addCookies(hValue);
  -                    break;
  -
  -            default:
  -                    msg.getMessageBytes(hValue);
  -                    req.addHeader(hName.getString(), hValue);
  -                    break;
  +            // set content length, if this is it...
  +            if (hId == SC_REQ_CONTENT_LENGTH) {
  +                req.contentLength = (vMB == null) ? -1 : vMB.getInt();
  +            } else if (hId == SC_REQ_CONTENT_TYPE) {
  +                ByteChunk bchunk = vMB.getByteChunk();
  +                req.contentType.setBytes(bchunk.getBytes(),
  +                                         bchunk.getOffset(),
  +                                         bchunk.getLength());
               }
           }
   
  @@ -369,22 +363,22 @@
               attributeCode != SC_A_ARE_DONE ;
               attributeCode = msg.getByte()) {
               switch(attributeCode) {
  -            case SC_A_CONTEXT      :
  +	    case SC_A_CONTEXT      :
                   break;
   		
  -            case SC_A_SERVLET_PATH :
  +	    case SC_A_SERVLET_PATH :
                   break;
  -                
  -            case SC_A_REMOTE_USER  :
  +		
  +	    case SC_A_REMOTE_USER  :
                   msg.getMessageBytes(req.remoteUser);
                   break;
  -                
  -            case SC_A_AUTH_TYPE    :
  +		
  +	    case SC_A_AUTH_TYPE    :
                   msg.getMessageBytes(req.authType);
                   break;
   		
   	    case SC_A_QUERY_STRING :
  -                msg.getMessageBytes(req.queryString);
  +		msg.getMessageBytes(req.queryString);
                   break;
   		
   	    case SC_A_JVM_ROUTE    :
  @@ -406,11 +400,12 @@
   	    case SC_A_SSL_SESSION  :
   		isSSL = true;
   		req.setAttribute("javax.servlet.request.ssl_session",
  -                                 msg.getString());
  +				  msg.getString());
                   break;
   		
   	    case SC_A_REQ_ATTRIBUTE :
  -                req.setAttribute(msg.getString(), msg.getString());
  +		req.setAttribute(msg.getString(), 
  +				 msg.getString());
                   break;
   
   	    default:
  @@ -418,21 +413,18 @@
               }
           }
   
  -        req.secure = isSSL;
           if(isSSL) {
               req.scheme = req.SCHEME_HTTPS;
  -        } else {
  -            req.scheme = req.SCHEME_HTTP;
  +            req.secure = true;
           }
   
  +        // set cookies on request now that we have all headers
  +        req.cookies.setHeaders(req.headers);
  +
   	// Check to see if there should be a body packet coming along
   	// immediately after
  -    	if(contentLength > 0) {
  -            if (debug > 0) {
  -                logger.log("contentLength = " + contentLength +
  -                           ", reading data ...");
  -            }
  -	    req.contentLength = contentLength;
  +    	if(req.contentLength > 0) {
  +
   	    /* Read present data */
   	    int err = receive(inBuf);
               if(err < 0) {
  
  
  
  1.3       +14 -11    jakarta-tomcat-connectors/jk/src/java/org/apache/ajp/Ajp13Packet.java
  
  Index: Ajp13Packet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/src/java/org/apache/ajp/Ajp13Packet.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Ajp13Packet.java	2001/05/15 15:22:23	1.2
  +++ Ajp13Packet.java	2001/05/16 23:23:31	1.3
  @@ -60,6 +60,9 @@
   
   import java.io.UnsupportedEncodingException;
   
  +import org.apache.tomcat.util.buf.MessageBytes;
  +import org.apache.tomcat.util.http.MimeHeaders;
  +
   /**
    * A single packet for communication between the web server and the
    * container.  Designed to be reused many times with no creation of
  @@ -302,18 +305,18 @@
           pos += length;
           pos++; // Skip the terminating \0
       }
  -
  -//      public MessageBytes addHeader( MimeHeaders headers ) {
  -//          int length = getInt();
  -//          if( (length == 0xFFFF) || (length == -1) ) {
  -//              return null;
  -//          }
  -//          MessageBytes vMB=headers.addValue( buff, pos, length );
  -//          pos += length;
  -//          pos++; // Skip the terminating \0
  +    
  +    public MessageBytes addHeader(MimeHeaders headers) {
  +        int length = getInt();
  +        if( (length == 0xFFFF) || (length == -1) ) {
  +            return null;
  +        }
  +        MessageBytes vMB=headers.addValue( buff, pos, length );
  +        pos += length;
  +        pos++; // Skip the terminating \0
   	    
  -//          return vMB;
  -//      }
  +        return vMB;
  +    }
   	
       /**
        * Read a String from the packet, and advance the read position
  
  
  
  1.3       +34 -42    jakarta-tomcat-connectors/jk/src/java/org/apache/ajp/AjpRequest.java
  
  Index: AjpRequest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/src/java/org/apache/ajp/AjpRequest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AjpRequest.java	2001/05/16 17:08:50	1.2
  +++ AjpRequest.java	2001/05/16 23:23:32	1.3
  @@ -65,6 +65,10 @@
   import java.util.LinkedList;
   import java.util.Iterator;
   
  +import org.apache.tomcat.util.buf.MessageBytes;
  +import org.apache.tomcat.util.http.MimeHeaders;
  +import org.apache.tomcat.util.http.Cookies;
  +
   /**
    * Encapsulates an ajp request.
    *
  @@ -97,9 +101,9 @@
       boolean secure = false;
       int contentLength = 0;
       MessageBytes contentType = new MessageBytes();
  -    HashMap headers = new HashMap();
  +    MimeHeaders headers = new MimeHeaders();
  +    Cookies cookies = new Cookies();
       HashMap attributes = new HashMap();
  -    LinkedList cookies = new LinkedList();
       
       /**
        * Recycles this object and readies it further use.
  @@ -120,9 +124,9 @@
           secure = false;
           contentLength = 0;
           contentType.recycle();
  -        headers.clear();
  +        headers.recycle();
  +        cookies.recycle();
           attributes.clear();
  -        cookies.clear();
       }
   
       /**
  @@ -244,49 +248,28 @@
       public MessageBytes getContentType() {
           return contentType;
       }
  -
  -    public void addHeader(String name, MessageBytes value) {
  -        if (name == null || value == null) {
  -            return;
  -        }
  -
  -        String lname = name.toLowerCase();
  -
  -        LinkedList values = (LinkedList)headers.get(lname);
  -        if (values == null) {
  -            values = new LinkedList();
  -            headers.put(lname, values);
  -        }
  -        values.add(value);
  -    }
  -
  -    public Iterator getHeaders(String name) {
  -        if (name == null) {
  -            return emptyItr;
  -        }
  -
  -        String lname = name.toLowerCase();
  -
  -        LinkedList values = (LinkedList)headers.get(lname);
  -        if (values == null) {
  -            return emptyItr;
  -        }
  -        
  -        return values.iterator();
  -    }
  -
  -    public Iterator getHeaderNames() {
  -        return headers.keySet().iterator();
  -    }
   
  -    public void addCookies(MessageBytes cookies) {
  -        this.cookies.add(cookies);
  +    /**
  +     * Get this request's headers
  +     * @return request headers
  +     */
  +    public MimeHeaders getHeaders() {
  +        return headers;
       }
   
  -    public Iterator getCookies() {
  -        return cookies.iterator();
  +    /**
  +     * Get cookies.
  +     * @return request cookies.
  +     */
  +    public Cookies getCookies() {
  +        return cookies;
       }
   
  +    /**
  +     * Set an attribute on the request
  +     * @param name attribute name
  +     * @param value attribute value
  +     */
       public void setAttribute(String name, Object value) {
           if (name == null || value == null) {
               return;
  @@ -294,6 +277,11 @@
           attributes.put(name, value);
       }
   
  +    /**
  +     * Get an attribute on the request
  +     * @param name attribute name
  +     * @return attribute value
  +     */
       public Object getAttribute(String name) {
           if (name == null) {
               return null;
  @@ -302,6 +290,10 @@
           return attributes.get(name);
       }
   
  +    /**
  +     * Get iterator over attribute names
  +     * @return iterator over attribute names
  +     */
       public Iterator getAttributeNames() {
           return attributes.keySet().iterator();
       }
  
  
  
  1.3       +28 -29    jakarta-tomcat-connectors/jk/src/java/org/apache/ajp/tomcat4/Ajp13Request.java
  
  Index: Ajp13Request.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/src/java/org/apache/ajp/tomcat4/Ajp13Request.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Ajp13Request.java	2001/05/15 15:22:50	1.2
  +++ Ajp13Request.java	2001/05/16 23:23:40	1.3
  @@ -73,7 +73,10 @@
   import org.apache.catalina.util.RequestUtil;
   
   import org.apache.ajp.AjpRequest;
  -import org.apache.ajp.MessageBytes;
  +import org.apache.tomcat.util.buf.MessageBytes;
  +import org.apache.tomcat.util.http.Cookies;
  +import org.apache.tomcat.util.http.ServerCookie;
  +import org.apache.tomcat.util.http.MimeHeaders;
   
   public class Ajp13Request extends HttpRequestBase {
   
  @@ -101,51 +104,45 @@
           // we're more efficient (that's the whole point of
           // all of the MessageBytes in AjpRequest)
   
  -        setMethod(ajp.getMethod().getString());
  -        setProtocol(ajp.getProtocol().getString());
  -        setRequestURI(ajp.getRequestURI().getString());
  -        setRemoteAddr(ajp.getRemoteAddr().getString());
  -        setRemoteHost(ajp.getRemoteHost().getString());
  -        setServerName(ajp.getServerName().getString());
  +        setMethod(ajp.getMethod().toString());
  +        setProtocol(ajp.getProtocol().toString());
  +        setRequestURI(ajp.getRequestURI().toString());
  +        setRemoteAddr(ajp.getRemoteAddr().toString());
  +        setRemoteHost(ajp.getRemoteHost().toString());
  +        setServerName(ajp.getServerName().toString());
           setServerPort(ajp.getServerPort());
   
  -        String remoteUser = ajp.getRemoteUser().getString();
  +        String remoteUser = ajp.getRemoteUser().toString();
           if (remoteUser != null) {
               setUserPrincipal(new Ajp13Principal(remoteUser));
           }
   
  -        setAuthType(ajp.getAuthType().getString());
  -        setQueryString(ajp.getQueryString().getString());
  +        setAuthType(ajp.getAuthType().toString());
  +        setQueryString(ajp.getQueryString().toString());
           setScheme(ajp.getScheme());
           setSecure(ajp.getSecure());
           setContentLength(ajp.getContentLength());
   
  -        String contentType = ajp.getContentType().getString();
  +        String contentType = ajp.getContentType().toString();
           if (contentType != null) {
               setContentType(contentType);
           }
   
  -        Iterator itr = ajp.getHeaderNames();
  -        while (itr.hasNext()) {
  -            String name = (String)itr.next();            
  -            Iterator itr2 = ajp.getHeaders(name);
  -            while (itr2.hasNext()) {
  -                MessageBytes value = (MessageBytes)itr2.next();
  -                addHeader(name, value.getString());
  -            }
  +        MimeHeaders mheaders = ajp.getHeaders();
  +        int nheaders = mheaders.size();
  +        for (int i = 0; i < nheaders; ++i) {
  +            MessageBytes name = mheaders.getName(i);
  +            MessageBytes value = mheaders.getValue(i);
  +            addHeader(name.toString(), value.toString());
           }
   
  -        itr = ajp.getAttributeNames();
  +        Iterator itr = ajp.getAttributeNames();
           while (itr.hasNext()) {
               String name = (String)itr.next();
               setAttribute(name, ajp.getAttribute(name));
           }
   
  -        itr = ajp.getCookies();
  -        while (itr.hasNext()) {
  -            MessageBytes cookies = (MessageBytes)itr.next();
  -            addCookies(cookies.getString());
  -        }
  +        addCookies(ajp.getCookies());
       }
   
   //      public Object getAttribute(String name) {
  @@ -182,10 +179,12 @@
           super.setRequestURI(uri);
       }
   
  -    private void addCookies(String cookiesHeader) {
  -        Cookie cookies[] = RequestUtil.parseCookieHeader(cookiesHeader);
  -        for (int j = 0; j < cookies.length; j++) {
  -            Cookie cookie = cookies[j];
  +    private void addCookies(Cookies cookies) {
  +        int ncookies = cookies.getCookieCount();
  +        for (int j = 0; j < ncookies; j++) {
  +            ServerCookie scookie = cookies.getCookie(j);
  +            Cookie cookie = new Cookie(scookie.getName().toString(),
  +                                       scookie.getValue().toString());
               if (cookie.getName().equals(Globals.SESSION_COOKIE_NAME)) {
                   // Override anything requested in the URL
                   if (!isRequestedSessionIdFromCookie()) {