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 2002/05/10 02:44:09 UTC

cvs commit: jakarta-tomcat-connectors/jk/native/netscape jk_nsapi_plugin.c

larryi      02/05/09 17:44:09

  Modified:    jk/native/netscape jk_nsapi_plugin.c
  Log:
  Finally port the input chunking changes from Tomcat 3.3.x
  
  Revision  Changes    Path
  1.8       +34 -7     jakarta-tomcat-connectors/jk/native/netscape/jk_nsapi_plugin.c
  
  Index: jk_nsapi_plugin.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/netscape/jk_nsapi_plugin.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- jk_nsapi_plugin.c	29 Nov 2001 20:02:44 -0000	1.7
  +++ jk_nsapi_plugin.c	10 May 2002 00:44:09 -0000	1.8
  @@ -58,7 +58,7 @@
   /***************************************************************************
    * Description: NSAPI plugin for Netscape servers                          *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
  - * Version:     $Revision: 1.7 $                                           *
  + * Version:     $Revision: 1.8 $                                           *
    ***************************************************************************/
   
   
  @@ -478,6 +478,8 @@
   static int setup_http_headers(nsapi_private_data_t *private_data,
                                 jk_ws_service_t *s) 
   {
  +    int need_content_length_header = (s->content_length == 0) ? JK_TRUE : JK_FALSE; 
  +
       pblock *headers_jar = private_data->rq->headers;
       int cnt;
       int i;
  @@ -490,9 +492,13 @@
           }
       }
   
  +    s->headers_names  = NULL;
  +    s->headers_values = NULL;
  +    s->num_headers = cnt;
       if(cnt) {
  -        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) {            
               for(i = 0, cnt = 0 ; i < headers_jar->hsize ; i++) {
  @@ -500,18 +506,39 @@
                   while(h && h->param) {
                       s->headers_names[cnt]  = h->param->name;
                       s->headers_values[cnt] = h->param->value;
  +                    if(need_content_length_header &&
  +                            !strncmp(h->param->name,"content-length",14)) {
  +                        need_content_length_header = JK_FALSE;
  +                    }
                       cnt++;
                       h = h->next;
                   }
               }
  +            /* 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;
               return JK_TRUE;
           }
       } else {
  -        s->num_headers = cnt;
  -        s->headers_names  = NULL;
  -        s->headers_values = NULL;
  -        return JK_TRUE;
  +        if (need_content_length_header) {
  +            s->headers_names  = jk_pool_alloc(&private_data->p, sizeof(char *));
  +            s->headers_values = jk_pool_alloc(&private_data->p, sizeof(char *));
  +            if(s->headers_names && s->headers_values) {
  +                s->headers_names[0] = "content-length"; 
  +                s->headers_values[0] = "0"; 
  +                s->num_headers++;
  +                return JK_TRUE;
  +            }
  +        }
  +        else
  +            return JK_TRUE;
       }
   
       return JK_FALSE;
  
  
  

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