module Net::BER::Extensions::Array

BER extensions to the Array class.

Public Instance Methods

to_ber(id = 0) click to toggle source

Converts an Array to a BER sequence. All values in the Array are expected to be in BER format prior to calling this method.

# 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
Also aliased as: to_ber_sequence
to_ber_appsequence(id = 0) click to toggle source

Converts an Array to an application-specific sequence, assigned a tag value that is meaningful to the particular protocol being used. All values in the Array are expected to be in BER format pr prior to calling this method.

# 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
to_ber_contextspecific(id = 0) click to toggle source

Converts an Array to a context-specific sequence, assigned a tag value that is meaningful to the particular context of the particular protocol being used. All values in the Array are expected to be in BER format prior to calling this method.

# 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
to_ber_control() click to toggle source

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]]
# 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
to_ber_oid() click to toggle source

SNMP Object Identifiers (OID) are special arrays

# 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
to_ber_sequence(id = 0)
Alias for: to_ber
to_ber_set(id = 0) click to toggle source

Converts an Array to a BER set. All values in the Array are expected to be in BER format prior to calling this method.

# 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

to_ber_seq_internal(code) click to toggle source

The internal sequence packing routine. All values in the Array are expected to be in BER format prior to calling this method.

# 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