[svn:qpsmtpd] rev 423 - trunk/lib/Qpsmtpd

[email protected] 20 May 2005 12:39:30 -0000
Newsgroups perl.cvs.qpsmtpd
Message-ID <[email protected]>
Author: msergeant
Date: Fri May 20 05:39:29 2005
New Revision: 423

Modified:
   trunk/lib/Qpsmtpd/Transaction.pm
Log:
Fix for in-memory code writing headers twice


Modified: trunk/lib/Qpsmtpd/Transaction.pm
==============================================================================
--- trunk/lib/Qpsmtpd/Transaction.pm	(original)
+++ trunk/lib/Qpsmtpd/Transaction.pm	Fri May 20 05:39:29 2005
@@ -64,6 +64,17 @@ sub notes {
 sub set_body_start {
     my $self = shift;
     $self->{_body_start} = $self->body_current_pos;
+    if ($self->{_body_file}) {
+               $self->{_header_size} = $self->{_body_start};
+    }
+    else {
+        $self->{_header_size} = 0;
+        if ($self->{_body_array}) {
+            foreach my $line (@{ $self->{_body_array} }) {
+                $self->{_header_size} += length($line);
+            }
+        }
+   }
 }
 
 sub body_start {
@@ -123,6 +134,7 @@ sub body_write {
         foreach my $line (@{ $self->{_body_array} }) {
           $self->{_body_file}->print($line) or die "Cannot print to temp file: $!";
         }
+        $self->{_body_start} = $self->{_header_size};
       }
       $self->{_body_array} = undef;
     }
@@ -160,6 +172,7 @@ sub body_getline {
   }
   else {
     return unless $self->{_body_array};
+    $self->{_body_current_pos} ||= 0;
     my $line = $self->{_body_array}->[$self->{_body_current_pos}];
     $self->{_body_current_pos}++;
     return $line;