class RubySMB::Dcerpc::Ndr::NdrPointer

An NDR Top-level Full Pointers representation as defined in [Transfer Syntax NDR - Top-level Full Pointers](pubs.opengroup.org/onlinepubs/9629399/chap14.htm#tagcjh_19_03_11_01) This class must be inherited and the subclass must have a referent property

Public Instance Methods

do_read(io) click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 224
def do_read(io)
  self.referent_id.do_read(io)
  if process_referent?
    self.referent.do_read(io) unless self.referent_id == 0
  end
end
do_write(io) click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 231
def do_write(io)
  self.referent_id.do_write(io)
  if process_referent?
    self.referent.do_write(io) unless self.referent_id == 0
  end
end
get() click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 252
def get
  if self.referent_id == 0
    :null
  else
    self.referent
  end
end
process_referent?() click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 260
def process_referent?
  current_parent = parent
  loop do
    return true unless current_parent
    return false if current_parent.is_a?(NdrStruct)
    current_parent = current_parent.parent
  end
end
set(v) click to toggle source
# File lib/ruby_smb/dcerpc/ndr.rb, line 238
def set(v)
  if v == :null
    self.referent.clear
    self.referent_id = 0
  else
    if self.referent.respond_to?(:set)
      self.referent.set(v)
    else
      self.referent = v
    end
    self.referent_id = rand(0xFFFFFFFF) if self.referent_id == 0
  end
end