cvs commit: qpsmtpd/lib/Qpsmtpd SelectServer.pm
[email protected] (Matt Sergeant)
| Newsgroups | perl.cvs.qpsmtpd |
|---|---|
| Message-ID | <[email protected]> |
cvsuser 03/11/06 07:41:03
Modified: lib/Qpsmtpd SelectServer.pm
Log:
unset indata{} after DATA is finished.
Revision Changes Path
1.6 +10 -1 qpsmtpd/lib/Qpsmtpd/SelectServer.pm
Index: SelectServer.pm
===================================================================
RCS file: /cvs/public/qpsmtpd/lib/Qpsmtpd/SelectServer.pm,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -w -r1.5 -r1.6
--- SelectServer.pm 3 Nov 2003 08:22:24 -0000 1.5
+++ SelectServer.pm 6 Nov 2003 15:41:03 -0000 1.6
@@ -42,6 +42,7 @@
# before quitting!
while (!$QUIT) {
foreach my $client ($select->can_read(1)) {
+ #print "Reading $client\n";
if ($client == $server) {
my $client_addr;
$client = $server->accept();
@@ -68,6 +69,7 @@
my $qp = Qpsmtpd::SelectServer->new();
$qp->client($qpclient);
$qp{$qpclient} = $qp;
+ $qp->log(1, "Connection number " . keys(%qp));
$inbuffer{$qpclient} = '';
$outbuffer{$qpclient} = '';
$ready{$qpclient} = [];
@@ -95,13 +97,16 @@
$inbuffer{$client} .= $data;
while ($inbuffer{$client} =~ s/^([^\r\n]*)\r?\n//) {
+ #print "<$1\n";
push @{$ready{$client}}, $1;
}
}
}
+ #print "Processing...\n";
foreach my $client (keys %ready) {
my $qp = $qp{$client};
+ #print "Processing $client = $qp\n";
foreach my $req (@{$ready{$client}}) {
if ($indata{$client}) {
$qp->data_line($req . CRLF);
@@ -115,6 +120,7 @@
delete $ready{$client};
}
+ #print "Writing...\n";
foreach my $client ($select->can_write(1)) {
next unless $outbuffer{$client};
#print "Writing to $client\n";
@@ -148,6 +154,7 @@
sub freeclient {
my $client = shift;
+ #print "Freeing client: $client\n";
delete $inbuffer{$client};
delete $outbuffer{$client};
delete $ready{$client};
@@ -207,8 +214,9 @@
sub disconnect {
my $self = shift;
- $self->SUPER::disconnect(@_);
+ #print "Disconnecting\n";
$self->{__quitting} = 1;
+ $self->SUPER::disconnect(@_);
}
sub data {
@@ -231,6 +239,7 @@
if ($_ eq ".\r\n") {
$self->log(6, "max_size: $self->{__max_size} / size: $self->{__size}");
+ delete $indata{$self->client()};
my $smtp = $self->connection->hello eq "ehlo" ? "ESMTP" : "SMTP";