dougm       01/03/12 23:29:03

  Modified:    xs/Apache/Filter Apache__Filter.h
               xs/maps  apache_functions.map
  Log:
  add output filter "stream" interface read/print methods
  
  Revision  Changes    Path
  1.2       +53 -0     modperl-2.0/xs/Apache/Filter/Apache__Filter.h
  
  Index: Apache__Filter.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/xs/Apache/Filter/Apache__Filter.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Apache__Filter.h  2001/03/05 03:54:18     1.1
  +++ Apache__Filter.h  2001/03/13 07:28:54     1.2
  @@ -1,2 +1,55 @@
   #define mpxs_Apache__RequestRec_add_output_filter(r, name, ctx) \
   ap_add_output_filter(name, ctx, r, NULL)
  +
  +/* XXX: this should be generated like the others in modperl_xs_sv_convert.h */
  +#define mp_xs_sv2_modperl_filter(sv) \
  +((SvROK(sv) && (SvTYPE(SvRV(sv)) == SVt_PVMG)) \
  +|| (Perl_croak(aTHX_ "argument is not a blessed reference"),0) ? \
  +(modperl_filter_t *)SvIV((SV*)SvRV(sv)) : (modperl_filter_t *)NULL)
  +
  +static MP_INLINE apr_size_t mpxs_Apache__OutputFilter_print(pTHX_ I32 items,
  +                                                            SV **MARK, SV **SP)
  +{
  +    modperl_filter_t *modperl_filter;
  +    apr_size_t bytes = 0;
  +
  +    mpxs_usage_va_1(modperl_filter, "$filter->print(...)");
  +
  +    if (modperl_filter->mode == MP_OUTPUT_FILTER_MODE) {
  +        mpxs_write_loop(modperl_output_filter_write, modperl_filter);
  +        modperl_output_filter_flush(modperl_filter);
  +    }
  +    else {
  +        croak("input filters not yet supported");
  +    }
  +
  +    /* XXX: ap_rflush if $| */
  +
  +    return bytes;
  +}
  +
  +static MP_INLINE apr_size_t mpxs_Apache__OutputFilter_read(pTHX_ I32 items,
  +                                                           SV **MARK, SV **SP)
  +{
  +    modperl_filter_t *modperl_filter;
  +    apr_size_t wanted, len=0;
  +    SV *buffer;
  +
  +    mpxs_usage_va_2(modperl_filter, buffer, "$filter->read(buf, [len])");
  +
  +    if (items > 2) {
  +        wanted = SvIV(*MARK);
  +    }
  +    else {
  +        wanted = MP_IOBUFSIZE;
  +    }
  +
  +    if (modperl_filter->mode == MP_OUTPUT_FILTER_MODE) {
  +        len = modperl_output_filter_read(aTHX_ modperl_filter, buffer, wanted);
  +    }
  +    else {
  +        croak("input filters not yet supported");
  +    }
  +
  +    return len;
  +}
  
  
  
  1.3       +5 -1      modperl-2.0/xs/maps/apache_functions.map
  
  Index: apache_functions.map
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/xs/maps/apache_functions.map,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- apache_functions.map      2001/03/13 06:32:28     1.2
  +++ apache_functions.map      2001/03/13 07:29:00     1.3
  @@ -183,7 +183,11 @@
   ap_filter_t *:DEFINE_add_output_filter | | \
                 request_rec *:r, const char *:name, void *:ctx
   
  -MODULE=Apache::Filter   PACKAGE=guess
  +PACKAGE=Apache::OutputFilter
  + mpxs_Apache__OutputFilter_print | | ...
  + mpxs_Apache__OutputFilter_read  | | ...
  +
  +PACKAGE=guess
   ~ap_add_output_filter
    ap_add_input_filter
    ap_get_brigade
  
  
  

Reply via email to