You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2002/06/11 02:13:48 UTC

cvs commit: jakarta-tomcat-connectors/jk/java/org/apache/jk/common JkInputStream.java

costin      2002/06/10 17:13:48

  Modified:    jk/java/org/apache/jk/common JkInputStream.java
  Log:
  Deal with the special case of JNI POST. The first receive() is for
  the ajp initial chunk, if it is not present it's fine.
  
  Revision  Changes    Path
  1.8       +36 -14    jakarta-tomcat-connectors/jk/java/org/apache/jk/common/JkInputStream.java
  
  Index: JkInputStream.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/common/JkInputStream.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- JkInputStream.java	17 Apr 2002 22:38:59 -0000	1.7
  +++ JkInputStream.java	11 Jun 2002 00:13:48 -0000	1.8
  @@ -184,7 +184,7 @@
       int blen;  // Length of current chunk of body data in buffer
       int pos;   // Current read position within that buffer
   
  -    boolean end_of_stream; // true if we've received an empty packet
  +    boolean end_of_stream=false; // true if we've received an empty packet
       
       private int doRead1() throws IOException {
           if(pos >= blen) {
  @@ -271,7 +271,7 @@
       }
   
       public int doRead(ByteChunk responseChunk ) throws IOException {
  -        log.info( "JkInputStream: " + pos + " " + blen + " " + available );
  +        log.info( "doRead " + pos + " " + blen + " " + available + " " + end_of_stream);
           if( blen == pos ) {
               refillReadBuffer();
           }
  @@ -287,23 +287,36 @@
       {
           mc.setType( JkHandler.HANDLE_RECEIVE_PACKET );
           int err = mc.getSource().invoke(bodyMsg, mc);
  +        if( log.isDebugEnabled() )
  +            log.info( "Receiving: getting request body chunk " + err + " " + bodyMsg.getLen() );
           if(err < 0) {
   	    throw new IOException();
   	}
   
  -	// No data received.
  -	if( bodyMsg.getLen() == 0 ) {
  -	    pos=0;
  -	    blen=0;
  -            end_of_stream = true;
  +        pos=0;
  +        blen=0;
  +
  +        // No data received.
  +	if( bodyMsg.getLen() <= 4 ) { // just the header
  +            // Don't mark 'end of stream' for the first chunk.
  +            // end_of_stream = true;
   	    return false;
   	}
       	blen = bodyMsg.peekInt();
  -    	pos = 0;
  +
  +        if( blen == 0 ) {
  +            return false;
  +        }
  +        
  +        if( log.isTraceEnabled() ) {
  +            bodyMsg.dump("Body buffer");
  +        }
  +        
       	int cpl=bodyMsg.getBytes(bodyBuff);
  -	if( log.isDebugEnabled() )
  -            log.debug( "Copy into body buffer2 " + bodyBuff + " " +
  -               cpl + " " + blen );
  +
  +        if( log.isDebugEnabled() )
  +            log.debug( "Copy into body buffer2 " + bodyBuff + " " + cpl + " " + blen );
  +
           if( log.isTraceEnabled() )
               log.trace( "Data:\n" + new String( bodyBuff, 0, cpl ));
   
  @@ -322,7 +335,7 @@
   	// the stream has been reached (yuck -- fix protocol??).
           if (end_of_stream) {
               if( log.isDebugEnabled() ) log.debug("refillReadBuffer: end of stream " );
  -          return false;
  +            return false;
           }
   
   	// Why not use outBuf??
  @@ -335,8 +348,17 @@
   
           mc.setType( JkHandler.HANDLE_SEND_PACKET );
   	mc.getSource().invoke(bodyMsg, mc);
  -	
  -        return receive();
  +
  +        // In JNI mode, response will be in bodyMsg. In TCP mode, response need to be
  +        // read
  +
  +        //bodyMsg.dump("refillReadBuffer ");
  +        
  +        boolean moreData=receive();
  +        if( !moreData ) {
  +            end_of_stream=true;
  +        }
  +        return moreData;
       }
   
   }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>