# class DBus::RawMessage

A message while it is being parsed: a binary string, with a position cursor (pos), and an endianness tag.

### Attributes

endianness[R]

@return [:little,:big]

pos[R]

@return [Integer] position in the byte buffer

### Public Class Methods

endianness(tag_char) click to toggle source

Get the endiannes switch as a Symbol, which will make using it slightly more efficient @param tag_char [String] @return [:little,:big]

       # File lib/dbus/raw_message.rb
    37 def self.endianness(tag_char)
    38   case tag_char
    39   when LIL_END
    40     :little
    41   when BIG_END
    42     :big
    43   else
    44     raise InvalidPacketException, "Incorrect endianness #{tag_char.inspect}"
    45   end
    46 end

new(bytes, endianness = nil) click to toggle source

@param bytes [String] @param endianness [:little,:big,nil]

    if not given, read the 1st byte of *bytes*

       # File lib/dbus/raw_message.rb
    27 def initialize(bytes, endianness = nil)
    28   @bytes = bytes
    29   @pos = 0
    30   @endianness = endianness || self.class.endianness(@bytes[0])
    31 end

### Public Instance Methods

align(alignment) click to toggle source

Align the pos index on a multiple of alignment @param alignment [Integer] must be 1, 2, 4 or 8 @return [void]

       # File lib/dbus/raw_message.rb
    75 def align(alignment)
    76   case alignment
    77   when 1
    78     nil
    79   when 2, 4, 8
    80     bits = alignment - 1
    81     pad_size = ((@pos + bits) & ~bits) - @pos
    82     pad = read(pad_size)
    83     unless pad.bytes.all?(&:zero?)
    84       raise InvalidPacketException, "Alignment bytes are not NUL"
    85     end
    86   else
    87     raise ArgumentError, "Unsupported alignment #{alignment}"
    88   end
    89 end

read(size) click to toggle source

@return [String] @raise `IncompleteBufferException` if there are not enough bytes remaining TODO: stress test this with encodings. always binary?

       # File lib/dbus/raw_message.rb
    57 def read(size)
    58   want!(size)
    59   ret = @bytes.slice(@pos, size)
    60   @pos += size
    61   ret
    62 end

remaining_bytes() click to toggle source

@return [String] @api private

       # File lib/dbus/raw_message.rb
    66 def remaining_bytes
    67   # This returns "" if pos is just past the end of the string,
    68   # and nil if it is further.
    69   @bytes[@pos..-1]
    70 end

want!(size) click to toggle source

@return [void] @raise `IncompleteBufferException` if there are not enough bytes remaining

       # File lib/dbus/raw_message.rb
    50 def want!(size)
    51   raise IncompleteBufferException if @pos + size > @bytes.bytesize
    52 end