The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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