Ben Laurie wrote:
> I don't see why it matters if there are redundant members in
> request_rec. However, for purity, it might be cool to divide
> request_rec up into common elements and protocol-specific stuff in a
> union.
That's not really a problem, though of course it's hacky. It's the
logical consequence of declaring HTTPD to be multi-protocol while
making so much of it revolve around the request_rec.
> The downside of this approach, though, is that you could easily call a
> module that expected the wrong union to be filled in.
An extra magic number and an API like ap_verify_protocol(AP_PROTO_FOOTP)
could deal with that relatively cleanly. It can slot in well with
Paul's recent Listen/Protocol stuff.
> Another approach still would require a fairly large change to the core
> and many modules, but it strikes me as a better option...
>
> struct http_data {
> .
> .
> .
> };
>
> struct smtp_data {
> .
> .
> .
> };
>
> struct request_rec {
> .
> . /* common stuff */
> .
> struct http_data *http;
> struct smtp_data *smtp;
> }
The downside is back-compatibility: it'll imply a slightly bigger
change to modules. Nothing difficult, but third-party developers who
don't read this list may not take the trouble, leaving their users
in an incompatible world. That is a Bad Thing. Especially when half
the world hasn't forgiven us for incompatible changes in 2.x over 1.x.
It's the filter rec that really wants updating here. Currently we have
a conn_rec plus a request_rec. That's ugly: either the conn_rec is
redundant or the request_rec is junk - should be a union. With
additional protocols we just add more members to the union.
--
Nick Kew