NAME

Mojo::TFTPd - Trivial File Transfer Protocol daemon

VERSION

0.04

SYNOPSIS

use Mojo::TFTPd;
my $tftpd = Mojo::TFTPd->new;

$tftpd->on(error => sub ($tftpd, $error) { warn "TFTPd: $error\n" });

$tftpd->on(rrq => sub ($tftpd, $connection) {
  open my $FH, '<', $connection->file;
  $connection->filehandle($FH);
  $connection->filesize(-s $connection->file);
});

$tftpd->on(wrq => sub ($tftpd, $connection) {
  open my $FH, '>', '/dev/null';
  $connection->filehandle($FH);
});

$tftpd->on(finish => sub ($tftpd, $connection, $error) {
  warn "Connection: $error\n" if $error;
});

$tftpd->start;
$tftpd->ioloop->start unless $tftpd->ioloop->is_running;

DESCRIPTION

This module implements a server for the 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 which is referred to in this document is an instance of Mojo::TFTPd::Connection.

EVENTS

error

$tftpd->on(error => sub ($tftpd, $str) { ... });

This event is emitted when something goes wrong: Fail to "listen" to socket, read from socket or other internal errors.

finish

$tftpd->on(finish => sub ($tftpd, $connection, $error) { ... });

This event is emitted when the Mojo::TFTPd::Connection finish, either successfully or due to an error. $error will be an empty string on success.

rrq

$tftpd->on(rrq => sub ($tftpd, $connection) { ... });

This event is emitted when a new read request arrives from a client. The callback should set "filehandle" in Mojo::TFTPd::Connection or the connection will be dropped. "filehandle" in Mojo::TFTPd::Connection can also be a Mojo::Asset reference.

wrq

$tftpd->on(wrq => sub ($tftpd, $connection) { ... });

This event is emitted when a new write request arrives from a client. The callback should set "filehandle" in Mojo::TFTPd::Connection or the connection will be dropped. "filehandle" in Mojo::TFTPd::Connection can also be a Mojo::Asset reference.

ATTRIBUTES

connection_class

$str = $tftpd->connection_class;
$tftpd = $tftpd->connection_class($str);

Used to set a custom connection class. Defaults to Mojo::TFTPd::Connection.

inactive_timeout

$num = $tftpd->inactive_timeout;
$tftpd = $tftpd->inactive_timeout(15);

How long a connection can stay idle before being dropped. Default is 15 seconds.

ioloop

$loop = $tftpd->ioloop;
$tftpd = $tftpd->ioloop(Mojo::IOLoop->new);

Holds an instance of Mojo::IOLoop.

listen

$str = $tftpd->listen;
$tftpd = $tftpd->listen('127.0.0.1:69');
$tftpd = $tftpd->listen('tftp://*:69');

The bind address for this server.

max_connections

$int = $tftpd->max_connections;
$tftpd = $tftpd->max_connections(1000);

How many concurrent connections this server can handle. Default to 1000.

retransmit

$int = $tftpd->retransmit;
$tftpd = $tftpd->retransmit(1);

How many times the server should try to retransmit the last packet on timeout before dropping the connection. Default is 0 (disable retransmits)

retransmit_timeout

$num = $tftpd->retransmit_timeout;
$tftpd = $tftpd->retransmit_timeout(2);

How long a connection can stay idle before last packet being retransmitted. Default is 2 seconds.

retries

$int = $tftpd->retries;
$tftpd = $tftpd->retries(1);

How many times the server should try to send ACK or DATA to the client before dropping the connection.

METHODS

start

$tftpd = $tftpd->start;

Starts listening to the address and port set in "Listen". The "error" event will be emitted if the server fail to start.

AUTHOR

Svetoslav Naydenov - harryl@cpan.org

Jan Henning Thorsen - jhthorsen@cpan.org