Sophie

Sophie

distrib > Mandriva > 2010.1 > x86_64 > by-pkgid > fa8a996384674b1c3e3c864f6f4bf270 > files > 464

apache-mod_perl-2.0.4-13mdv2010.1.x86_64.rpm

(dunno where to put it but don't want to lose these design notes, so
just land them here for now)


Filters: direct C api mapping
--------------------

Apache::register_output_filter($filtername, $callback, $filter_type)

Apache::register_input_filter($filtername, $callback, $filter_type)

    filter_type can be one of:
      Apache::FTYPE_CONTENT
      Apache::FTYPE_HTTP_HEADER
      Apache::FTYPE_TRANSCODE
      Apache::FTYPE_CONNECTION
      Apache::FTYPE_NETWORK

$r->add_output_filter($name, $ctx)
$c->add_output_filter($name, $ctx)

$r->add_input_filter($name, $ctx)
$c->add_input_filter($name, $ctx)

note: $ctx will default to NULL

Filters: directives
----------

PerlInputFilterHandler

PerlOutputFilterHandler

each will be the equivalent of:

ap_register_{input,output}_filter($handler_name, $handler, $filter_type)

where:
 $handler_name is the Perl name, at the moment is "MODPERL_OUTPUT" and
 "MODPERL_INPUT", would be easy to switch that to the handler name

 $handler is the modperl C callback

 $filter_type defaults to AP_FTYPE_CONTENT, subroutine attributes can
 be used to specify the filter_types list above

 based on attributes, add_{input,output}_filter may need to happen at
 different times, e.g. input filters who want to filter headers +
 content vs. input filters who want to filter only content

alternative to those directives would be:

PerlInputFilter

PerlOutputFilter

combined with:

SetInputFilter

SetOutputFilter

pros: can use Perl{Input,Output}Filter to register the filter in
      httpd.conf, rather than using the API.  can then call
      $r->add_{input,output}_filter($filter_name) at request time

cons: in the common case, requires two directives that use the same
      values (the $handler_name)

 - and/or -

PerlSetInputFilter

PerlSetOutputFilter

as aliases for SetInputFilter, SetOutputFilter which also take care of
filter registration (which PerlInputFilter, PerlOutputFilter would
have done)

pros: similar to Set{Input,Output}Filter
      only need to use one directive

cons: the filter module needs to register the filter in order to add
      the filter at request time without using a directive
      however: PerlModule Apache::FooFilter
      where Apache::FooFilter registers the filter, can provide this
      functionality without requiring new Perl{Input,Output}Filter
      directives

 - in any case -

with the C api mapping it should be possible for a PerlModule to
register the filter(s), then use the standard Set{Input,Output}Filter
directives and the add_{input,output}_filter api at request time.

note: no need to maintain a list of PerlFilters (like PerlModule,
PerlRequire) since the directives trigger modperl_handler_new(), just
like all other Perl*Handlers

Filters: {get,set,push}_handlers
-----------------------
would be nice for Perl{Input,Output}FilterHandler to work with the
modperl {get,set,push}_handlers api just like other Perl*Handlers