X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=blobdiff_plain;f=lib%2FPublicInbox%2FHTTP.pm;h=10e6d6a43b518115c7eece8a5f11e67ebe613fb2;hp=bc10814e12634c6b21ab693ed14ba0cf8437f1ec;hb=b6f480ed58abc5ae2a426ef4f792621b9d3cf283;hpb=703490825ebf9e22e30ab79063a81f8476ad2a0c diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm index bc10814e..10e6d6a4 100644 --- a/lib/PublicInbox/HTTP.pm +++ b/lib/PublicInbox/HTTP.pm @@ -10,13 +10,15 @@ package PublicInbox::HTTP; use strict; use warnings; -use base qw(Danga::Socket); +use base qw(PublicInbox::DS); use fields qw(httpd env rbuf input_left remote_addr remote_port forward pull); +use bytes (); # only for bytes::length use Fcntl qw(:seek); use Plack::HTTPParser qw(parse_http_request); # XS or pure Perl use HTTP::Status qw(status_message); use HTTP::Date qw(time2str); use IO::Handle; +require PublicInbox::EvCleanup; use constant { CHUNK_START => -1, # [a-f0-9]+\r\n CHUNK_END => -2, # \r\n @@ -62,7 +64,7 @@ sub new ($$$) { $self; } -sub event_read { # called by Danga::Socket +sub event_read { # called by PublicInbox::DS my ($self) = @_; return event_read_input($self) if defined $self->{env}; @@ -147,7 +149,7 @@ sub app_dispatch { sysseek($input, 0, SEEK_SET) or die "BUG: psgi.input seek failed: $!"; } - # note: NOT $self->{sock}, we want our close (+ Danga::Socket::close), + # note: NOT $self->{sock}, we want our close (+ PublicInbox::DS::close), # to do proper cleanup: $env->{'psgix.io'} = $self; # only for ->close my $res = Plack::Util::run_app($self->{httpd}->{app}, $env); @@ -255,7 +257,7 @@ sub getline_cb ($$$) { if ($forward) { my $buf = eval { $forward->getline }; if (defined $buf) { - $write->($buf); # may close in Danga::Socket::write + $write->($buf); # may close in PublicInbox::DS::write unless ($self->{closed}) { my $next = $self->{pull}; if ($self->{write_buf_size}) { @@ -318,11 +320,9 @@ sub more ($$) { if (defined $n) { my $nlen = length($_[1]) - $n; return 1 if $nlen == 0; # all done! - eval { $_[1] = substr($_[1], $n, $nlen) }; - if ($@) { # modification of read-only value: - return $self->write(substr($_[1], $n, $nlen)); - } - # fall through to normal write: + + # PublicInbox::DS::write queues the unwritten substring: + return $self->write(substr($_[1], $n, $nlen)); } } $self->write($_[1]); @@ -466,7 +466,7 @@ sub quit { $self->close; } -# callbacks for Danga::Socket +# callbacks for PublicInbox::DS sub event_hup { $_[0]->close } sub event_err { $_[0]->close }