stas        2003/01/24 19:08:05

  Modified:    .        Changes
               src/modules/perl modperl_filter.c modperl_filter.h
                        modperl_types.h
               xs/Apache/Filter Apache__Filter.h
               xs/tables/current/ModPerl FunctionTable.pm
               t/filter/TestFilter both_str_con_add.pm both_str_rec_add.pm
                        in_str_consume.pm in_str_lc.pm in_str_msg.pm
                        in_str_sandwich.pm
  Log:
  store the input filter read attributes (mode, block, readbytes) in the
  filter object, so the read function doesn't have to provide them.
  - had to s/mode/input_mode/, because we already have an attr 'mode' in the
  filter object
  if we ever will have a need to change the discipline of the read from the
  filter we can provide an accessor method to modify the values  supplied by
  the filter chain
  
  Revision  Changes    Path
  1.115     +3 -0      modperl-2.0/Changes
  
  Index: Changes
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/Changes,v
  retrieving revision 1.114
  retrieving revision 1.115
  diff -u -r1.114 -r1.115
  --- Changes   24 Jan 2003 07:39:28 -0000      1.114
  +++ Changes   25 Jan 2003 03:08:04 -0000      1.115
  @@ -10,6 +10,9 @@
   
   =item 1.99_09-dev
   
  +make $filter->read() in input streaming filters, use the same number
  +of arguments as read() in the output filters. [Stas]
  +
   Implement $r->add_input_filter and $r->add_output_filter
             $c->add_input_filter and $c->add_output_filter
   and add tests  [Stas]
  
  
  
  1.48      +21 -18    modperl-2.0/src/modules/perl/modperl_filter.c
  
  Index: modperl_filter.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_filter.c,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- modperl_filter.c  24 Jan 2003 07:48:00 -0000      1.47
  +++ modperl_filter.c  25 Jan 2003 03:08:04 -0000      1.48
  @@ -94,7 +94,10 @@
   
   modperl_filter_t *modperl_filter_new(ap_filter_t *f,
                                        apr_bucket_brigade *bb,
  -                                     modperl_filter_mode_e mode)
  +                                     modperl_filter_mode_e mode,
  +                                     ap_input_mode_t input_mode,
  +                                     apr_read_type_e block,
  +                                     apr_off_t readbytes)
   {
       apr_pool_t *p = MP_FILTER_POOL(f);
       modperl_filter_t *filter = apr_pcalloc(p, sizeof(*filter));
  @@ -109,6 +112,9 @@
       if (mode == MP_INPUT_FILTER_MODE) {
           filter->bb_in  = NULL;
           filter->bb_out = bb;
  +        filter->input_mode = input_mode;
  +        filter->block = block;
  +        filter->readbytes = readbytes;
       }
       else {
           filter->bb_in  = bb;
  @@ -134,10 +140,7 @@
       return mg ? (modperl_filter_t *)mg->mg_ptr : NULL;
   }
   
  -int modperl_run_filter(modperl_filter_t *filter,
  -                       ap_input_mode_t mode,
  -                       apr_read_type_e block,
  -                       apr_off_t readbytes)
  +int modperl_run_filter(modperl_filter_t *filter)
   {
       AV *args = Nullav;
       int status;
  @@ -162,9 +165,9 @@
       modperl_filter_mg_set(aTHX_ AvARRAY(args)[0], filter);
   
       if (filter->mode == MP_INPUT_FILTER_MODE) {
  -        av_push(args, newSViv(mode));
  -        av_push(args, newSViv(block));
  -        av_push(args, newSViv(readbytes));
  +        av_push(args, newSViv(filter->input_mode));
  +        av_push(args, newSViv(filter->block));
  +        av_push(args, newSViv(filter->readbytes));
       }
   
       if ((status = modperl_callback(aTHX_ handler, p, r, s, args)) != OK) {
  @@ -413,9 +416,6 @@
   
   MP_INLINE apr_size_t modperl_input_filter_read(pTHX_
                                                  modperl_filter_t *filter,
  -                                               ap_input_mode_t mode,
  -                                               apr_read_type_e block,
  -                                               apr_off_t readbytes,
                                                  SV *buffer,
                                                  apr_size_t wanted)
   {
  @@ -425,7 +425,8 @@
           /* This should be read only once per handler invocation! */
           filter->bb_in = apr_brigade_create(filter->pool,
                                              filter->f->c->bucket_alloc);
  -        ap_get_brigade(filter->f->next, filter->bb_in, mode, block, readbytes);
  +        ap_get_brigade(filter->f->next, filter->bb_in,
  +                       filter->input_mode, filter->block, filter->readbytes);
           MP_TRACE_f(MP_FUNC, "retrieving bb: 0x%lx\n",
                      (unsigned long)(filter->bb_in));
       }
  @@ -544,8 +545,9 @@
           return ap_pass_brigade(f->next, bb);
       }
       else {
  -        filter = modperl_filter_new(f, bb, MP_OUTPUT_FILTER_MODE);
  -        status = modperl_run_filter(filter, 0, 0, 0);
  +        filter = modperl_filter_new(f, bb, MP_OUTPUT_FILTER_MODE,
  +                                    0, 0, 0);
  +        status = modperl_run_filter(filter);
       }
       
       switch (status) {
  @@ -560,7 +562,7 @@
   
   apr_status_t modperl_input_filter_handler(ap_filter_t *f,
                                             apr_bucket_brigade *bb,
  -                                          ap_input_mode_t mode,
  +                                          ap_input_mode_t input_mode,
                                             apr_read_type_e block,
                                             apr_off_t readbytes)
   {
  @@ -570,11 +572,12 @@
       if (((modperl_filter_ctx_t *)f->ctx)->sent_eos) {
           MP_TRACE_f(MP_FUNC,
                      "EOS was already sent, passing through the brigade\n");
  -        return ap_get_brigade(f->next, bb, mode, block, readbytes);
  +        return ap_get_brigade(f->next, bb, input_mode, block, readbytes);
       }
       else {
  -        filter = modperl_filter_new(f, bb, MP_INPUT_FILTER_MODE);
  -        status = modperl_run_filter(filter, mode, block, readbytes);
  +        filter = modperl_filter_new(f, bb, MP_INPUT_FILTER_MODE,
  +                                    input_mode, block, readbytes);
  +        status = modperl_run_filter(filter);
       }
       
       switch (status) {
  
  
  
  1.20      +6 -9      modperl-2.0/src/modules/perl/modperl_filter.h
  
  Index: modperl_filter.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_filter.h,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- modperl_filter.h  24 Jan 2003 07:48:00 -0000      1.19
  +++ modperl_filter.h  25 Jan 2003 03:08:04 -0000      1.20
  @@ -29,14 +29,14 @@
   
   modperl_filter_t *modperl_filter_new(ap_filter_t *f,
                                        apr_bucket_brigade *bb,
  -                                     modperl_filter_mode_e mode);
  +                                     modperl_filter_mode_e mode,
  +                                     ap_input_mode_t input_mode,
  +                                     apr_read_type_e block,
  +                                     apr_off_t readbytes);
   
   modperl_filter_t *modperl_filter_mg_get(pTHX_ SV *obj);
   
  -int modperl_run_filter(modperl_filter_t *filter,
  -                       ap_input_mode_t mode,
  -                       apr_read_type_e block,
  -                       apr_off_t readbytes);
  +int modperl_run_filter(modperl_filter_t *filter);
   
   /* output filters */
   apr_status_t modperl_output_filter_handler(ap_filter_t *f,
  @@ -65,7 +65,7 @@
   /* input filters */
   apr_status_t modperl_input_filter_handler(ap_filter_t *f,
                                             apr_bucket_brigade *bb,
  -                                          ap_input_mode_t mode,
  +                                          ap_input_mode_t input_mode,
                                             apr_read_type_e block,
                                             apr_off_t readbytes);
   
  @@ -75,9 +75,6 @@
   
   MP_INLINE apr_size_t modperl_input_filter_read(pTHX_
                                                  modperl_filter_t *filter,
  -                                               ap_input_mode_t mode,
  -                                               apr_read_type_e block,
  -                                               apr_off_t readbytes,
                                                  SV *buffer,
                                                  apr_size_t wanted);
       
  
  
  
  1.65      +3 -0      modperl-2.0/src/modules/perl/modperl_types.h
  
  Index: modperl_types.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- modperl_types.h   15 Jan 2003 06:07:10 -0000      1.64
  +++ modperl_types.h   25 Jan 2003 03:08:04 -0000      1.65
  @@ -194,6 +194,9 @@
       apr_bucket *bucket;
       apr_bucket_brigade *bb_in;
       apr_bucket_brigade *bb_out;
  +    ap_input_mode_t input_mode;
  +    apr_read_type_e block;
  +    apr_off_t readbytes;
       apr_status_t rc;
       modperl_filter_mode_e mode;
       apr_pool_t *pool;
  
  
  
  1.25      +8 -17     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.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- Apache__Filter.h  24 Jan 2003 07:48:01 -0000      1.24
  +++ Apache__Filter.h  25 Jan 2003 03:08:05 -0000      1.25
  @@ -32,24 +32,12 @@
                                                        SV **MARK, SV **SP)
   {
       modperl_filter_t *modperl_filter;
  -    ap_input_mode_t mode = 0;
  -    apr_read_type_e block = 0;
  -    apr_off_t readbytes = 0;
       apr_size_t wanted, len=0;
       SV *buffer;
  -    
  -    if (items < 4) {
  -        mpxs_usage_va_2(modperl_filter, buffer, "$filter->read(buf, [len])");
  -    }
  -    else {
  -        modperl_filter = mp_xs_sv2_modperl_filter(*MARK); MARK++;
  -        mode           = (ap_input_mode_t)SvIV(*MARK); MARK++;
  -        block          = (apr_read_type_e)SvIV(*MARK); MARK++;
  -        readbytes      = (apr_off_t)SvIV(*MARK); MARK++;
  -        buffer         = *MARK++;
  -    }
  +
  +    mpxs_usage_va_2(modperl_filter, buffer, "$filter->read(buf, [len])");
           
  -    if (items == 3 || items == 6) {
  +    if (items > 2) {
           wanted = SvIV(*MARK);
       }
       else {
  @@ -57,8 +45,11 @@
       }
   
       if (modperl_filter->mode == MP_INPUT_FILTER_MODE) {
  -        len = modperl_input_filter_read(aTHX_ modperl_filter, mode,
  -                                        block, readbytes, buffer, wanted);
  +        /* XXX: if we ever will have a need to change the read
  +         * discipline: (input_mode, block, readbytes) from the filter
  +         * we can provide an accessor method to modify the values
  +         * supplied by the filter chain */
  +        len = modperl_input_filter_read(aTHX_ modperl_filter, buffer, wanted);
       }
       else {
           len = modperl_output_filter_read(aTHX_ modperl_filter, buffer, wanted);
  
  
  
  1.102     +13 -13    modperl-2.0/xs/tables/current/ModPerl/FunctionTable.pm
  
  Index: FunctionTable.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/xs/tables/current/ModPerl/FunctionTable.pm,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- FunctionTable.pm  24 Jan 2003 07:48:01 -0000      1.101
  +++ FunctionTable.pm  25 Jan 2003 03:08:05 -0000      1.102
  @@ -1696,6 +1696,18 @@
         {
           'type' => 'modperl_filter_mode_e',
           'name' => 'mode'
  +      },
  +      {
  +        'type' => 'ap_input_mode_t',
  +        'name' => 'input_mode'
  +      },
  +      {
  +        'type' => 'apr_read_type_e',
  +        'name' => 'block'
  +      },
  +      {
  +        'type' => 'apr_off_t',
  +        'name' => 'readbytes'
         }
       ]
     },
  @@ -2414,7 +2426,7 @@
         },
         {
           'type' => 'ap_input_mode_t',
  -        'name' => 'mode'
  +        'name' => 'input_mode'
         },
         {
           'type' => 'apr_read_type_e',
  @@ -3907,18 +3919,6 @@
           'type' => 'modperl_filter_t *',
           'name' => 'filter'
         },
  -      {
  -        'type' => 'ap_input_mode_t',
  -        'name' => 'mode'
  -      },
  -      {
  -        'type' => 'apr_read_type_e',
  -        'name' => 'block'
  -      },
  -      {
  -        'type' => 'apr_off_t',
  -        'name' => 'readbytes'
  -      }
       ]
     },
     {
  
  
  
  1.2       +2 -2      modperl-2.0/t/filter/TestFilter/both_str_con_add.pm
  
  Index: both_str_con_add.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/both_str_con_add.pm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- both_str_con_add.pm       24 Jan 2003 07:39:28 -0000      1.1
  +++ both_str_con_add.pm       25 Jan 2003 03:08:05 -0000      1.2
  @@ -25,9 +25,9 @@
       return Apache::OK;
   }
   sub in_filter {
  -    my($filter, $bb, $mode, $block, $readbytes) = @_;
  +    my $filter = shift;
   
  -    while ($filter->read($mode, $block, $readbytes, my $buffer, 1024)) {
  +    while ($filter->read(my $buffer, 1024)) {
           $filter->print(lc $buffer);
       }
   
  
  
  
  1.2       +2 -2      modperl-2.0/t/filter/TestFilter/both_str_rec_add.pm
  
  Index: both_str_rec_add.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/both_str_rec_add.pm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- both_str_rec_add.pm       24 Jan 2003 07:39:28 -0000      1.1
  +++ both_str_rec_add.pm       25 Jan 2003 03:08:05 -0000      1.2
  @@ -21,9 +21,9 @@
   }
   
   sub in_filter {
  -    my($filter, $bb, $mode, $block, $readbytes) = @_;
  +    my $filter = shift;
   
  -    while ($filter->read($mode, $block, $readbytes, my $buffer, 1024)) {
  +    while ($filter->read(my $buffer, 1024)) {
           $filter->print(lc $buffer);
       }
   
  
  
  
  1.3       +2 -2      modperl-2.0/t/filter/TestFilter/in_str_consume.pm
  
  Index: in_str_consume.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/in_str_consume.pm,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- in_str_consume.pm 19 Jan 2003 23:15:48 -0000      1.2
  +++ in_str_consume.pm 25 Jan 2003 03:08:05 -0000      1.3
  @@ -23,7 +23,7 @@
   use Apache::Const -compile => qw(OK M_POST);
   
   sub handler {
  -    my($filter, $bb, $mode, $block, $readbytes) = @_;
  +    my $filter = shift;
   
       my $ctx = $filter->ctx;
   
  @@ -33,7 +33,7 @@
           # brigades because the core input filter will split data in
           # 8kb chunks per brigade and we have sent 11k of data (1st bb:
           # 8kb, 2nd bb: ~3kb)
  -        my $len = $filter->read($mode, $block, $readbytes, my $buffer, 1024);
  +        my $len = $filter->read(my $buffer, 1024);
           #warn "FILTER READ: $len bytes\n";
           $filter->print("read just the first 1024b from the first brigade");
   
  
  
  
  1.2       +2 -2      modperl-2.0/t/filter/TestFilter/in_str_lc.pm
  
  Index: in_str_lc.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/in_str_lc.pm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- in_str_lc.pm      15 Jan 2003 06:19:25 -0000      1.1
  +++ in_str_lc.pm      25 Jan 2003 03:08:05 -0000      1.2
  @@ -8,9 +8,9 @@
   use Apache::Const -compile => qw(OK M_POST);
   
   sub handler {
  -     my($filter, $bb, $mode, $block, $readbytes) = @_;
  +    my $filter = shift;
   
  -    while ($filter->read($mode, $block, $readbytes, my $buffer, 1024)) {
  +    while ($filter->read(my $buffer, 1024)) {
           #warn "FILTER READ: $buffer\n";
           $filter->print(lc $buffer);
       }
  
  
  
  1.3       +3 -2      modperl-2.0/t/filter/TestFilter/in_str_msg.pm
  
  Index: in_str_msg.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/in_str_msg.pm,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- in_str_msg.pm     15 Jan 2003 06:47:15 -0000      1.2
  +++ in_str_msg.pm     25 Jan 2003 03:08:05 -0000      1.3
  @@ -17,11 +17,12 @@
   my $to_url = '/TestFilter::in_str_msg::response';
   
   sub handler : FilterConnectionHandler {
  -    my($filter, $bb, $mode, $block, $readbytes) = @_;
  +    my $filter = shift;
  +
       #warn "FILTER CALLED\n";
       my $ctx = $filter->ctx;
   
  -    while ($filter->read($mode, $block, $readbytes, my $buffer, 1024)) {
  +    while ($filter->read(my $buffer, 1024)) {
           #warn "FILTER READ: $buffer\n";
           unless ($ctx) {
               $buffer =~ s|GET $from_url|GET $to_url|;
  
  
  
  1.2       +2 -2      modperl-2.0/t/filter/TestFilter/in_str_sandwich.pm
  
  Index: in_str_sandwich.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/filter/TestFilter/in_str_sandwich.pm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- in_str_sandwich.pm        15 Jan 2003 06:19:25 -0000      1.1
  +++ in_str_sandwich.pm        25 Jan 2003 03:08:05 -0000      1.2
  @@ -11,7 +11,7 @@
   use Apache::Const -compile => qw(OK M_POST);
   
   sub handler {
  -    my($filter, $bb, $mode, $block, $readbytes) = @_;
  +    my $filter = shift;
   
       my $ctx = $filter->ctx;
   
  @@ -20,7 +20,7 @@
           $filter->ctx(1);
       }
   
  -    while ($filter->read($mode, $block, $readbytes, my $buffer, 1024)) {
  +    while ($filter->read(my $buffer, 1024)) {
           #warn "FILTER READ: $buffer\n";
           $filter->print($buffer);
       }
  
  
  


Reply via email to