package Qpsmtpd::SMTP::Prefork; use Qpsmtpd::SMTP; use Qpsmtpd::Constants; @ISA = qw(Qpsmtpd::SMTP); sub dispatch { my $self = shift; my ($cmd) = lc shift; $self->{_counter}++; if ($cmd !~ /^(\w{1,12})$/ or !exists $self->{_commands}->{$1}) { $self->run_hooks("unrecognized_command", $cmd, @_); return 1; } $cmd = $1; if (1 or $self->{_commands}->{$cmd} and $self->can($cmd)) { my ($result) = eval { $self->$cmd(@_) }; if ($@ =~ /^disconnect_tcpserver/) { die "disconnect_tcpserver"; } elsif ($@) { $self->log(LOGERROR, "XX: $@") if $@; } return $result if defined $result; return $self->fault("command '$cmd' failed unexpectedly"); } return; }