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 <[EMAIL PROTECTED]>                           *
  - * 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 <[EMAIL PROTECTED]>                           *
    * Author:      Henri Gomez <[EMAIL PROTECTED]>                               *
  - * 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 <[EMAIL PROTECTED]>                           *
    * Author:      Henri Gomez <[EMAIL PROTECTED]>                               *
  - * 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 */
   };
  
  
  

Reply via email to