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>