summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMajesticFalcon <Schylarutley@hotmail.com>2016-08-30 17:49:14 -0500
committerGitHub <noreply@github.com>2016-08-30 17:49:14 -0500
commit87e95ab4f947d33e0fc42bb8892cb0112f620b43 (patch)
tree057a99408a491566e7737b25a17950f4788e4dac /lib
parent340aa7eff51f3c08a2764b3c5882b0568b1442fb (diff)
Add UDP TFTP
Diffstat (limited to 'lib')
-rw-r--r--lib/oxidized/input/tftp58
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/oxidized/input/tftp b/lib/oxidized/input/tftp
new file mode 100644
index 0000000..bfb69f6
--- /dev/null
+++ b/lib/oxidized/input/tftp
@@ -0,0 +1,58 @@
+module Oxidized
+ require 'net/tftp'
+ require 'timeout'
+ require 'stringio'
+ require_relative 'cli'
+
+ class TFTP < Input
+ RescueFail = {
+ :debug => [
+ #Net::SSH::Disconnect,
+ ],
+ :warn => [
+ #RuntimeError,
+ #Net::SSH::AuthenticationFailed,
+ ],
+ }
+
+ include Input::CLI
+
+ # TFTP utilizes UDP, there is not a connection. We simply specify an IP and send/receive data.
+ def connect node
+ @node = node
+
+ @node.model.cfg['tftp'].each { |cb| instance_exec(&cb) }
+ @log = File.open(Oxidized::Config::Log + "/#{@node.ip}-tftp", 'w') if Oxidized.config.input.debug?
+ @tftp = Net::TFTP.new @node.ip
+ end
+
+ def cmd file
+ Oxidized.logger.info file.methods(true)
+ Oxidized.logger.debug "TFTP: #{file} @ #{@node.name}"
+ config = StringIO.new
+ @tftp.getbinary file, config
+ config.rewind
+ config.read
+ end
+
+
+ # meh not sure if this is the best way, but perhaps better than not implementing send
+ def send my_proc
+ my_proc.call
+ end
+
+ def output
+ ""
+ end
+
+ private
+
+ def disconnect
+ # TFTP uses UDP, there is no connection to close
+ #rescue Errno::ECONNRESET, IOError
+ ensure
+ @log.close if Oxidized.config.input.debug?
+ end
+
+ end
+end