Extracted from httpd-2.x's util_filter.h:
053 /** The filter should return at most one line of CRLF data.
054 * (If a potential line is too long or no CRLF is found, the
055 * filter may return partial data).
056 */
057 AP_MODE_GETLINE,
What that means is: at this point in the current getline loop in
Apache/Qpsmtpd.pm :
while (1) {
my $rc = $c->input_filters->get_brigade($bb,
Apache2::Const::MODE_GETLINE);
$rc can be 0 (APR::Const::SUCCESS) with the brigade $bb containing
an incomplete line (ie. no "\n" char at the end).
The loop currently being used by the ASF is at
http://svn.apache.org/repos/asf/infrastructure/qpsmtpd/lib/Apache/Qpsmtpd.pm
FWIW, here's a simpler version using $bb->flatten instead of the inner
loop. (I'm also not sure why APR::Const::EOF shouldn't be treated as an
exception):
==================================================
my $data = "";
while (1) {
my $rc = $c->input_filters->get_brigade($bb,
Apache2::Const::MODE_GETLINE);
die APR::Error::strerror($rc) unless $rc == APR::Const::SUCCESS;
$bb->flatten(my $newdata); # $newdata WILL be defined by flatten()
$bb->cleanup;
$data .= $newdata;
last if substr($newdata, length($newdata) - 1) eq "\012";
}
return $data;
==================================================
I hope this helps.
--
Joe Schaefer