NAME
`Net::Async::FTP' - use FTP with `IO::Async'
SYNOPSIS
use IO::Async::Loop;
use Net::Async::FTP;
my $loop = IO::Async::Loop->new();
my $ftp = Net::Async::FTP->new();
$loop->add( $ftp );
$ftp->connect(
host => "ftp.example.com",
)->then( sub {
$ftp->login(
user => "username",
pass => "password",
)
})->then( sub {
$ftp->retr(
path => "README.txt",
)
})->then( sub {
my ( $data ) = @_;
print "README.txt says:\n";
print $data;
})->get;
DESCRIPTION
This object class implements an asynchronous FTP client, for use in
IO::Async-based programs.
The code in this module is not particularly complete. It contains a
minimal implementation of a few FTP commands, not even the full minimal
set the RFC suggests all clients should support. I am releasing it
anyway, because it is still useful as it stands, and could easily
support extra commands being added if anyone would find it useful.
The (undocumented) `do_command()' method provides a generic base for the
currently-implemented commands, and would be the basis for new commands.
As they say so often in the open-source world; Patches Welcome.
CONSTRUCTOR
$ftp = Net::Async::FTP->new( %args )
This function returns a new instance of a `Net::Async::FTP' object. As
it is a subclass of `IO::Async::Stream' its constructor takes any
arguments for that class.
METHODS
$ftp->connect( %args ) ==> ()
Connects to the FTP server. Takes the following arguments:
host => STRING
Hostname of the server
service => STRING or INT
Optional. Service name or port number to connect to. If not
supplied, will use `ftp'.
family => INT
Optional. Socket family to use. Will default to whatever
`getaddrinfo()' returns if not supplied.
on_connected => CODE
Optional when returning a Future. Continuation to call when
connection is successful.
$on_connected->()
on_error => CODE
Optional when returning a Future. Continuation to call on an
error.
$on_error->( $message )
$ftp->login( %args ) ==> ()
Sends a `USER' and optionally `PASS' command. Takes the following
arguments:
user => STRING
Username for the `USER' command
pass => STRING
Password for the `PASS' command if required
on_login => CODE
Optional when returning a future. Continuation to invoke on
successful login.
$on_login->()
on_error => CODE
Optional when returning a future. Continuation to invoke on an
error.
$on_error->( $message )
$ftp->rename( %args ) ==> ()
Renames a file on the remote server. Takes the following arguments
oldpath => STRING
Path to file to rename
newpath => STRING
Desired new path for the file
on_done => CODE
Optional when returning a future. Continuation to invoke on
success.
$on_done->()
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
$ftp->dele( %args ) ==> ()
Deletes a file on the remote server. Takes the following arguments
path => STRING
Path to file to delete
on_done => CODE
Optional when returning a future. Continuation to invoke on
success.
$on_done->()
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
$ftp->list( %args ) ==> $list
Runs a `LIST' command on a path on the remote server; which requests
details on the file, or contents of the directory. Takes the following
arguments
path => STRING
Path to `LIST'
on_list => CODE
Optional when returning a future. Continuation to invoke on
success. Is passed a list of lines from the `LIST' result in a
single string.
$on_list->( $list )
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
The `list_parsed' method may be easier to use as it parses the lines.
$ftp->list_parsed( %args ) ==> @list
Runs a `LIST' command on a path on the remote server; and parse the
result lines. Takes the following arguments
path => STRING
Path to `LIST'
on_list => CODE
Optional when returning a future. Continuation to invoke on
success. Is passed a list of files from the `LIST' result, one
line per element.
$on_list->( @list )
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
The `@list' array will be passed a list of `HASH' references, each
formed like
name => STRING
The filename
type => STRING
A single character; `f' for files, `d' for directories
size => INT
The size in bytes
mtime => INT
The item's last modify timestamp, as a UNIX epoch time
mode => INT
The access mode, as a number
$ftp->nlist( %args ) ==> $list
Runs a `NLST' command on a path on the remote server; which requests a
list of filenames in a directory. Takes the following arguments
path => STRING
Path to `NLST'
on_list => CODE
Optional when returning a future. Continuation to invoke on
success. Is passed a list of names from the `NLST' result in a
single string.
$on_list->( $list )
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
The `namelist' method may be easier to use as it splits the lines.
$ftp->namelist( %args ) ==> @names
Runs a `NLST' command on a path on the remote server; which requests a
list of filenames in a directory. Takes the following arguments
path => STRING
Path to `NLST'
on_names => CODE
Optional when returning a future. Continuation to invoke on
success. Is passed a list of names from the `NLST' result in a
list, one name per entry
$on_name->( @names )
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
$ftp->retr( %args ) ==> $content
Retrieves a file on the remote server. Takes the following arguments
path => STRING
Path to file to retrieve
on_data => CODE
Optional when returning a future. Continuation to invoke on
success. Is passed the contents of the file as a single string.
$on_data->( $content )
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
$ftp->stat( %args ) ==> @stat
Runs a `STAT' command on a path on the remote server; which requests
details on the file, or contents of the directory. Takes the following
arguments
path => STRING
Path to `STAT'
on_stat => CODE
Optional when not returning a future. Continuation to invoke on
success. Is passed a list of lines from the `STAT' result, one
line per element.
$on_stat->( @stat )
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
The `stat_parsed' method may be easier to use as it parses the lines.
$ftp->stat_parsed( %args ) ==> @stat
Runs a `STAT' command on a path on the remote server; and parse the
result lines. Takes the following arguments
path => STRING
Path to `STAT'
on_stat => CODE
Optional when returning a future. Continuation to invoke on
success. Is passed a list of lines from the `STAT' result, one
line per element.
$on_stat->( @stat )
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
The `@stat' array will be passed a list of `HASH' references, each
formed like
name => STRING
The filename
type => STRING
A single character; `f' for files, `d' for directories
size => INT
The size in bytes
mtime => INT
The item's last modify timestamp, as a UNIX epoch time
mode => INT
The access mode, as a number
If `STAT' is invoked on a file, then `@stat' will contain a single
reference to represent it. If invoked on a directory, the `@stat' will
start with a reference about the directory itself (whose name will be
`.'), then one per item in the directory, in the order the server
returned the lines.
$ftp->stor( %args ) ==> ()
Stores a file on the remote server. Takes the following arguments
path => STRING
Path to file to store
data => STRING
New contents for the file
on_stored => CODE
Optional when returning a future. Continuation to invoke on
success.
$on_stored->()
on_error => CODE
Optional. Continuation to invoke on an error.
$on_error->( $message )
SEE ALSO
* http://tools.ieft.org/html/rfc959 - FILE TRANSFER PROTOCOL (FTP)
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>