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

cvs commit: jakarta-tomcat-connectors/jk/native/common jk_ajp13.h jk_ajp_common.c jk_ajp_common.h

mmanders    01/07/23 14:02:43

  Modified:    jk/native/common jk_ajp13.h jk_ajp_common.c jk_ajp_common.h
  Log:
  Ported fixes for AJP13 wrong response from Tomcat 3.3 branch.
  
  Revision  Changes    Path
  1.5       +2 -1      jakarta-tomcat-connectors/jk/native/common/jk_ajp13.h
  
  Index: jk_ajp13.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp13.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- jk_ajp13.h	2001/06/18 14:15:18	1.4
  +++ jk_ajp13.h	2001/07/23 21:02:43	1.5
  @@ -58,7 +58,7 @@
   /***************************************************************************
    * Description: Experimental bi-directionl protocol handler.               *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
  - * Version:     $Revision: 1.4 $                                           *
  + * Version:     $Revision: 1.5 $                                           *
    ***************************************************************************/
   #ifndef JK_AJP13_H
   #define JK_AJP13_H
  @@ -78,6 +78,7 @@
   #define AJP13_READ_BUF_SIZE         (8*1024)
   #define AJP13_DEF_CACHE_SZ          (1)
   #define JK_INTERNAL_ERROR       	(-2)
  +#define JK_FATAL_ERROR              (-3)
   #define AJP13_MAX_SEND_BODY_SZ      (DEF_BUFFER_SZ - 6)
   
   /*
  
  
  
  1.6       +22 -9     jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c
  
  Index: jk_ajp_common.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- jk_ajp_common.c	2001/06/22 08:33:56	1.5
  +++ jk_ajp_common.c	2001/07/23 21:02:43	1.6
  @@ -59,7 +59,7 @@
    * Description: common stuff for bi-directional protocols ajp13/ajp14.     *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
    * Author:      Henri Gomez <hg...@slib.fr>                               *
  - * Version:     $Revision: 1.5 $                                           *
  + * Version:     $Revision: 1.6 $                                           *
    ***************************************************************************/
   
   
  @@ -68,8 +68,9 @@
   #include "jk_ajp13.h"
   #include "jk_ajp14.h"
   #include "jk_ajp_common.h"
  -#include "jk_connect.h"
  +#include "jk_connect.h"
   
  +
   const char *response_trans_headers[] = {
       "Content-Type", 
       "Content-Language", 
  @@ -801,8 +802,8 @@
   	 * We send here the first part of data which was sent previously to the
   	 * remote Tomcat
   	 */
  -	if (jk_b_get_len(op->reply) > AJP_HEADER_LEN) {
  -		if(!ajp_connection_tcp_send_message(ae, op->reply, l)) {
  +	if (jk_b_get_len(op->post) > AJP_HEADER_LEN) {
  +		if(!ajp_connection_tcp_send_message(ae, op->post, l)) {
   			jk_log(l, JK_LOG_ERROR, "Error resending request body\n");
   			return JK_FALSE;
   		}
  @@ -818,7 +819,7 @@
   			unsigned len = ae->left_bytes_to_send;
   			if (len > AJP13_MAX_SEND_BODY_SZ) 
   				len = AJP13_MAX_SEND_BODY_SZ;
  -            		if (! ajp_read_into_msg_buff(ae, s, op->reply, len, l)) {
  +            		if (! ajp_read_into_msg_buff(ae, s, op->post, len, l)) {
   				/* the browser stop sending data, no need to recover */
   				op->recoverable = JK_FALSE;
   				return JK_FALSE;
  @@ -838,6 +839,7 @@
    */
   
   static int ajp_process_callback(jk_msg_buf_t *msg, 
  +                                jk_msg_buf_t *pmsg,
                                   ajp_endpoint_t *ae,
                                   jk_ws_service_t *r, 
                                   jk_logger_t *l) 
  @@ -859,7 +861,7 @@
                                          (const char * const *)res.header_values,
                                          res.num_headers)) {
                       jk_log(l, JK_LOG_ERROR, "Error ajp_process_callback - start_response failed\n");
  -                    return JK_INTERNAL_ERROR;
  +                    return JK_FATAL_ERROR;
                   }
               }
   	    break;
  @@ -869,7 +871,7 @@
   	            unsigned len = (unsigned)jk_b_get_int(msg);
                   if(!r->write(r, jk_b_get_buff(msg) + jk_b_get_pos(msg), len)) {
                       jk_log(l, JK_LOG_ERROR, "Error ajp_process_callback - write failed\n");
  -                    return JK_INTERNAL_ERROR;
  +                    return JK_FATAL_ERROR;
                   }
               }
   	    break;
  @@ -950,7 +952,7 @@
   			return JK_FALSE;
   		}
   
  -		rc = ajp_process_callback(op->reply, p, s, l);
  +		rc = ajp_process_callback(op->reply, op->post, p, s, l);
   
   		/* no more data to be sent, fine we have finish here */
          		if(JK_AJP13_END_RESPONSE == rc)
  @@ -966,11 +968,18 @@
           	 * data to file and replay for it
           	 */
    			op->recoverable = JK_FALSE; 
  -			rc = ajp_connection_tcp_send_message(p, op->reply, l);
  +			rc = ajp_connection_tcp_send_message(p, op->post, l);
           		if (rc < 0) {
   				jk_log(l, JK_LOG_ERROR, "Error sending request data %d\n", rc);
                  	 		return JK_FALSE;
   			}
  +        } else if(JK_FATAL_ERROR == rc) {
  +          /*
  +           * we won't be able to gracefully recover from this so
  +           * set recoverable to false and get out.
  +           */
  +            op->recoverable = JK_FALSE;
  +            return JK_FALSE;
   		} else if(rc < 0) {
   			return (JK_FALSE); /* XXX error */
   		}
  @@ -1006,6 +1015,10 @@
   		op->reply = jk_b_new(&(p->pool));
   		jk_b_set_buffer_size(op->reply, DEF_BUFFER_SZ);
   		jk_b_reset(op->reply); 
  +		
  +		op->post = jk_b_new(&(p->pool));
  +		jk_b_set_buffer_size(op->post, DEF_BUFFER_SZ);
  +		jk_b_reset(op->post); 
   		
   		op->recoverable = JK_TRUE;
   		op->uploadfd	 = -1;		/* not yet used, later ;) */
  
  
  
  1.5       +2 -1      jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.h
  
  Index: jk_ajp_common.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- jk_ajp_common.h	2001/06/18 14:15:32	1.4
  +++ jk_ajp_common.h	2001/07/23 21:02:43	1.5
  @@ -59,7 +59,7 @@
    * Description: common stuff for bi-directional protocol ajp13/ajp14.      *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
    * Author:      Henri Gomez <hg...@slib.fr>                               *
  - * Version:     $Revision: 1.4 $                                           *
  + * Version:     $Revision: 1.5 $                                           *
    ***************************************************************************/
   
   #ifndef JK_AJP_COMMON_H
  @@ -281,6 +281,7 @@
   struct ajp_operation {
       jk_msg_buf_t    *request;   /* original request storage */
       jk_msg_buf_t    *reply;     /* reply storage (chuncked by ajp13 */
  +    jk_msg_buf_t    *post;      /* small post data storage area */
       int     uploadfd;           /* future persistant storage id */
       int     recoverable;        /* if exchange could be conducted on another TC */
   };