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

cvs commit: jakarta-tomcat/src/native/mod_jk/iis jk_isapi_plugin.c

larryi      01/09/02 00:27:27

  Modified:    src/native/mod_jk/iis jk_isapi_plugin.c
  Log:
  Update to work with recent changes in Ajp13.java.  The absence of
  a content-length header is interpreted to mean an unknown, but non-zero
  length. For a zero length body, a content-length header saying so is now
  required.
  
  The init_ws_service() method now adds a content-length header if not
  present and the length is zero.
  
  Revision  Changes    Path
  1.3       +18 -3     jakarta-tomcat/src/native/mod_jk/iis/jk_isapi_plugin.c
  
  Index: jk_isapi_plugin.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/native/mod_jk/iis/jk_isapi_plugin.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- jk_isapi_plugin.c	2000/12/11 21:17:47	1.2
  +++ jk_isapi_plugin.c	2001/09/02 07:27:27	1.3
  @@ -56,7 +56,7 @@
   /***************************************************************************
    * Description: ISAPI plugin for IIS/PWS                                   *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
  - * Version:     $Revision: 1.2 $                                               *
  + * Version:     $Revision: 1.3 $                                               *
    ***************************************************************************/
   
   #include <httpext.h>
  @@ -84,6 +84,7 @@
    */
   #define URI_HEADER_NAME         ("TOMCATURI:")
   #define WORKER_HEADER_NAME      ("TOMCATWORKER:")
  +#define CONTENT_LENGTH          ("CONTENT_LENGTH:")
   
   #define HTTP_URI_HEADER_NAME     ("HTTP_TOMCATURI")
   #define HTTP_WORKER_HEADER_NAME  ("HTTP_TOMCATWORKER")
  @@ -872,10 +873,12 @@
               char *headers_buf = jk_pool_strdup(&private_data->p, huge_buf);
               unsigned i;
               unsigned len_of_http_prefix = strlen("HTTP_");
  +            BOOL need_content_length_header = (s->content_length == 0);
               
               cnt -= 2; /* For our two special headers */
  -            s->headers_names  = jk_pool_alloc(&private_data->p, cnt * sizeof(char *));
  -            s->headers_values = jk_pool_alloc(&private_data->p, cnt * sizeof(char *));
  +            /* allocate an extra header slot in case we need to add a content-length header */
  +            s->headers_names  = jk_pool_alloc(&private_data->p, (cnt + 1) * sizeof(char *));
  +            s->headers_values = jk_pool_alloc(&private_data->p, (cnt + 1) * sizeof(char *));
   
               if(!s->headers_names || !s->headers_values || !headers_buf) {
                   return JK_FALSE;
  @@ -890,6 +893,9 @@
                   if(!strnicmp(tmp, URI_HEADER_NAME, strlen(URI_HEADER_NAME)) ||
                      !strnicmp(tmp, WORKER_HEADER_NAME, strlen(WORKER_HEADER_NAME))) {
                       real_header = JK_FALSE;
  +                } else if(need_content_length_header &&
  +                   !strnicmp(tmp, CONTENT_LENGTH, strlen(CONTENT_LENGTH))) {
  +                    need_content_length_header = FALSE;
                   } else {
                       s->headers_names[i]  = tmp;
                   }
  @@ -928,6 +934,15 @@
                   if(real_header) {
                       i++;
                   }
  +            }
  +            /* Add a content-length = 0 header if needed.
  +             * Ajp13 assumes an absent content-length header means an unknown,
  +             * but non-zero length body.
  +             */
  +            if(need_content_length_header) {
  +                s->headers_names[cnt] = "content-length";
  +                s->headers_values[cnt] = "0";
  +                cnt++;
               }
               s->num_headers = cnt;
           } else {