use Net::TFTPd 0.03 qw(%OPCODES);
use IO::Socket::INET;
use Data::Dump qw/dump/;
+use store;
use server;
sub tftp_request {
my $request = shift;
- server->refresh;
-
warn 'request: ', dump( $request ) if $debug;
- config::for_ip( $request->{_REQUEST_}->{PeerAddr} );
+ my $ip = $request->{_REQUEST_}->{PeerAddr};
+ config::for_ip( $ip );
if ( $request->{RootDir} ne $dir ) {
$request->{RootDir} = $dir;
}
my $file = $request->{'_REQUEST_'}{'FileName'};
- # received request
- print $OPCODES{$request->{'_REQUEST_'}{'OPCODE'}}, " $file\n";
+ my $opcode = $OPCODES{$request->{'_REQUEST_'}{'OPCODE'}};
+
+ my $audit = {
+ ip => $ip,
+ opcode => $opcode,
+ path => $file,
+ state => 'start',
+ };
+ store::audit( $opcode, $audit );
progress_bar::start;
# process the request
if( $request->processRQ() ) {
- print "\nOK completed $file ", -s "$dir/$file", "\n";
+ my $size = -s "$dir/$file";
+ $audit->{state} = 'finish';
+ $audit->{size} = $size;
+ store::audit( $opcode, $audit );
} else {
- print "ERROR ", Net::TFTPd->error, "\n";
- $request->processRQ();
+ $audit->{state} = 'error';
+ $audit->{error} = Net::TFTPd->error;
+ store::audit( $opcode, $audit );
}
}
CallBack => \&transfer_status,
# BlkSize => 8192,
-# BlkSize => 512,
- BlkSize => 1456, # IBM GE seems to be picky
+ BlkSize => 512, # Dell's RAC doesn't like bigger packets
+# BlkSize => 1456, # IBM GE seems to be picky
Debug => 99,
%params, # merge user parameters
_UDPSERVER_ => $udpserver,
warn 'listener: ',dump( $listener ) if $debug;
- printf "TFTP listen %s:%d timeout: %d dir: $dir\n",
- $listener->{LocalAddr},
- $listener->{LocalPort},
- $listener->{Timeout};
+ store::audit( 'start', {
+ addr => $listener->{LocalAddr},
+ port => $listener->{LocalPort},
+ timeout => $listener->{Timeout},
+ params => { %params },
+ });
while(1) {
# wait for any request (RRQ or WRQ)
if(my $request = $listener->waitRQ()) {
+ server->refresh;
tftp_request $request;
} elsif ( my $error = Net::TFTPd->error ) {
warn $error;