Sha256: d4fa961a9e7248f13c9b00ab95b9bb1a33a030e52eba7b06a2bd41064185fe3d

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require 'snmpjr/wrappers/transport'
require 'snmpjr/response'

class Snmpjr
  class SessionV2C
    attr_reader :snmp

    def initialize
      @snmp = Snmpjr::Wrappers::Snmp.new(Snmpjr::Wrappers::Transport::DefaultUdpTransportMapping.new)
    end

    def start
      @snmp.listen
    end

    def send pdu, target
      begin
        result = @snmp.send(pdu, target)
      rescue Exception => error
        raise RuntimeError.new("#{error.inspect}: #{error_information pdu, target}")
      end
      if result.response.nil?
        raise Snmpjr::TargetTimeoutError.new("Request timed out: #{error_information pdu, target}")
      else
        result.response.variable_bindings.map{|vb|
          construct_response(vb)
        }
      end
    end

    def close
      @snmp.close
    end

    private

    def construct_response variable_binding
      if variable_binding.is_exception
        Snmpjr::Response.new(oid: variable_binding.oid.to_s, error: variable_binding.variable.to_s)
      else
        Snmpjr::Response.new(oid: variable_binding.oid.to_s, value: variable_binding.variable.to_s, type: variable_binding.variable.syntax_string)
      end
    end

    def error_information pdu, target
      "#{target.address}, OIDs: #{pdu.to_array.map {|binding| binding.oid.to_s }.inspect}"
    end
  end

  class TargetTimeoutError < StandardError
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
snmpjr-0.3.3-java lib/snmpjr/session_v2c.rb