diff options
author | Eric Wong <e@80x24.org> | 2021-10-25 02:45:52 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-10-25 08:16:59 +0000 |
commit | ead71b8c387f0748338a4add37eeb437a14b02d8 (patch) | |
tree | 0cbe911f25039e743c189d567ac0dfc8190bd61f /lib/PublicInbox/GzipFilter.pm | |
parent | b5454f38b1903735594e3c253617a66dd267062f (diff) | |
download | public-inbox-ead71b8c387f0748338a4add37eeb437a14b02d8.tar.gz |
This will let us modify the response header later to set a proper charset for Content-Type when displaying raw messages. Cc: Thomas Weißschuh <thomas@t-8ch.de>
Diffstat (limited to 'lib/PublicInbox/GzipFilter.pm')
-rw-r--r-- | lib/PublicInbox/GzipFilter.pm | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/PublicInbox/GzipFilter.pm b/lib/PublicInbox/GzipFilter.pm index c6216171..c4858a97 100644 --- a/lib/PublicInbox/GzipFilter.pm +++ b/lib/PublicInbox/GzipFilter.pm @@ -54,7 +54,7 @@ sub psgi_response { $http->{forward} = $self; sub { my ($wcb) = @_; # -httpd provided write callback - $self->{http_out} = $wcb->([$code, $res_hdr]); + $self->{wcb_args} = [ $code, $res_hdr, $wcb ]; $self->can('async_next')->($http); # start stepping }; } else { # generic PSGI code path @@ -114,9 +114,17 @@ sub translate ($$) { } } +sub http_out ($) { + my ($self) = @_; + $self->{http_out} //= do { + my $args = delete $self->{wcb_args} // return undef; + pop(@$args)->($args); # $wcb->([$code, $hdr_ary]) + }; +} + sub write { # my $ret = bytes::length($_[1]); # XXX does anybody care? - $_[0]->{http_out}->write(translate($_[0], $_[1])); + http_out($_[0])->write(translate($_[0], $_[1])); } # similar to ->translate; use this when we're sure we know we have @@ -145,10 +153,9 @@ sub zflush ($;$) { sub close { my ($self) = @_; - if (my $http_out = delete $self->{http_out}) { - $http_out->write(zflush($self)); - $http_out->close; - } + my $http_out = http_out($self) // return; + $http_out->write(zflush($self)); + delete($self->{http_out})->close; } sub bail { |