diff --git a/clusterd b/clusterd index 5335d89..c4bd8f5 100755 --- a/clusterd +++ b/clusterd @@ -381,23 +381,32 @@ sub push_file { my $st=Donald::FileInfo->lstat($filename); defined $st or return warn "$filename: $!\n"; - $st->type eq 'F' or die "$filename: not a plain file\n"; - $st->size<=65536 or die "$filename: to big for broadcast (max 65536 bytes)\n"; + my $rpc; + if ($st->type eq 'F') { + $rpc='filedata'; + $st->size<=65536 or die "$filename: to big for broadcast (max 65536 bytes)\n"; + if ($st->size==0) { + udp_broadcast_message($donald_s,$rpc,$st,0,''); + return; + } - if ($st->size==0) { - udp_broadcast_message($donald_s,'filedata',$st,0,''); + my $fh=new IO::File $filename,'<' or return warn "$filename: $!\n"; + my $i=0; + for (my $pos=0;$pos<$st->size;$pos+=1024) { + my $data; + defined $fh->sysread($data,1024) or return warn "$filename: $!\n"; + # warn "send bytes $pos to ",$pos+length($data),"\n"; + udp_broadcast_message($donald_s,$rpc,$st,$pos,$data); + ++$i % $BC_RATE or sleep 1; + } + } elsif ($st->type eq 'L') { + $rpc='filedata.2'; + udp_broadcast_message($donald_s,$rpc,$st,0,''); return; + } else { + die "file type not supported\n"; } - my $fh=new IO::File $filename,'<' or return warn "$filename: $!\n"; - my $i=0; - for (my $pos=0;$pos<$st->size;$pos+=1024) { - my $data; - defined $fh->sysread($data,1024) or return warn "$filename: $!\n"; - # warn "send bytes $pos to ",$pos+length($data),"\n"; - udp_broadcast_message($donald_s,'filedata',$st,$pos,$data); - ++$i % $BC_RATE or sleep 1; - } } our %CMD=(