summaryrefslogtreecommitdiff
path: root/lib/custodian/util
diff options
context:
space:
mode:
Diffstat (limited to 'lib/custodian/util')
-rw-r--r--lib/custodian/util/tftp.rb52
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