Parent

Files

DBus::PacketUnmarshaller

D-Bus packet unmarshaller class

Class that handles the conversion (unmarshalling) of payload data to Array.

Attributes

idx[R]

Index pointer that points to the byte in the data that is currently being processed.

Used to kown what part of the buffer has been consumed by unmarshalling. FIXME: Maybe should be accessed with a "consumed_size" method.

Public Class Methods

new(buffer, endianness) click to toggle source

Create a new unmarshaller for the given data buffer and endianness.

# File lib/dbus/marshall.rb, line 34
def initialize(buffer, endianness)
  @buffy, @endianness = buffer.dup, endianness
  if @endianness == BIG_END
    @uint32 = "N"
    @uint16 = "n"
    @double = "G"
  elsif @endianness == LIL_END
    @uint32 = "V"
    @uint16 = "v"
    @double = "E"
  else
    raise InvalidPacketException, "Incorrect endianness #{@endianness}"
  end
  @idx = 0
end

Public Instance Methods

align(a) click to toggle source

Align the pointer index on a byte index of a, where a must be 1, 2, 4 or 8.

# File lib/dbus/marshall.rb, line 68
def align(a)
  case a
  when 1
  when 2, 4, 8
    bits = a - 1
    @idx = @idx + bits & ~bits
    raise IncompleteBufferException if @idx > @buffy.bytesize
  else
    raise "Unsupported alignment #{a}"
  end
end
unmarshall(signature, len = nil) click to toggle source

Unmarshall the buffer for a given signature and length len. Return an array of unmarshalled objects

# File lib/dbus/marshall.rb, line 52
def unmarshall(signature, len = nil)
  if len != nil
    if @buffy.bytesize < @idx + len
      raise IncompleteBufferException
    end
  end
  sigtree = Type::Parser.new(signature).parse
  ret = Array.new
  sigtree.each do |elem|
    ret << do_parse(elem)
  end
  ret
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.