Loading ...
Sorry, an error occurred while loading the content.

67539Re: bucketbrigades with html filter

Expand Messages
  • eps com estem
    Oct 20 11:16 AM
      Apparently i was not including the eos bucket in the new brigade.
      It seems to work:

      if ($b->is_eos) {

      $this->my_function(\$f->ctx->{html},$f->r,$f->c);

      #new bucket brigade to be filled with final modified bucket
      my $nbb = APR::Brigade->new($f->c->pool,$f->c->bucket_alloc);

      #new bucket, a unique and big bucket
      my $nb = APR::Bucket->new($bb->bucket_alloc,$f->ctx->{html});

      #insert the new bucket and the eos bucket
      $nbb->insert_tail($nb);
      $nbb->insert_tail($b);

      #and pass the brigade, which is not going to be parsed by this handler
      $rv = $f->next->pass_brigade($nbb);
      last;
      }


      Before this function i was not worrying about the possibility to have broken tags in this
      handler. I say this because perhaps it is me, but i think to observe that now the output
      is appreciably slower.

      What's your opinion about to create a big bucket? As i understand, buckets were indeed
      created to manage small pieces of info. I am doing the against. Is it very inefficient? Do
      you suggest me to work on a streaming-approach?



      >With the reading of Apache_Clean module (which i see is streamed-oriented) and with ideas
      >of Ambrosino, i am with this:
      >sub handler : FilterRequestHandler {
      >my($f, $bb) = @_;
      >my $rv;
      >unless ($f->ctx) {
      >$f->r->headers_out->unset('Content-Length');
      >$f->ctx({html => ''});
      >}
      >while (!$bb->is_empty) {
      >my $b = $bb->first;
      >$b->remove;
      >if ($b->read(my $data)) {
      >$f->ctx->{html} .= $data;
      >}
      >if ($b->is_eos) {
      >$this->MYFUNCTION(\$f->ctx->{html},$f->r,$f->c);
      >#new bucket brigade to be filled with modified buckets
      >my $nbb = APR::Brigade->new($f->c->pool,$f->c->bucket_alloc);
      >#new bucket, a unique and big bucket, is it efficient?
      >$b = APR::Bucket->new($bb->bucket_alloc,$f->ctx->{html});
      >$nbb->insert_tail($b);
      >$rv = $f->next->pass_brigade($nbb);
      >last;
      >}
      >}
      >return $rv unless $rv == APR::Const::SUCCESS;
      >Apache2::Const::OK;
      >}


      ---------------------------------------------------------
      Juega y ll�vate una PS2 two: http://juegos.ya.com/consolas_y_pc/2005/09/concurso-ps2.html
      Ya.com ADSL 2MB + Llamadas 24 horas: desde 26,95 �/mes + IVA. Navega y habla de forma ilimitada. Sin compromiso de permanencia. http://acceso.ya.com/ADSLllamadas/2mb
    • Show all 7 messages in this topic