#!/usr/bin/perl
#
# This file is part of POE-Component-Client-SimpleFTP
#
# This software is copyright (c) 2011 by Apocalypse.
#
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#
use strict; use warnings;
package FEATClient;
# a simple client to list the features a ftpd supports
#sub POE::Component::Client::SimpleFTP::DEBUG () { 1 };
use MooseX::POE::SweetArgs;
use POE::Component::Client::SimpleFTP;
with qw(
MooseX::Getopt
);
has hostname => (
isa => 'Str',
is => 'ro',
required => 1,
);
has port => (
isa => 'Int',
is => 'ro',
default => 21,
);
has usetls => (
isa => 'Bool',
is => 'ro',
default => 0,
);
has username => (
isa => 'Str',
is => 'ro',
required => 1,
);
has password => (
isa => 'Str',
is => 'ro',
required => 1,
);
# our ftp object
has ftp => (
traits => ['NoGetopt'],
isa => 'POE::Component::Client::SimpleFTP',
is => 'rw',
weak_ref => 1,
init_arg => undef,
);
sub START {
my $self = shift;
$self->ftp( POE::Component::Client::SimpleFTP->new(
remote_addr => $self->hostname,
remote_port => $self->port,
username => $self->username,
password => $self->password,
( $self->usetls ? ( tls_cmd => 1, tls_data => 1 ) : () ),
) );
# now we just wait for the connection to succeed/fail
return;
}
event _child => sub { return };
event connected => sub {
my $self = shift;
# do nothing hah
return;
};
event connect_error => sub {
my( $self, $code, $reply ) = @_;
die "CONNECT error: $code $reply";
return;
};
event login_error => sub {
my( $self, $code, $reply ) = @_;
die "LOGIN error: $code $reply";
return;
};
event authenticated => sub {
my $self = shift;
# Okay, get the feature list
$self->ftp->yield( 'features' );
return;
};
event features_error => sub {
my( $self, $code, $reply ) = @_;
die "FEAT error: $code $reply";
return;
};
event features => sub {
my( $self, $code, $reply ) = @_;
# done with the feature request
print "$reply\n";
$self->ftp->yield( 'quit' );
return;
};
# run the client!
my $ftp = FEATClient->new_with_options;
POE::Kernel->run;