class RubySMB::Dcerpc::Ndr::NdrFixedByteArray

An NDR Uni-dimensional Fixed Array of bytes representation as defined in: [Transfer Syntax NDR - NDR Constructed Types](pubs.opengroup.org/onlinepubs/9629399/chap14.htm#tagcjh_19_03_03_01)

Public Class Methods

arg_processor() click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 121
def arg_processor
  NdrFixedByteArrayArgProcessor.new
end

Public Instance Methods

assign(val) click to toggle source
Calls superclass method
# File lib/ruby_smb/dcerpc/ndr.rb, line 112
def assign(val)
  super(fixed_byte_array(val))
end
initialize_shared_instance() click to toggle source
Calls superclass method
# File lib/ruby_smb/dcerpc/ndr.rb, line 105
def initialize_shared_instance
  if (has_parameter?(:value) || has_parameter?(:asserted_value)) && !has_parameter?(:read_length)
    extend WarnNoReadLengthPlugin
  end
  super
end
snapshot() click to toggle source
Calls superclass method
# File lib/ruby_smb/dcerpc/ndr.rb, line 116
def snapshot
  clamp_to_length(super)
end

Private Instance Methods

clamp_to_length(val) click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 128
def clamp_to_length(val)
  val = fixed_byte_array(val)
  len = eval_parameter(:length) || val.length
  if val.length > len
    val = val.first(len)
  elsif val.length < len
    pad = eval_parameter(:pad_byte)
    if get_parameter(:pad_front)
      val = val.insert(0, *Array.new(len - val.length, pad))
    else
      val = val.fill(pad, val.length...len)
    end
  end

  val
end
fixed_byte_array(val) click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 145
def fixed_byte_array(val)
  val = val.bytes if val.is_a? String
  val.to_ary
end
read_and_return_value(io) click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 150
def read_and_return_value(io)
  len = eval_parameter(:read_length) || eval_parameter(:length) || 0
  io.readbytes(len)
end
sensible_default() click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 155
def sensible_default
  [ ]
end
value_to_binary_string(val) click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 159
def value_to_binary_string(val)
  clamp_to_length(val).pack('C*')
end