diff options
author | Eric Wong <e@yhbt.net> | 2020-07-05 23:27:20 +0000 |
---|---|---|
committer | Eric Wong <e@yhbt.net> | 2020-07-06 20:01:15 +0000 |
commit | 20f0d11445fc1207bc3a91e3f47abb4ba1b57256 (patch) | |
tree | 213c1850bc35a6a4ea366a7bacbd50052ac59ae7 /lib | |
parent | cde937e3bf4c0ad343479f9711a201494e4f36ee (diff) | |
download | public-inbox-20f0d11445fc1207bc3a91e3f47abb4ba1b57256.tar.gz |
Most of our plain-text responses are config files big enough to warrant compression.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/WwwText.pm | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/PublicInbox/WwwText.pm b/lib/PublicInbox/WwwText.pm index b23a415e..508005fb 100644 --- a/lib/PublicInbox/WwwText.pm +++ b/lib/PublicInbox/WwwText.pm @@ -10,6 +10,8 @@ use PublicInbox::Linkify; use PublicInbox::WwwStream; use PublicInbox::Hval qw(ascii_html); use URI::Escape qw(uri_escape_utf8); +use PublicInbox::GzipFilter qw(gzf_maybe); +use Compress::Raw::Zlib qw(Z_FINISH Z_OK); our $QP_URL = 'https://xapian.org/docs/queryparser.html'; our $WIKI_URL = 'https://en.wikipedia.org/wiki'; my $hl = eval { @@ -35,14 +37,23 @@ sub get_text { $code = 404; $txt = "404 Not Found ($key)\n"; } + my $env = $ctx->{env}; if ($raw) { - $hdr->[3] = bytes::length($txt); - return [ $code, $hdr, [ $txt ] ] + my $body; + if (my $gzf = $code == 200 ? gzf_maybe($hdr, $env) : undef) { + my $zbuf = $gzf->translate($txt); + undef $txt; + $body = [ $zbuf .= $gzf->translate(undef) ]; + } else { + $body = [ $txt ]; + } + $hdr->[3] = bytes::length($body->[0]); + return [ $code, $hdr, $body ] } # enforce trailing slash for "wget -r" compatibility if (!$have_tslash && $code == 200) { - my $url = $ctx->{-inbox}->base_url($ctx->{env}); + my $url = $ctx->{-inbox}->base_url($env); $url .= "_/text/$key/"; return [ 302, [ 'Content-Type', 'text/plain', |