Hi Joe,

> Largely depends on how httpd implements SSI I think- if they
> use sendfile then the bucket isn't there for good reason.
> Have you considered driving the output filter chain yourself,
> that way *you* can put an EOS bucket on the first brigade you
> build and pass to ap_pass_brigade.  That'd be the way I'd
> go rather than hoping httpd includes your patch (essentially
> implement ap_send_fd in perl).

I don't think Apache uses ap_send_fd at all (verified by a grep), and
mentioned here:

    http://www.gossamer-threads.com/lists/apache/dev/64653#64653

Also, I was certainly thrown off by docs that suggested with apache 2,
it "just worked", i.e.:

    
http://perl.apache.org/docs/2.0/user/porting/compat.html#C____r_E_gt_set_byterange___

and a few mailing lists posts. Once I sort this out, will put a doc
patch back to make it clear. =)

Would it be worth implementing the ap_send_fd code in 
xs/Apache2/RequestIO/Apache2__RequestIO.h
with the eos bucket there? I think it would be really nice if range
requests "just worked" out of the box. =)

If patching mod_perl/apache doesn't make sense (and it may not, still
not 100% about implications of having the eos bucket in ap_send_fd /
requestio sendfile, or the reason for the check for it in range requests),
can you provide a pointer on how to do this with filters?

i.e. can I do something like:

sub handler {
    my $r = shift;
    $r->sendfile('/tmp/video.mp4');
    $r->add_output_filter(\&add_eos);
    return Apache2::Const::OK;
}

sub add_eos {
    my ($f, $bb) = @_;
    my $ba = $bb->bucket_alloc;
    my $b = APR::Bucket::eos_create($ba);
    $bb->insert_tail($b);
    my $rv = $f->next->pass_brigade($bb);
    return $rv unless $rv == APR::Const::SUCCESS;
    return Apache2::Const::OK;
}

Well, I can't as it doesn't work, but am I on the right track? =)

Cheers,

Alex


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@perl.apache.org
For additional commands, e-mail: dev-h...@perl.apache.org

Reply via email to