[svn:qpsmtpd] rev 426 - branches/high_perf/lib/Qpsmtpd
[email protected] 23 May 2005 14:17:44 -0000
| Newsgroups | perl.cvs.qpsmtpd |
|---|---|
| Message-ID | <[email protected]> |
Author: msergeant
Date: Mon May 23 07:17:43 2005
New Revision: 426
Modified:
branches/high_perf/lib/Qpsmtpd/PollServer.pm
Log:
Don't set an alarm if in connect mode.
Make fault() not return anything otherwise we get a "1" output in the stream
Modified: branches/high_perf/lib/Qpsmtpd/PollServer.pm
==============================================================================
--- branches/high_perf/lib/Qpsmtpd/PollServer.pm (original)
+++ branches/high_perf/lib/Qpsmtpd/PollServer.pm Mon May 23 07:17:43 2005
@@ -89,6 +89,12 @@ sub respond {
return 1;
}
+sub fault {
+ my $self = shift;
+ $self->SUPER::fault(@_);
+ return;
+}
+
sub process_line {
my $self = shift;
my $line = shift || return;
@@ -97,14 +103,19 @@ sub process_line {
my ($pkg, $file, $line) = caller();
die "ALARM: ($self->{mode}) $pkg, $file, $line";
};
- my $prev = alarm(2); # must process a command in < 2 seconds
- eval { $self->_process_line($line) };
- alarm($prev);
- if ($@) {
- print STDERR "Error: $@\n";
- return $self->fault("command failed unexpectedly") if $self->{mode} eq 'cmd';
- return $self->fault("error processing data lines") if $self->{mode} eq 'data';
- return $self->fault("unknown error");
+ if( $self->{mode} eq 'connect' ) {
+ eval { $self->_process_line($line) }
+ }
+ else {
+ my $prev = alarm(2); # must process a command in < 2 seconds
+ eval { $self->_process_line($line) };
+ alarm($prev);
+ if ($@) {
+ print STDERR "Error: $@\n";
+ return $self->fault("command failed unexpectedly") if $self->{mode} eq 'cmd';
+ return $self->fault("error processing data lines") if $self->{mode} eq 'data';
+ return $self->fault("unknown error");
+ }
}
return;
}
@@ -114,13 +125,12 @@ sub _process_line {
my $line = shift;
if ($self->{mode} eq 'connect') {
- warn("Connection incoming\n");
+ $self->{mode} = 'cmd';
my $rc = $self->start_conversation;
if ($rc != DONE) {
$self->close;
return;
}
- $self->{mode} = 'cmd';
}
elsif ($self->{mode} eq 'cmd') {
$line =~ s/\r?\n//;