On Sun 02 Nov 2008, Torsten Foertsch wrote:
> On Sun 02 Nov 2008, Puneet Lakhina wrote:
> > > Input headers are found in $r->headers_in and are set even before
> > > PerlPostReadRequest. So, have a close look at your code. If that
> > > doesn't help try to create a test case as simple as you can and
> > > post it to the list.

> >
> > Not as per this:
> > http://perl.apache.org/docs/2.0/api/...c.html#C_heade
> >rs _in_

>
> Then the documentation is wrong.


To show you that that is not an modperl-thing but implemented that way
in apache, let's have a look at the ultimate docs. In
httpd-2.x.y/server/protocol.c you'll find the ap_read_request function.
It reads in a request, finds the virtual host that handles the request
and calls PostReadRequest handlers. It is a bit lengthy. So I have
removed the unnecessary for the problem stuff and put in a few
comments:

request_rec *ap_read_request(conn_rec *conn)
{
....
r->headers_in = apr_table_make(r->pool, 25);

Here $r->headers_in is created as an empty table.

/* Get the request... */
if (!read_request_line(r, tmp_bb)) {

This reads the first request line, something like "GET / HTTP/1.1"

if (!r->assbackwards) {
ap_get_mime_headers_core(r, tmp_bb);

And this line reads in the headers and populates $r->headers_in.

if (apr_table_get(r->headers_in, "Transfer-Encoding")
&& apr_table_get(r->headers_in, "Content-Length")) {

You see, even the function itself uses $r->headers_in.

ap_update_vhost_from_headers(r);

Another example of $r->headers_in usage. Here the correct
NamedVirtualHost is found. This function needs the Host request header.

if ((access_status = ap_run_post_read_request(r))) {

And here a PerlPostReadRequestHandler is called.

....
}


Torsten

--
Need professional mod_perl support?
Just hire me: torsten.foertsch@gmx.net