=head1 NAME
Mojo::TFTPd - Trivial File Transfer Protocol daemon
=head1 VERSION
0.01
=head1 SYNOPSIS
use Mojo::TFTPd;
my $tftpd = Mojo::TFTPd->new;
$tftpd->on(error => sub {
warn "TFTPd: $_[1]\n";
});
$tftpd->on(rrq => sub {
my($tftpd, $c) = @_;
open my $FH, '<', $c->file;
$c->filehandle($FH);
});
$tftpd->on(wrq => sub {
my($tftpd, $c) = @_;
open my $FH, '>', '/dev/null';
$c->filehandle($FH);
});
$self->on(finish => sub {
my($tftpd, $c, $error) = @_;
warn "Connection: $error\n" if $error;
});
$tftpd->start;
$tftpd->ioloop->start unless $tftpd->ioloop->is_running;
=head1 DESCRIPTION
This module implement a server for the
L<Trivial File Transfer Protocol|http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol>.
From Wikipedia:
Trivial File Transfer Protocol (TFTP) is a file transfer protocol notable
for its simplicity. It is generally used for automated transfer of
configuration or boot files between machines in a local environment.
The connection ($c) which is referred to in this document is an instance of
L<Mojo::TFTPd::Connection>.
=cut
=head1 EVENTS
=head2 error
$self->on(error => sub {
my($self, $str) = @_;
});
This event is emitted when something goes wrong: Fail to L</listen> to socket,
read from socket or other internal errors.
=head2 finish
$self->on(finish => sub {
my($self, $c, $error) = @_;
});
This event is emitted when the client finish, either successfully or due to an
error. C<$error> will be an empty string on success.
=head2 rrq
$self->on(rrq => sub {
my($self, $c) = @_;
});
This event is emitted when a new read request arrives from a client. The
callback should set L<Mojo::TFTPd::Connection/filehandle> or the connection
will be dropped.
=head2 wrq
$self->on(wrq => sub {
my($self, $c) = @_;
});
This event is emitted when a new write request arrives from a client. The
callback should set L<Mojo::TFTPd::Connection/filehandle> or the connection
will be dropped.
=head1 ATTRIBUTES
=head2 ioloop
Holds an instance of L<Mojo::IOLoop>.
=cut
=head2 listen
$str = $self->server;
$self->server("127.0.0.1:69");
$self->server("tftp://*:69"); # any interface
The bind address for this server.
=cut
=head2 max_connections
How many concurrent connections this server can handle. Default to 1000.
=cut
=head2 retries
How many times the server should try to send ACK or DATA to the client before
dropping the L<connection|Mojo::TFTPd::Connection>.
=cut
=head2 inactive_timeout
How long a L<connection|Mojo::TFTPd::Connection> can stay idle before
=cut
=head1 METHODS
=head2 start
Starts listening to the address and port set in L</Listen>. The L</error>
event wille be emitted if the server fail to start.
=cut
=head1 AUTHOR
Jan Henning Thorsen - C<jhthorsen@cpan.org>
=cut