AnyEvent-SMTP
view release on metacpan or search on metacpan
lib/AnyEvent/SMTP/Client.pm view on Meta::CPAN
while (!$mc or ( $mc > 0 and $CO_SLOT{$host}[0] < $mc )) {
if (my $cb = shift @{ $CO_SLOT{$host}[1] }) {
# somebody wants that slot
++$CO_SLOT{$host}[0];
++$ACTIVE;
++$ACTIVE{$host};
$cb->(AnyEvent::Util::guard {
--$ACTIVE;
--$ACTIVE{$host} > 0 or delete $ACTIVE{$host};
--$CO_SLOT{$host}[0];
#warn "Release slot (have $ACTIVE) by @{[ (caller)[1,2] ]}\n";
_slot_schedule $host;
});
} else {
# nobody wants the slot, maybe we can forget about it
delete $CO_SLOT{$host} unless $CO_SLOT{$host}[0];
last;
}
}
}
lib/AnyEvent/SMTP/Conn.pm view on Meta::CPAN
delete $self->{h};
$self->event( disconnect => () );
return;
}
sub command {
my $self = shift;
my $write = shift;
my %args = @_;
$args{ok} = '250' unless defined $args{ok};
$args{cb} or return $self->event( error => "no cb for command at @{[ (caller)[1,2] ]}" );
$self->{h} or return $args{cb}->(undef,"Not connected");
#my $i if 0;
#my $c = ++$i;
warn ">> $write " if $self->{debug};
$self->{h}->push_write("$write$NL");
#$self->{h}->timeout( $self->{select_timeout} );
warn "<? read " if $self->{debug} and $self->{debug} > 1;
$self->{h}->push_read( regex => $QRNL, sub {
local *__ANON__ = 'conn.command.read';
shift;
lib/AnyEvent/SMTP/Conn.pm view on Meta::CPAN
} else {
$args{cb}(undef, $line);
}
} );
}
sub line {
my $self = shift;
my %args = @_;
$args{ok} = '250' unless defined $args{ok};
$args{cb} or return $self->event( error => "no cb for command at @{[ (caller)[1,2] ]}" );
warn "<? read " if $self->{debug} and $self->{debug} > 1;
$self->{h}->push_read( regex => $QRNL, sub {
local *__ANON__ = 'conn.line.read';
shift;
for (@_) {
chomp;
substr($_,-1,1) = '' if substr($_, -1,1) eq "\015";
}
warn "<< @_ " if $self->{debug};
my $line = join '',@_;
lib/AnyEvent/SMTP/Conn.pm view on Meta::CPAN
sub reply {
my $self = shift;
$self->{h} or return warn "Not connected";
$self->{h}->push_write("@_$NL");
warn ">> @_ " if $self->{debug};
}
sub data {
my $self = shift;
my %args = @_;
$args{cb} or return $self->event( error => "no cb for command at @{[ (caller)[1,2] ]}" );
$self->{h} or return $args{cb}->(undef,"Not connected");
warn '<+ read till \r\n.\r\n ' if $self->{debug};
$self->{h}->unshift_read( regex => qr/((?:\015?\012|^)\.\015?\012)/, sub {
shift;
use bytes;
$args{cb}(substr($_[0],0,length($_[0]) - length ($1)))
} );
}
( run in 1.823 second using v1.01-cache-2.11-cpan-1e74a51a04c )