X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=script%2Fpublic-inbox-httpd;h=a4dd809916c5116db301ec30c65f0919a48517ec;hb=a34e62ec1d84eafb67cc63532a383d15a18dcc4d;hp=9b869f906032ed8e090f60d3c92ca62792ab47de;hpb=b1d487f6024609908b9f195b2947a051615108f2;p=public-inbox.git diff --git a/script/public-inbox-httpd b/script/public-inbox-httpd index 9b869f90..a4dd8099 100755 --- a/script/public-inbox-httpd +++ b/script/public-inbox-httpd @@ -1,16 +1,21 @@ #!/usr/bin/perl -w -# Copyright (C) 2016-2019 all contributors +# Copyright (C) 2016-2021 all contributors # License: AGPL-3.0+ # # Standalone HTTP server for public-inbox. use strict; -use warnings; -use Plack::Util; +use v5.10.1; use PublicInbox::Daemon; -use PublicInbox::HTTP; -use PublicInbox::HTTPD; -use Plack::Builder; -my %httpds; +BEGIN { + for (qw(Plack::Builder Plack::Util)) { + eval("require $_") or die "E: Plack is required for $0\n"; + } + Plack::Builder->import; + require PublicInbox::HTTP; + require PublicInbox::HTTPD; +} + +my %httpds; # per-listen-FD mapping for HTTPD->{env}->{SERVER_} my $app; my $refresh = sub { if (@ARGV) { @@ -24,21 +29,6 @@ my $refresh = sub { my $www = PublicInbox::WWW->new; $www->preload; $app = builder { - # Perl 5.16.3 leaks in our "push" response code path - # (e.g. Qspawn) due to something in - # Plack::Util::response_cb, regardless of whether the - # client is sending Accept-Encoding:gzip requests. - # perl5180delta documents many leak fixes, so assume - # 5.18+ is safe for now and bump the check as-need: - $] >= 5.018000 and eval { - enable 'Deflater', - content_type => [ qw( - text/html - text/plain - application/atom+xml - )] - }; - eval { enable 'ReverseProxy' }; $@ and warn "Plack::Middleware::ReverseProxy missing,\n", @@ -48,12 +38,14 @@ my $refresh = sub { sub { $www->call(@_) }; }; } + %httpds = (); # invalidate cache }; PublicInbox::Daemon::run('0.0.0.0:8080', $refresh, - sub ($$$) { # post_accept - my ($client, $addr, $srv) = @_; + sub ($$$) { # Listener->{post_accept} + my ($client, $addr, $srv, $tls_wrap) = @_; my $fd = fileno($srv); - my $h = $httpds{$fd} ||= PublicInbox::HTTPD->new($srv, $app); + my $h = $httpds{$fd} //= + PublicInbox::HTTPD->new($srv, $app, $client); PublicInbox::HTTP->new($client, $addr, $h), });