X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FNNTP.pm;h=f4208f878d9cd7e8a091609b25f22badfd001f65;hb=4685b1d88ffe1f18334bfdd12977ece1fe9d11ce;hp=d6f315bab42a9ed7e0b8b607a3ba6cf01066ef55;hpb=77c66b4cdb1d52321ed3cb6352fe0b72312cbb71;p=public-inbox.git diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index d6f315ba..f4208f87 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -14,7 +14,7 @@ use PublicInbox::Git; require PublicInbox::EvCleanup; use Email::Simple; use POSIX qw(strftime); -PublicInbox::DS->import(qw(now)); +use PublicInbox::DS qw(now); use Digest::SHA qw(sha1_hex); use Time::Local qw(timegm timelocal); use constant { @@ -642,6 +642,11 @@ sub long_response ($$) { } elsif ($more) { # $self->{wbuf}: update_idle_time($self); + # COMPRESS users all share the same DEFLATE context. + # Flush it here to ensure clients don't see + # each other's data + $self->zflush; + # no recursion, schedule another call ASAP # but only after all pending writes are done my $wbuf = $self->{wbuf} ||= []; @@ -653,7 +658,8 @@ sub long_response ($$) { $long_cb = undef; res($self, '.'); out($self, " deferred[$fd] done - %0.6f", now() - $t0); - $self->requeue unless $self->{wbuf}; + my $wbuf = $self->{wbuf}; + $self->requeue unless $wbuf && @$wbuf; } }; $self->write($long_cb); # kick off! @@ -917,14 +923,15 @@ sub cmd_starttls ($) { # RFC 8054 sub cmd_compress ($$) { my ($self, $alg) = @_; - return '503 Only the DEFLATE is supported' if uc($alg) ne 'DEFLATE'; + return '503 Only DEFLATE is supported' if uc($alg) ne 'DEFLATE'; return r502 if $self->compressed || !$have_deflate; - res($self, '206 Compression active'); PublicInbox::NNTPdeflate->enable($self); $self->requeue; undef } +sub zflush {} # overridden by NNTPdeflate + sub cmd_xpath ($$) { my ($self, $mid) = @_; return r501 unless $mid =~ /\A<(.+)>\z/;