remm        2005/08/01 02:40:14

  Modified:    jk/java/org/apache/coyote/ajp LocalStrings.properties
                        AjpMessage.java
               webapps/docs changelog.xml
  Log:
  - Internationalization and code cleanups.
  - No functional change.
  
  Revision  Changes    Path
  1.4       +7 -1      
jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/LocalStrings.properties
  
  Index: LocalStrings.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/LocalStrings.properties,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LocalStrings.properties   29 Jul 2005 10:23:55 -0000      1.3
  +++ LocalStrings.properties   1 Aug 2005 09:40:14 -0000       1.4
  @@ -28,3 +28,9 @@
   ajpprocessor.request.process=Error processing request
   ajpprocessor.certs.fail=Certificate convertion failed
   ajpprocessor.socket.info=Exception getting socket information
  +
  +ajpmessage.null=Cannot append null value
  +ajpmessage.overflow=Overflow error for buffer adding {0} bytes at position 
{1}
  +ajpmessage.read=Requested {0} bytes exceeds message available data
  +ajpmessage.invalid=Invalid message recieved with signature {0}
  +
  
  
  
  1.4       +102 -63   
jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpMessage.java
  
  Index: AjpMessage.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpMessage.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AjpMessage.java   29 Jul 2005 10:23:55 -0000      1.3
  +++ AjpMessage.java   1 Aug 2005 09:40:14 -0000       1.4
  @@ -21,6 +21,7 @@
   import org.apache.tomcat.util.buf.ByteChunk;
   import org.apache.tomcat.util.buf.CharChunk;
   import org.apache.tomcat.util.buf.MessageBytes;
  +import org.apache.tomcat.util.res.StringManager;
   
   /**
    * A single packet for communication between the web server and the
  @@ -36,29 +37,45 @@
    * @author Costin Manolache
    */
   public class AjpMessage {
  -    
  -    private static org.apache.commons.logging.Log log=
  -        org.apache.commons.logging.LogFactory.getLog( AjpMessage.class );
   
  -    
  +
  +    protected static org.apache.commons.logging.Log log =
  +        org.apache.commons.logging.LogFactory.getLog(AjpMessage.class);
  +
  +    /**
  +     * The string manager for this package.
  +     */
  +    protected static StringManager sm =
  +        StringManager.getManager(Constants.Package);
  +
  +
  +    // ----------------------------------------------------- Instance 
Variables
  +
  +
       /**
        * Fixed size buffer.
        */
  -    private byte buf[] = new byte[8*1024];
  -    
  +    protected byte buf[] = new byte[8 * 1024];
  +
  +
       /**
        * The current read or write position in the buffer.
        */
  -    private int pos;
  -    
  +    protected int pos;
  +
  +
       /**
        * This actually means different things depending on whether the
        * packet is read or write.  For read, it's the length of the
        * payload (excluding the header).  For write, it's the length of
        * the packet as a whole (counting the header).  Oh, well.
        */
  -    private int len; 
  +    protected int len; 
  +
       
  +    // --------------------------------------------------------- Public 
Methods
  +
  +
       /**
        * Prepare this packet for accumulating a message from the container to
        * the web server.  Set the write position to just after the header
  @@ -68,7 +85,8 @@
           len = 4;
           pos = 4;
       }
  -     
  +
  +
       /**
        * For a packet to be sent to the web server, finish the process of
        * accumulating data and write the length of the data payload into
  @@ -84,15 +102,16 @@
           buf[3] = (byte) (dLen & 0xFF);
       }
   
  +
       public byte[] getBuffer() {
           return buf;
       }
   
  +
       public int getLen() {
           return len;
       }
       
  -    // ============ Data Writing Methods ===================
   
       /**
        * Add an int.
  @@ -104,10 +123,12 @@
           buf[pos++] = (byte) (val & 0xFF);
       }
   
  +
       public void appendByte(int val) {
           buf[pos++] = (byte) val;
       }
        
  +    
       public void appendLongInt(int val) {
           buf[pos++] = (byte) ((val >>> 24) & 0xFF);
           buf[pos++] = (byte) ((val >>> 16) & 0xFF);
  @@ -115,6 +136,7 @@
           buf[pos++] = (byte) (val & 0xFF);
       }
   
  +    
       /**
        * Write a String out at the current write position.  Strings are
        * encoded with the length in two bytes first, then the string, and
  @@ -142,26 +164,25 @@
           }
       }
   
  +    
       public void appendByteChunk(ByteChunk bc)
           throws IOException {
           if (bc == null) {
  -            log.error("appendByteChunk() null");
  +            log.error(sm.getString("ajpmessage.null"), 
  +                    new NullPointerException());
               appendInt(0);
               appendByte(0);
               return;
           }
  -
  -        byte[] bytes = bc.getBytes();
  -        int start = bc.getStart();
  -        appendInt(bc.getLength());
  -        cpBytes(bytes, start, bc.getLength());
  -        appendByte(0);
  +        appendBytes(bc.getBytes(), bc.getStart(), bc.getLength());
       }
   
  +    
       public void appendCharChunk(CharChunk cc)
           throws IOException {
  -        if(cc == null) {
  -            log.error("appendByteChunk() null");
  +        if (cc == null) {
  +            log.error(sm.getString("ajpmessage.null"), 
  +                    new NullPointerException());
               appendInt(0);
               appendByte(0);
               return;
  @@ -187,10 +208,12 @@
           appendByte(0);
       }
   
  +    
       public void appendString(String str)
           throws IOException {
  -        if(str == null) {
  -            log.error("appendByteChunk() null");
  +        if (str == null) {
  +            log.error(sm.getString("ajpmessage.null"), 
  +                    new NullPointerException());
               appendInt(0);
               appendByte(0);
               return;
  @@ -215,6 +238,7 @@
           appendByte(0);
       }
   
  +    
       /** 
        * Copy a chunk of bytes into the packet, starting at the current
        * write position.  The chunk of bytes is encoded with the length
  @@ -226,27 +250,22 @@
        * @param off The offset into the array at which to start copying
        * @param numBytes The number of bytes to copy.  
        */
  -    public void appendBytes(byte b[], int off, int numBytes) {
  -        appendInt(numBytes);
  -        cpBytes(b, off, numBytes);
  -        appendByte(0);
  -    }
  -    
  -    private void cpBytes(byte b[], int off, int numBytes) {
  -        if (pos + numBytes >= buf.length) {
  -            log.error("Buffer overflow: buffer.len=" + buf.length + " pos=" +
  -                      pos + " data=" + numBytes);
  -            dump("Overflow/coBytes");
  -            log.error("Overflow ", new Throwable());
  +    public void appendBytes(byte[] b, int off, int numBytes) {
  +        if (pos + numBytes + 3 >= buf.length) {
  +            log.error(sm.getString("ajpmessage.overflow", "" + numBytes, "" 
+ pos),
  +                    new ArrayIndexOutOfBoundsException());
  +            if (log.isDebugEnabled()) {
  +                dump("Overflow/coBytes");
  +            }
               return;
           }
  +        appendInt(numBytes);
           System.arraycopy(b, off, buf, pos, numBytes);
           pos += numBytes;
  -        // buf[pos + numBytes] = 0; // Terminating \0
  +        appendByte(0);
       }
  -    
  -    // ============ Data Reading Methods ===================
   
  +    
       /**
        * Read an integer from packet, and advance the read position past
        * it.  Integers are encoded as two unsigned bytes with the
  @@ -254,29 +273,33 @@
        * little-endian order within each byte.  
        */
       public int getInt() {
  -        int b1 = buf[pos++] & 0xFF;  // No swap, Java order
  +        int b1 = buf[pos++] & 0xFF; // No swap, Java order
           int b2 = buf[pos++] & 0xFF;
   
           return (b1<<8) + b2;
       }
   
  +
       public int peekInt() {
  -        int b1 = buf[pos] & 0xFF;  // No swap, Java order
  +        int b1 = buf[pos] & 0xFF; // No swap, Java order
           int b2 = buf[pos+1] & 0xFF;
   
           return (b1<<8) + b2;
       }
   
  +    
       public byte getByte() {
           byte res = buf[pos++];
           return res;
       }
   
  +    
       public byte peekByte() {
           byte res = buf[pos];
           return res;
       }
   
  +    
       public void getBytes(MessageBytes mb) {
           int length = getInt();
           if ((length == 0xFFFF) || (length == -1)) {
  @@ -288,6 +311,7 @@
           pos++; // Skip the terminating \0
       }
       
  +    
       /**
        * Copy a chunk of bytes from the packet into an array and advance
        * the read position past the chunk.  See appendBytes() for details
  @@ -295,24 +319,24 @@
        *
        * @return The number of bytes copied.
        */
  -    public int getBytes(byte dest[]) {
  +    public int getBytes(byte[] dest) {
           int length = getInt();
  -        if (length > buf.length) {
  -            // XXX Should be if(pos + length > buff.legth)?
  -            log.error("getBytes() buffer overflow " + length + " " + 
buf.length);
  +        if (pos + length > buf.length) {
  +            log.error(sm.getString("ajpmessage.read", "" + length));
  +            return 0;
           }
        
           if ((length == 0xFFFF) || (length == -1)) {
  -            log.info("Null string " + length);
               return 0;
           }
   
  -        System.arraycopy(buf, pos,  dest, 0, length);
  +        System.arraycopy(buf, pos, dest, 0, length);
           pos += length;
  -        pos++; // Skip terminating \0  XXX I believe this is wrong but 
harmless
  +        pos++; // Skip terminating \0
           return length;
       }
   
  +    
       /**
        * Read a 32 bits integer from packet, and advance the read position past
        * it.  Integers are encoded as four unsigned bytes with the
  @@ -320,7 +344,7 @@
        * little-endian order within each byte.
        */
       public int getLongInt() {
  -        int b1 = buf[pos++] & 0xFF;  // No swap, Java order
  +        int b1 = buf[pos++] & 0xFF; // No swap, Java order
           b1 <<= 8;
           b1 |= (buf[pos++] & 0xFF);
           b1 <<= 8;
  @@ -330,65 +354,80 @@
           return  b1;
       }
   
  +
       public int getHeaderLength() {
           return 4;
       }
   
  +    
       public int processHeader() {
           pos = 0;
           int mark = getInt();
           len = getInt();
            
           if ((mark != 0x1234) && (mark != 0x4142)) {
  -            // XXX Logging
  -            log.error("BAD packet signature " + mark);
  -            dump("In: ");
  +            log.error(sm.getString("ajpmessage.invalid", "" + mark));
  +            if (log.isDebugEnabled()) {
  +                dump("In: ");
  +            }
               return -1;
           }
   
  -        if (log.isDebugEnabled()) 
  +        if (log.isDebugEnabled())  {
               log.debug("Received " + len + " " + buf[0]);
  +        }
           return len;
       }
       
  -    /* -------------------- Utilities -------------------- */
   
       public void dump(String msg) {
  -        if (log.isDebugEnabled()) 
  +        if (log.isDebugEnabled()) {
               log.debug(msg + ": " + buf + " " + pos +"/" + (len + 4));
  +        }
           int max = pos;
           if (len + 4 > pos)
               max = len+4;
           if (max > 1000)
               max = 1000;
  -        if (log.isDebugEnabled()) 
  -            for(int j = 0; j < max; j += 16) 
  +        if (log.isDebugEnabled()) {
  +            for (int j = 0; j < max; j += 16) { 
                   log.debug(hexLine(buf, j, len));
  +            }
  +        }
       }
   
  -    private static String hexLine(byte buf[], int start, int len) {
  +
  +    // ------------------------------------------------------ Protected 
Methods
  +
  +
  +    protected static String hexLine(byte buf[], int start, int len) {
           StringBuffer sb = new StringBuffer();
           for (int i = start; i < start + 16 ; i++) {
  -            if (i < len + 4)
  +            if (i < len + 4) {
                   sb.append(hex(buf[i]) + " ");
  -            else 
  +            } else { 
                   sb.append("   ");
  +            }
           }
           sb.append(" | ");
           for (int i = start; i < start + 16 && i < len + 4; i++) {
  -            if (!Character.isISOControl((char)buf[i]))
  -                sb.append(new Character((char)buf[i]));
  -            else
  +            if (!Character.isISOControl((char) buf[i])) {
  +                sb.append(new Character((char) buf[i]));
  +            } else {
                   sb.append(".");
  +            }
           }
           return sb.toString();
       }
   
  -    private static String hex(int x) {
  +
  +    protected static String hex(int x) {
           String h = Integer.toHexString(x);
  -        if (h.length() == 1) 
  +        if (h.length() == 1) {
               h = "0" + h;
  +        }
           return h.substring(h.length() - 2);
       }
   
  +
   }
  
  
  
  1.348     +3 -0      jakarta-tomcat-catalina/webapps/docs/changelog.xml
  
  Index: changelog.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/docs/changelog.xml,v
  retrieving revision 1.347
  retrieving revision 1.348
  diff -u -r1.347 -r1.348
  --- changelog.xml     30 Jul 2005 21:22:25 -0000      1.347
  +++ changelog.xml     1 Aug 2005 09:40:14 -0000       1.348
  @@ -85,6 +85,9 @@
           <bug>35942</bug>: Fix NPE retriving cipher suite attribute when no 
certificate 
           was submitted (for example with no SSL). (remm)
         </fix>
  +      <fix>
  +        Internationalization and code cleanups for APR AJP implementation. 
(remm)
  +      </fix>
        </changelog>
     </subsection>
   
  
  
  

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

Reply via email to