You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2004/07/15 16:33:38 UTC

cvs commit: jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11 InternalOutputBuffer.java

remm        2004/07/15 07:33:38

  Modified:    http11/src/java/org/apache/coyote/http11
                        InternalOutputBuffer.java
  Log:
  - Add better support for CharChunk for response headers.
  
  Revision  Changes    Path
  1.22      +41 -2     jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/InternalOutputBuffer.java
  
  Index: InternalOutputBuffer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/InternalOutputBuffer.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- InternalOutputBuffer.java	24 Feb 2004 08:50:56 -0000	1.21
  +++ InternalOutputBuffer.java	15 Jul 2004 14:33:38 -0000	1.22
  @@ -22,6 +22,7 @@
   import java.security.PrivilegedAction;
   
   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.http.HttpMessages;
   import org.apache.tomcat.util.http.MimeHeaders;
  @@ -607,11 +608,12 @@
        */
       protected void write(MessageBytes mb) {
   
  -        mb.toBytes();
  -
           if (mb.getType() == MessageBytes.T_BYTES) {
               ByteChunk bc = mb.getByteChunk();
               write(bc);
  +        } else if (mb.getType() == MessageBytes.T_CHARS) {
  +            CharChunk cc = mb.getCharChunk();
  +            write(cc);
           } else {
               write(mb.toString());
           }
  @@ -632,6 +634,43 @@
           System.arraycopy(bc.getBytes(), bc.getStart(), buf, pos,
                            bc.getLength());
           pos = pos + bc.getLength();
  +
  +    }
  +
  +
  +    /**
  +     * This method will write the contents of the specyfied char 
  +     * buffer to the output stream, without filtering. This method is meant to
  +     * be used to write the response header.
  +     * 
  +     * @param bc data to be written
  +     */
  +    protected void write(CharChunk cc) {
  +
  +        int start = cc.getStart();
  +        int end = cc.getEnd();
  +        char[] cbuf = cc.getBuffer();
  +        for (int i = start; i < end; i++) {
  +            char c = cbuf[i];
  +            // Note:  This is clearly incorrect for many strings,
  +            // but is the only consistent approach within the current
  +            // servlet framework.  It must suffice until servlet output
  +            // streams properly encode their output.
  +            if ((c & 0xff00) != 0) {
  +                // High order byte must be zero
  +                //log("Header character is not iso8859_1, " +
  +                //"not supported yet: " + c, Log.ERROR ) ;
  +            }
  +            if (c != 9) {
  +                if ((c >= 0) && (c <= 31)) {
  +                    c = ' ';
  +                }
  +                if (c == 127) {
  +                    c = ' ';
  +                }
  +            }
  +            buf[pos++] = (byte) c;
  +        }
   
       }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org