--- lib/PXElator/tftpd.pm 2009/07/31 19:59:28 93 +++ lib/PXElator/tftpd.pm 2009/08/04 15:25:09 138 @@ -5,7 +5,6 @@ use Net::TFTPd 0.03 qw(%OPCODES); use Data::Dump qw/dump/; -use Module::Refresh; use server; @@ -22,25 +21,32 @@ return $path; } -STDERR->autoflush(1); +use progress_bar; sub transfer_status { - my $req = shift; - if( $req->{'_REQUEST_'}{'OPCODE'} eq $OPCODES{'RRQ'} ) { - printf STDERR "RRQ %s %u\/%u\r", map { $req->{_REQUEST_}->{$_} } ( 'FileName', 'LASTACK', 'LASTBLK' ); - } elsif ( $req->{'_REQUEST_'}{'OPCODE'} eq $OPCODES{'WRQ'} ) { + my $request = shift; + my $r = $request->{'_REQUEST_'} || die "no _REQUEST_ in ",dump( $request ); + + if( $r->{'OPCODE'} eq $OPCODES{'RRQ'} ) { + progress_bar::tick( $r->{FileName}, $r->{BlkSize} * $r->{LASTACK}, $r->{BlkSize} * $r->{LASTBLK} ); + } elsif ( $r->{'OPCODE'} eq $OPCODES{'WRQ'} ) { die "WRQ disabled"; - printf STDERR "WRQ: %u\/%u\n", $req->{'_REQUEST_'}{'LASTBLK'}, $req->{'_REQUEST_'}{'LASTACK'}; } else { - warn "IGNORED: ", dump( $req ); + warn "IGNORED: ", dump( $request ); } } +use config; + sub tftp_request { my $request = shift; + server->refresh; + warn 'request: ', dump( $request ) if $debug; + config::for_ip( $request->{_REQUEST_}->{PeerAddr} ); + if ( $request->{RootDir} ne $dir ) { $request->{RootDir} = $dir; warn "new root: $dir"; @@ -50,6 +56,8 @@ # received request print $OPCODES{$request->{'_REQUEST_'}{'OPCODE'}}, " $file\n"; + progress_bar::start; + # process the request if( $request->processRQ() ) { print "\nOK completed $file ", -s "$dir/$file", "\n"; @@ -88,13 +96,11 @@ while(1) { - Module::Refresh->refresh; - # wait for any request (RRQ or WRQ) if(my $request = $listener->waitRQ()) { tftp_request $request; - } else { - warn Net::TFTPd->error; + } elsif ( my $error = Net::TFTPd->error ) { + warn $error; } }