On Wed, Sep 18, 2002 at 07:36:00AM +1000, Bojan Smojver wrote:
> Justin,
> 
> After mucking around a bit with what you suggested, this seemed like the
> straightforward thing to do. Not sure how things would work on internal
> redirects etc. Can you please have a look. I'm sure it's naive, but so
> am I (for now :-)
> 
> Bojan

> --- httpd-2.0-vanilla/server/protocol.c       Fri Sep  6 16:01:19 2002
> +++ httpd-2.0/server/protocol.c       Wed Sep 18 07:32:37 2002
> @@ -895,6 +895,15 @@
>      r->connection      = conn;
>      r->server          = conn->base_server;
>  
> +    /* Update the request in connection filters */
> +    f = conn->input_filters;
> +    for (; f; f = f->next)
> +        f->r = r;
> +
> +    f = conn->output_filters;
> +    for (; f; f = f->next)
> +        f->r = r;
> +

Well, I'd do (plus the declaration of f in your later post):

for (f = conn->input_filters; f; f = f->next) {
   f->r = r;
}

for (f = conn->output_filters; f; f = f->next) {
   f->r = r;
}

Now, the question is whether anyone has any major qualms with this.
Basically, it now allows connection filters some access to the
current request_rec (as defined by the protocol module).  

Internal redirects would be handled by the update_r_in_filters func
in http_request.c (which is equivalent to this for statement - hmm,
I forsee ap_update_filters in our future), so that should be fine.

The only potential problem I forsee is whether the input bytes could
be logged on one request, and the output on another.  Therefore, we
might want to walk r->prev and add the totals to get our real bytes
read and sent.  Oooh, internal_internal_redirect copies the
r->read_length to the new request, so I think we're fine.

For the logging case, I think this makes a lot of sense as it lets
us simplify how we log.  -- justin

Reply via email to