module Net::BER::Extensions::Array
Public Instance Methods
Source
# File lib/net/ber/core_ext/array.rb, line 7 def to_ber(id = 0) # The universal sequence tag 0x30 is composed of the base tag value # (0x10) and the constructed flag (0x20). to_ber_seq_internal(0x30 + id) end
Converts an Array to a BER sequence. All values in the Array are expected to be in BER format prior to calling this method.
Also aliased as: to_ber_sequence
Source
# File lib/net/ber/core_ext/array.rb, line 39 def to_ber_appsequence(id = 0) # The application sequence tag always starts from the application flag # (0x40) and the constructed flag (0x20). to_ber_seq_internal(0x60 + id) end
Source
# File lib/net/ber/core_ext/array.rb, line 50 def to_ber_contextspecific(id = 0) # The application sequence tag always starts from the context flag # (0x80) and the constructed flag (0x20). to_ber_seq_internal(0xa0 + id) end
Source
# File lib/net/ber/core_ext/array.rb, line 87 def to_ber_control #if our array does not contain at least one array then wrap it in an array before going forward ary = self[0].kind_of?(Array) ? self : [self] ary = ary.collect do |control_sequence| control_sequence.collect(&:to_ber).to_ber_sequence.reject_empty_ber_arrays end ary.to_ber_sequence.reject_empty_ber_arrays end
Converts an array into a set of ber control codes The expected format is [[control_oid, criticality, control_value(optional)]]
[['1.2.840.113556.1.4.805',true]]
Source
# File lib/net/ber/core_ext/array.rb, line 72 def to_ber_oid ary = self.dup first = ary.shift raise Net::BER::BerError, "Invalid OID" unless [0, 1, 2].include?(first) first = first * 40 + ary.shift ary.unshift first oid = ary.pack("w*") [6, oid.length].pack("CC") + oid end
SNMP Object Identifiers (OID) are special arrays
Source
# File lib/net/ber/core_ext/array.rb, line 17 def to_ber_set(id = 0) # The universal set tag 0x31 is composed of the base tag value (0x11) # and the constructed flag (0x20). to_ber_seq_internal(0x31 + id) end
Private Instance Methods
Source
# File lib/net/ber/core_ext/array.rb, line 59 def to_ber_seq_internal(code) s = self.join [code].pack('C') + s.length.to_ber_length_encoding + s end