Object
# File resolv.rb, line 1318
def get_bytes(len = @limit - @index)
d = @data[@index, len]
@index += len
return d
end
# File resolv.rb, line 1389
def get_label
return Label::Str.new(self.get_string)
end
# File resolv.rb, line 1364
def get_labels(limit=nil)
limit = @index if !limit || @index < limit
d = []
while true
case @data[@index]
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
# File resolv.rb, line 1304
def get_length16
len, = self.get_unpack('n')
save_limit = @limit
@limit = @index + len
d = yield(len)
if @index < @limit
raise DecodeError.new("junk exists")
elsif @limit < @index
raise DecodeError.new("limit exceeded")
end
@limit = save_limit
return d
end
# File resolv.rb, line 1360
def get_name
return Name.new(self.get_labels)
end
# File resolv.rb, line 1393
def get_question
name = self.get_name
type, klass = self.get_unpack("nn")
return name, Resource.get_class(type, klass)
end
# File resolv.rb, line 1399
def get_rr
name = self.get_name
type, klass, ttl = self.get_unpack('nnN')
typeclass = Resource.get_class(type, klass)
return name, ttl, self.get_length16 {typeclass.decode_rdata(self)}
end
# File resolv.rb, line 1344
def get_string
len = @data[@index]
raise DecodeError.new("limit exceeded") if @limit < @index + 1 + len
d = @data[@index + 1, len]
@index += 1 + len
return d
end
# File resolv.rb, line 1352
def get_string_list
strings = []
while @index < @limit
strings << self.get_string
end
strings
end
# File resolv.rb, line 1324
def get_unpack(template)
len = 0
template.each_byte {|byte|
case byte
when c, C
len += 1
when n
len += 2
when N
len += 4
else
raise StandardError.new("unsupported template: '#{byte.chr}' in '#{template}'")
end
}
raise DecodeError.new("limit exceeded") if @limit < @index + len
arr = @data.unpack("@#{@index}#{template}")
@index += len
return arr
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.