/[pxelator]/lib/PXElator/tftpd.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /lib/PXElator/tftpd.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 138 by dpavlin, Tue Aug 4 15:25:09 2009 UTC revision 207 by dpavlin, Wed Aug 12 22:56:45 2009 UTC
# Line 4  use warnings; Line 4  use warnings;
4  use strict;  use strict;
5    
6  use Net::TFTPd 0.03 qw(%OPCODES);  use Net::TFTPd 0.03 qw(%OPCODES);
7    use IO::Socket::INET;
8  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
9    use CouchDB;
10    
11  use server;  use server;
12    
# Line 45  sub tftp_request { Line 47  sub tftp_request {
47    
48          warn 'request: ', dump( $request ) if $debug;          warn 'request: ', dump( $request ) if $debug;
49    
50          config::for_ip( $request->{_REQUEST_}->{PeerAddr} );          my $ip = $request->{_REQUEST_}->{PeerAddr};
51            config::for_ip( $ip );
52    
53          if ( $request->{RootDir} ne $dir ) {          if ( $request->{RootDir} ne $dir ) {
54                  $request->{RootDir} = $dir;                  $request->{RootDir} = $dir;
# Line 53  sub tftp_request { Line 56  sub tftp_request {
56          }          }
57    
58          my $file = $request->{'_REQUEST_'}{'FileName'};          my $file = $request->{'_REQUEST_'}{'FileName'};
59          # received request          my $opcode = $OPCODES{$request->{'_REQUEST_'}{'OPCODE'}};
60          print $OPCODES{$request->{'_REQUEST_'}{'OPCODE'}}, " $file\n";  
61            CouchDB::audit('request', {
62                    ip => $ip,
63                    opcode => $opcode,
64                    file => $file,
65            });
66    
67          progress_bar::start;          progress_bar::start;
68    
69          # process the request          # process the request
70          if( $request->processRQ() ) {          if( $request->processRQ() ) {
71                  print "\nOK completed $file ", -s "$dir/$file", "\n";                  my $size = -s "$dir/$file";
72                    CouchDB::audit('completed', { file => $file, size => $size });
73          } else {          } else {
74                  print "ERROR ", Net::TFTPd->error, "\n";                  CouchDB::audit('error', { file => $file, error => Net::TFTPd->error });
75                  $request->processRQ();                  $request->processRQ();
76          }          }
77    
# Line 74  sub start { Line 83  sub start {
83    
84          warn 'start';          warn 'start';
85    
86          my $listener = Net::TFTPd->new(          # XXX we need to setup listener ourselfs because we need Reuse
87            my %params = (
88                    Proto => 'udp',
89    #               LocalAddr => $server::ip,
90    #               LocalAddr => '0.0.0.0',
91                    LocalPort => 69,
92                    Reuse => 1,
93            );
94    
95            my $udpserver = IO::Socket::INET->new(%params);
96            die "can't start server ",dump( \%params ), " $!" unless $udpserver;
97    
98            my $listener = bless {
99                  RootDir => $dir,                  RootDir => $dir,
100                  Writable => 0,  
101                  Timeout => 3600,                  ACKtimeout  => 4,
102                    ACKretries  => 4,
103                    Readable    => 1,
104                    Writable    => 0,
105                    Timeout => 3600,
106    
107                  CallBack => \&transfer_status,                  CallBack => \&transfer_status,
 #               LocalAddr => $server::ip,  
                 LocalAddr => '0.0.0.0',  
108  #               BlkSize => 8192,  #               BlkSize => 8192,
109  #               BlkSize => 512,  #               BlkSize => 512,
110                  BlkSize => 1456,        # IBM GE seems to be picky                  BlkSize => 1456,        # IBM GE seems to be picky
111                  Debug => 99,                  Debug => 99,
112          ) || die Net::TFTPd->error;                  %params, # merge user parameters
113                    _UDPSERVER_ => $udpserver,
114            }, 'Net::TFTPd';
115    
116          warn 'listener: ',dump( $listener ) if $debug;          warn 'listener: ',dump( $listener ) if $debug;
117    
118          printf "TFTP listen %s:%d timeout: %d dir: $dir\n",          CouchDB::audit( 'start', {
119                  $listener->{LocalAddr},                  addr => $listener->{LocalAddr},
120                  $listener->{LocalPort},                  port => $listener->{LocalPort},
121                  $listener->{Timeout};                  timeout => $listener->{Timeout},
122                    params => { %params },
123            });
124    
125          while(1) {          while(1) {
126    

Legend:
Removed from v.138  
changed lines
  Added in v.207

  ViewVC Help
Powered by ViewVC 1.1.26