On Wed, 26 Mar 2008 12:42:51 -0400
"Akins, Brian" <[EMAIL PROTECTED]> wrote:
> On 3/26/08 10:31 AM, "Nick Kew" <[EMAIL PROTECTED]> wrote:
>
> > Straightforward: conditions on headers, method (obsoletes <Limit>),
> > request line, env, CGI vars. With the option to disable conditional
> > stuff for speed.
>
> In mod_include, we parse into a tree on every request. For the
> configuration, we should probably just parse it at startup and "run"
> it on every request.
Indeed - hence the parse/eval separation in the proposed API.
> Also, currently, ap_expr is string specific, it would be nice if this
> was provider based. Not sure of the exact interface, but it would be
> extendable for other types of comparisons, for example.
Well, we always start from a string. Later when it's tokenised
we can, and indeed do, dispatch to a provider (in mod_include's
case, functions called "handle_foo" for keyword foo).
> typedef struct {
> apr_status_t (*init_expr)(apr_pool_t *p, const char *lvalue, const
> char *rvalue, int expr, void**data);
> apr_status_t (*eval_expr)(reuqest_rec *r, void *data);
> } ap_expr_provider_t;
That's no use at top level, because
> So this expresssion, at startup:
>
> <If Remote_IP =~ 10.189.>
> ...
> </endif>
>
> Would call the provider registered for "Remote_IP" as:
we have to parse a string before we have Remote_IP.
Once we have that, sure, our evaluation function can dispatch
to the Remote_IP handler.
You seem to be looking a little further than my proposal went.
Which is kind-of why it would be good to hackathonise this:-)
--
Nick Kew
Application Development with Apache - the Apache Modules Book
http://www.apachetutor.org/