(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