httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From traw...@locus.apache.org
Subject cvs commit: apache-2.0/src/main http_connection.c http_core.c http_protocol.c http_request.c util_filter.c
Date Thu, 05 Oct 2000 16:55:21 GMT
trawick     00/10/05 09:55:18

  Modified:    src/include http_core.h httpd.h util_filter.h
               src/main http_connection.c http_core.c http_protocol.c
                        http_request.c util_filter.c
  Log:
  Add a bit of infrastructure which will be needed for input filtering:
  
  1) separate filter lists hanging off the r and the c
  
     requests start off with the same filter list as the connection
  
     the input filter list is not initialized for subrequests
  
     internal redirects start off with the same filter list as the
     connection
  
  2) AddInputFilter directive (blatant rip-off of Ryan's AddOutputFilter
     directive); as with AddOutputFilter, the network is implicitly to the
     right of the specified filter list; this may not be the most
     intuitive way to specify the filters; not sure yet
  
  Revision  Changes    Path
  1.25      +1 -0      apache-2.0/src/include/http_core.h
  
  Index: http_core.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/include/http_core.h,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- http_core.h	2000/09/13 23:13:16	1.24
  +++ http_core.h	2000/10/05 16:54:52	1.25
  @@ -423,6 +423,7 @@
   #endif    
   
       apr_array_header_t *filters;
  +    apr_array_header_t *input_filters;
   } core_dir_config;
   
   /* Per-server core configuration */
  
  
  
  1.91      +4 -1      apache-2.0/src/include/httpd.h
  
  Index: httpd.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/include/httpd.h,v
  retrieving revision 1.90
  retrieving revision 1.91
  diff -u -r1.90 -r1.91
  --- httpd.h	2000/10/05 11:21:11	1.90
  +++ httpd.h	2000/10/05 16:54:54	1.91
  @@ -806,8 +806,11 @@
   #endif /*APACHE_XLATE*/
   
       /** A list of output filters to be used for this request 
  -     *  @defvar ap_filter_t *filters */
  +     *  @defvar ap_filter_t *output_filters */
       struct ap_filter_t *output_filters;
  +    /** A list of input filters to be used for this request 
  +     *  @defvar ap_filter_t *filters */
  +    struct ap_filter_t *input_filters;
       /** A flag to determine if the eos bucket has been sent yet
        *  @defvar int eos_sent */
       int eos_sent;
  
  
  
  1.23      +3 -2      apache-2.0/src/include/util_filter.h
  
  Index: util_filter.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/include/util_filter.h,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- util_filter.h	2000/10/05 12:01:37	1.22
  +++ util_filter.h	2000/10/05 16:54:55	1.23
  @@ -320,10 +320,11 @@
    * Add a filter to the current connection.  Filters are added in a FIFO manner.
    * The first filter added will be the first filter called.
    * @param name The name of the filter to add
  + * @param r The request to add this filter for (or NULL if it isn't associated with a request)
    * @param c The connection to add the fillter for
  - * @deffunc void ap_add_input_filter(const char *name, void *ctx, conn_rec *r)
  + * @deffunc void ap_add_input_filter(const char *name, void *ctx, request_rec *r, conn_rec
*c)
    */
  -API_EXPORT(void) ap_add_input_filter(const char *name, void *ctx, conn_rec *r);
  +API_EXPORT(void) ap_add_input_filter(const char *name, void *ctx, request_rec *r, conn_rec
*c);
   
   /**
    * Add a filter to the current request.  Filters are added in a FIFO manner.
  
  
  
  1.50      +1 -1      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.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- http_connection.c	2000/10/05 12:01:41	1.49
  +++ http_connection.c	2000/10/05 16:55:03	1.50
  @@ -216,7 +216,7 @@
   
   int ap_pre_http_connection(conn_rec *c)
   {
  -    ap_add_input_filter("CORE_IN", NULL, c);
  +    ap_add_input_filter("CORE_IN", NULL, NULL, c);
       ap_add_output_filter("CORE", NULL, NULL, c);
       return OK;
   }
  
  
  
  1.145     +22 -1     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.144
  retrieving revision 1.145
  diff -u -r1.144 -r1.145
  --- http_core.c	2000/10/05 12:01:40	1.144
  +++ http_core.c	2000/10/05 16:55:04	1.145
  @@ -187,6 +187,7 @@
       conf->add_default_charset_name = DEFAULT_ADD_DEFAULT_CHARSET_NAME;
   
       conf->filters = apr_make_array(a, 2, sizeof(void *));
  +    conf->input_filters = apr_make_array(a, 2, sizeof(void *));
       return (void *)conf;
   }
   
  @@ -327,6 +328,8 @@
   	}
       }
       conf->filters = apr_append_arrays(a, base->filters, new->filters);
  +    conf->input_filters = apr_append_arrays(a, base->input_filters,
  +                                            new->input_filters);
   
       return (void*)conf;
   }
  @@ -1884,6 +1887,16 @@
       return NULL;
   }
   
  +static const char *add_input_filter(cmd_parms *cmd, void *dummy, const char *arg)
  +{
  +    core_dir_config *conf = dummy;
  +    char **newfilter;
  +    
  +    newfilter = (char **)apr_push_array(conf->input_filters);
  +    *newfilter = apr_pstrdup(cmd->pool, arg);
  +    return NULL;
  +}
  +
   static const char *add_module_command(cmd_parms *cmd, void *dummy,
   				      const char *arg)
   {
  @@ -2765,13 +2778,15 @@
   AP_INIT_TAKE12("RLimitNPROC", no_set_limit, NULL,
      OR_ALL, "soft/hard limits for max number of processes per uid"),
   #endif
  -/* XXX This should be allowable in .htaccess files, but currently it won't
  +/* XXX These should be allowable in .htaccess files, but currently it won't
    * play well with the Options stuff.  Until that is fixed, I would prefer
    * to leave it just in the conf file.  Other should feel free to disagree
    * with me.  Rbb.
    */
   AP_INIT_ITERATE("AddOutputFilter", add_filter, NULL, ACCESS_CONF,
      "filters to be run"),
  +AP_INIT_ITERATE("AddInputFilter", add_input_filter, NULL, ACCESS_CONF,
  +   "filters to be run on the request body"),
   { NULL }
   };
   
  @@ -3435,6 +3450,12 @@
       for (i = 0; i < conf->filters->nelts; i++) {
           char *foobar = items[i];
           ap_add_output_filter(foobar, NULL, r, r->connection);
  +    }
  +
  +    items = (char **)conf->input_filters->elts;
  +    for (i = 0; i < conf->input_filters->nelts; i++) {
  +        char *foobar = items[i];
  +        ap_add_input_filter(foobar, NULL, r, r->connection);
       }
   }
   
  
  
  
  1.143     +1 -0      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.142
  retrieving revision 1.143
  diff -u -r1.142 -r1.143
  --- http_protocol.c	2000/10/05 14:00:59	1.142
  +++ http_protocol.c	2000/10/05 16:55:08	1.143
  @@ -1249,6 +1249,7 @@
       r->status          = HTTP_REQUEST_TIME_OUT;  /* Until we get a request */
       r->the_request     = NULL;
       r->output_filters  = conn->output_filters;
  +    r->input_filters   = conn->input_filters;
   
   #ifdef APACHE_XLATE
       r->rrx = apr_pcalloc(p, sizeof(struct ap_rr_xlate));
  
  
  
  1.54      +3 -0      apache-2.0/src/main/http_request.c
  
  Index: http_request.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_request.c,v
  retrieving revision 1.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- http_request.c	2000/10/05 11:21:23	1.53
  +++ http_request.c	2000/10/05 16:55:09	1.54
  @@ -780,6 +780,7 @@
   
       /* start with the same set of output filters */
       rnew->output_filters = r->output_filters;
  +    /* no input filters for a subrequest */
   
       ap_set_sub_req_protocol(rnew, r);
   
  @@ -875,6 +876,7 @@
   
       /* start with the same set of output filters */
       rnew->output_filters = r->output_filters;
  +    /* no input filters for a subrequest */
   
       ap_set_sub_req_protocol(rnew, r);
       fdir = ap_make_dirstr_parent(rnew->pool, r->filename);
  @@ -1374,6 +1376,7 @@
       new->vlist_validator = r->vlist_validator;
   
       new->output_filters  = r->connection->output_filters;
  +    new->input_filters   = r->connection->input_filters;
   
       apr_table_setn(new->subprocess_env, "REDIRECT_STATUS",
   	apr_psprintf(r->pool, "%d", r->status));
  
  
  
  1.27      +10 -7     apache-2.0/src/main/util_filter.c
  
  Index: util_filter.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/util_filter.c,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- util_filter.c	2000/10/05 12:01:41	1.26
  +++ util_filter.c	2000/10/05 16:55:10	1.27
  @@ -118,25 +118,28 @@
                       &registered_output_filters);
   }
   
  -API_EXPORT(void) ap_add_input_filter(const char *name, void *ctx, conn_rec *c)
  +API_EXPORT(void) ap_add_input_filter(const char *name, void *ctx, 
  +                                     request_rec *r, conn_rec *c)
   {
       ap_filter_rec_t *frec = registered_input_filters;
   
       for (; frec != NULL; frec = frec->next) {
           if (!strcasecmp(name, frec->name)) {
  -            ap_filter_t *f = apr_pcalloc(c->pool, sizeof(*f));
  +            apr_pool_t *p = r ? r->pool : c->pool;
  +            ap_filter_t *f = apr_pcalloc(p, sizeof(*f));
  +            ap_filter_t **outf = r ? &r->input_filters : &c->input_filters;
   
               f->frec = frec;
               f->ctx = ctx;
  -            f->r = NULL;
  +            f->r = r;
               f->c = c;
   
  -            if (INSERT_BEFORE(f, c->input_filters)) {
  -                f->next = c->input_filters;
  -                c->input_filters = f;
  +            if (INSERT_BEFORE(f, *outf)) {
  +                f->next = *outf;
  +                *outf = f;
               }
               else {
  -                ap_filter_t *fscan = c->input_filters;
  +                ap_filter_t *fscan = *outf;
                   while (!INSERT_BEFORE(f, fscan->next))
                       fscan = fscan->next;
                   f->next = fscan->next;
  
  
  

Mime
View raw message