> On Thu, Nov 22, 2007 at 08:39:47AM +0100, [EMAIL PROTECTED] wrote:
>>
>> For my python binding to evhttp (temporarily called fapws2
>> http://www.opensource4you.com/cgi-bin/gitweb.cgi?p=fapws2;a=summary), I
would like to implement the concept of virtual host.
>>
>>
>> Is there anyone having expertise with that within libevent ?
>>
>> I'm thinking to add it within the http structure. Indeed, an uri is always
>> coupled with a virtual host.
>
> You mean evhttp_request, right? There are a bunch of http-related
structures in libevent.
>
No. not really.
If you look into the function called "evhttp_set_cb", we have a structure
called http_cb:
"struct evhttp_cb *http_cb;"
The structure is used to store the uri and the associated callback "
http_cb->what = strdup(uri);
http_cb->cb = cb;
http_cb->cbarg = cbarg;
"
Since the uri is linked to a host, my proposition would be to add the
host in that structure.
>> Then the evhttp_dispatch_callback need to check the uri AND the
virtualhost against the HTTP_X_FORWARDED_FOR environment variable (in
case
>> of proxy) or the req->remote_host.
>
> What logic did you have in mind for X-Forwarded-For? Do you mean the
header, or the environment variable? My understanding is that the
environment variable is mainly used by CGI stuff, and I don't want to
make libevent CGI-specific by default.
>
This is not linked to environment variable, but http headers.
Indeed, within the http header you can find the uri that the browser
request. Their you find the host too: "remote_host".
But, if there is proxy between the browser and the server, If I'm not
wrong we should take the header called X-Forwarded-For (sorry my previous
mail was not correct).
That means that the function called "evhttp_dispatch_callback" must be
adapted to search the valid uri AND, if there is one, the valid
virtualhost.
>> To be backward compatible, an empty virtualhost means that the uri is
always valid.
>
> Sounds reasonable.
>
>> Unfortunately this is quite invasive within the libevent code. If I'm not
>> wrong the following calls must be adapted:
>> evhttp_free
>> evhttp_set_cb
>> evhttp_del_cb
>> evhttp_set_gencb
>
> Changing code is no problem. Changing APIs is not so good, though, if
it makes old code stop working. I think the only function whose
interface would need to change would be evhttp_set_cb. Instead, it
would probably be best to add a new fuction.
>
> There's already some discussion of improving the callback-matching
interface in the sourceforge feature request tracker at
> [ 1826562 ] Add wildcard calbacks to http.c
>
> http://sourceforge.net/tracker/index.php?func=detail&aid=1826562&group_id=50884&atid=461325
>
> It would be neat to come up with an interface that satisfied both the
need of adding wildcards and adding vhost support.
>
;-). Yes this is coming from me too.
>
>> Does the core developers will accept to port it in the trunk of
>> libevent ?
>
> Sounds reasonable, if the code is clean. It would be even better if it
came with regression tests. :)
>
> peace,
> --
> Nick
William
_______________________________________________
Libevent-users mailing list
[email protected]
http://monkeymail.org/mailman/listinfo/libevent-users