httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r..@locus.apache.org
Subject cvs commit: apache-2.0/src/main http_connection.c http_core.c http_protocol.c
Date Fri, 06 Oct 2000 06:07:17 GMT
rbb         00/10/05 23:07:16

  Modified:    src      CHANGES
               src/include http_protocol.h
               src/main http_connection.c http_core.c http_protocol.c
  Log:
  Add the first draft of the http_filter.  In time this filter will split
  the bucket brigade between the headers and the body.  Right now it just
  converts \r\n to \n\0.
  
  Revision  Changes    Path
  1.254     +6 -0      apache-2.0/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/CHANGES,v
  retrieving revision 1.253
  retrieving revision 1.254
  diff -u -r1.253 -r1.254
  --- CHANGES	2000/10/05 22:34:46	1.253
  +++ CHANGES	2000/10/06 06:06:58	1.254
  @@ -1,4 +1,10 @@
   Changes with Apache 2.0a7
  +  *) Begin the http_filter.  This is an input filter that understands
  +     the absolute basic amount required to parse an HTTP Request.  The
  +     goal is to be able to split headers from request body before passing
  +     the data back to the other filters.
  +     [Ryan Bloom]
  +
     *) Bring forward from 1.3.13 the config directory implementation
        [Jim Jagielski]
   
  
  
  
  1.26      +4 -0      apache-2.0/src/include/http_protocol.h
  
  Index: http_protocol.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/include/http_protocol.h,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- http_protocol.h	2000/09/18 19:30:22	1.25
  +++ http_protocol.h	2000/10/06 06:07:01	1.26
  @@ -62,6 +62,8 @@
   #include "ap_hooks.h"
   #include "apr_portable.h"
   #include "apr_mmap.h"
  +#include "util_filter.h"
  +#include "ap_buckets.h"
   
   #ifdef __cplusplus
   extern "C" {
  @@ -543,6 +545,8 @@
    * @deffunc const char *ap_method_name_of(int methnum)
    */
   API_EXPORT(const char *) ap_method_name_of(int methnum);
  +
  +int http_filter(ap_filter_t *f, ap_bucket_brigade *b);
   
     /* Hooks */
     /*
  
  
  
  1.51      +1 -0      apache-2.0/src/main/http_connection.c
  
  Index: http_connection.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_connection.c,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -r1.50 -r1.51
  --- http_connection.c	2000/10/05 16:55:03	1.50
  +++ http_connection.c	2000/10/06 06:07:07	1.51
  @@ -216,6 +216,7 @@
   
   int ap_pre_http_connection(conn_rec *c)
   {
  +    ap_add_input_filter("HTTP_IN", NULL, NULL, c);
       ap_add_input_filter("CORE_IN", NULL, NULL, c);
       ap_add_output_filter("CORE", NULL, NULL, c);
       return OK;
  
  
  
  1.146     +1 -0      apache-2.0/src/main/http_core.c
  
  Index: http_core.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_core.c,v
  retrieving revision 1.145
  retrieving revision 1.146
  diff -u -r1.145 -r1.146
  --- http_core.c	2000/10/05 16:55:04	1.145
  +++ http_core.c	2000/10/06 06:07:07	1.146
  @@ -3478,6 +3478,7 @@
        * request-processing time.
        */
       ap_hook_insert_filter(core_register_filter, NULL, NULL, AP_HOOK_MIDDLE);
  +    ap_register_input_filter("HTTP_IN", http_filter, AP_FTYPE_CONNECTION);
       ap_register_input_filter("CORE_IN", core_input_filter, AP_FTYPE_CONNECTION);
       ap_register_output_filter("CORE", core_output_filter, AP_FTYPE_CONNECTION + 1);
       ap_register_output_filter("CHUNK", chunk_filter, AP_FTYPE_CONNECTION);
  
  
  
  1.146     +28 -12    apache-2.0/src/main/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_protocol.c,v
  retrieving revision 1.145
  retrieving revision 1.146
  diff -u -r1.145 -r1.146
  --- http_protocol.c	2000/10/05 22:40:28	1.145
  +++ http_protocol.c	2000/10/06 06:07:07	1.146
  @@ -856,6 +856,33 @@
       return AP_HTTP_METHODS[methnum];
   }
   
  +int http_filter(ap_filter_t *f, ap_bucket_brigade *b)
  +{
  +#define ASCII_CR '\015'
  +#define ASCII_LF '\012'
  +    ap_bucket *e;
  +    char *buff;
  +    int length;
  +    char *pos;
  +
  +    ap_get_brigade(f->next, b);
  +
  +    AP_BRIGADE_FOREACH(e, b) {
  +
  +        e->read(e, (const char **)&buff, &length, 0);
  +
  +        pos = buff + 1;
  +        while (pos < buff + length) {
  +            if ((*pos == ASCII_LF) && (*(pos - 1) == ASCII_CR)) {
  +                *(pos - 1) = ASCII_LF;
  +                *pos = '\0';
  +            }
  +            pos++;
  +        }
  +    }
  +    return APR_SUCCESS;
  +}
  +
   /* Get a line of protocol input, including any continuation lines
    * caused by MIME folding (or broken clients) if fold != 0, and place it
    * in the buffer s, of size n bytes, without the ending newline.
  @@ -880,8 +907,6 @@
       ap_bucket_brigade *b;
       ap_bucket *e;
       
  -#define ASCII_CR '\015'
  -#define ASCII_LF '\012'
       
   #ifdef APACHE_XLATE_XXX
       /* When getline() is called, the HTTP protocol is in a state
  @@ -938,18 +963,9 @@
   	 */
           if ((toss = ap_strchr_c(temp, ASCII_LF)) != NULL) { 
               length = toss - temp + 1;
  -            e->split(e, length);
  +            e->split(e, length + 1);
               apr_cpystrn(pos, temp, length + 1);
   	    
  -	    /* get rid of optional \r, again using ascii encoding */
  -	    
  -	    /*** XXX need 2 sentinels in front of pos 
  -	     ***     which are never ASCII_CR, in case length < 2
  -	     */
  -	    if (pos[length - 2] == ASCII_CR) {
  -                pos[length - 2] = ASCII_LF;
  -                pos[--length] = '\0';
  -	    }
               AP_BUCKET_REMOVE(e);
               e->destroy(e);
           }
  
  
  

Mime
View raw message