class Resolv::DNS::Message::MessageDecoder

Public Instance Methods

get_labels(limit=nil) click to toggle source
# File lib/spf/ext/resolv.rb, line 77
def get_labels(limit=nil)
  limit = @index if !limit || @index < limit
  d = []
  while true
    case @data[@index] && @data[@index].ord                             # PATCH
    when nil                                                            # PATCH
      raise DecodeError.new("truncated or malformed packet")            # PATCH
    when 0
      @index += 1
      return d
    when 192..255
      idx = self.get_unpack('n')[0] & 0x3fff
      if limit <= idx
        raise DecodeError.new("non-backward name pointer")
      end
      save_index = @index
      @index = idx
      d += self.get_labels(limit)
      @index = save_index
      return d
    else
      d << self.get_label
    end
  end
  return d
end