+ response_done($self, delete $self->{alive});
+}
+
+sub response_write {
+ my ($self, $env, $res) = @_;
+ my $alive = response_header_write($self, $env, $res);
+ if (defined(my $body = $res->[2])) {
+ if (ref $body eq 'ARRAY') {
+ if ($alive == 2) {
+ chunked_write($self, $_) for @$body;
+ } else {
+ identity_write($self, $_) for @$body;
+ }
+ response_done($self, $alive);
+ } else {
+ $self->{forward} = $body;
+ $self->{alive} = $alive;
+ getline_pull($self); # kick-off!
+ }
+ # these are returned to the calling application:
+ } elsif ($alive == 2) {
+ bless [ $self, $alive ], 'PublicInbox::HTTP::Chunked';
+ } else {
+ bless [ $self, $alive ], 'PublicInbox::HTTP::Identity';
+ }
+}
+
+sub input_tmpfile ($) {
+ my $input = tmpfile('http.input', $_[0]->{sock}) or return;
+ $input->autoflush(1);
+ $input;