}
}
-# LIST SUBSCRIPTIONS not supported
+# LIST SUBSCRIPTIONS, DISTRIB.PATS are not supported
sub cmd_list ($;$$) {
my ($self, @args) = @_;
if (scalar @args) {
my $arg = shift @args;
$arg =~ tr/A-Z./a-z_/;
$arg = "list_$arg";
- return '503 function not performed' if $DISABLED{$arg};
+ return r501 if $DISABLED{$arg};
$arg = eval {
no strict 'refs';
sub hdr_val ($$) {
my ($r, $header) = @_;
- $header = lc $header;
- return $r->[3] if ($header eq 'bytes');
- return $r->[4] if ($header eq 'lines');
+ return $r->[3] if $header =~ /\A:?bytes\z/i;
+ return $r->[4] if $header =~ /\A:?lines\z/i;
$r = $r->[2]->header_obj->header($header);
defined $r or return;
$r =~ s/[\r\n\t]+/ /sg;
sub event_read {
my ($self) = @_;
use constant LINE_MAX => 512; # RFC 977 section 2.3
- my $line;
my $r = 1;
-again:
+
+ my $buf = $self->read(LINE_MAX) or return $self->close;
+ $self->{rbuf} .= $$buf;
while ($r > 0 && $self->{rbuf} =~ s/\A\s*([^\r\n]+)\r?\n//) {
- $line = $1;
+ my $line = $1;
my $t0 = now();
$r = eval { $self->process_line($line) };
my $d = $self->{long_res} ?
' deferred['.fileno($self->{sock}).']' : '';
out($self, "$line - %0.6f$d", now() - $t0);
}
- unless (defined $line) {
- my $buf = $self->read(LINE_MAX) or return $self->close;
- $self->{rbuf} .= $$buf;
- goto again;
- }
return $self->close if $r < 0;
my $len = length($self->{rbuf});
$rv;
}
+sub busy () {
+ my ($self) = @_;
+ ($self->{rbuf} ne '' || $self->{long_res} || $self->{write_buf_size});
+}
+
1;