diff options
Diffstat (limited to 'lib/custodian/util/tftp.rb')
-rw-r--r-- | lib/custodian/util/tftp.rb | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/custodian/util/tftp.rb b/lib/custodian/util/tftp.rb new file mode 100644 index 0000000..3028874 --- /dev/null +++ b/lib/custodian/util/tftp.rb @@ -0,0 +1,52 @@ +require 'tmpdir' +require 'fileutils' + +module Custodian + + module Util + + class Tftp + + attr_reader :hostname, :port, :filename + + # + # Store hostname and port + # + def initialize(hostname, port=69) + + raise ArgumentError, 'Hostname must not be nil' if hostname.nil? + raise ArgumentError, 'Hostname must be a String' unless hostname.kind_of?(String) + raise ArgumentError, 'Port must be a number' unless port.to_i > 0 + + @hostname = hostname + @port = port.to_i + end + + # + # Returns true only if the file can be downloaded and is not zero-length. + # + def test(file) + target = Dir::Tmpname.make_tmpname('/tmp/', nil) + + return false unless fetch(file, target) + return false unless File.size?(target) + return true + ensure + FileUtils.rm_f(target) + end + + def fetch(file, target=nil) + # HPA's tftp client appears to have a 25s timeout that it is + # not possible to change on the command line. + return tftp("-m binary #{@hostname} #{@port} -c get #{file} #{target}") + end + + def tftp(args) + return system("tftp #{args}") == true + end + + end + + end + +end |