Parent

Included Modules

Net::DNS::Question

Name

Net::DNS::Question - DNS packet question class

Synopsis

require 'net/dns/question'

Description

This class represent the Question portion of a DNS packet. The number of question entries is stored in the qdCount variable of an Header object.

A new object can be created passing the name of the query and the type of answer desired, plus an optional argument containing the class:

question = Net::DNS::Question.new("google.com.", Net::DNS::A)
   #=> "google.com.                   A       IN"

Alternatevly, a new object is created when processing a binary packet, as when an answer is received. To obtain the binary data from a question object you can use the method Question#data:

question.data
   #=> "\006google\003com\000\000\001\000\001"

A lot of methods were written to keep a compatibility layer with the Perl version of the library, as long as methods name which are more or less the same.

Error classes

Some error classes has been defined for the Net::DNS::Header class, which are listed here to keep a light and browsable main documentation. We have:

ArgumentError

Argument Error for class Net::DNS::Question

NameError

An error in the name part of a Question entry

Copyright

Copyright (c) 2006 Marco Ceresa

All rights reserved. This program is free software; you may redistribute it and/or modify it under the same terms as Ruby itself.

Attributes

qClass[R]

class part of a Question entry

qName[R]

name part of a Question entry

qType[R]

type part of a Question entry

Public Class Methods

new(name, type = Net::DNS::A, cls = Net::DNS::IN) click to toggle source

If not specified, type and cls arguments defaults to Net::DNS::A and Net::DNS::IN respectively.

# File lib/net/dns/question.rb, line 93
def initialize(name, type = Net::DNS::A, cls = Net::DNS::IN)
  @qName = check_name name
  @qType = Net::DNS::RR::Types.new(type)
  @qClass = Net::DNS::RR::Classes.new(cls)
end
parse(arg) click to toggle source

Return a new Net::DNS::Question object created by parsing binary data, such as an answer from the nameserver.

question = Net::DNS::Question.parse(data)
puts "Queried for #{question.qName} type #{question.qType.to_s}"
  #=> Queried for example.com type A
# File lib/net/dns/question.rb, line 107
def self.parse(arg)
  o = allocate
  o.send(:new_from_binary, arg.to_s)
  o
end

Public Instance Methods

comp_data() click to toggle source

Return the binary data of the objects, plus an offset and an Hash with references to compressed names. For use in Net::DNS::Packet compressed packet creation.

# File lib/net/dns/question.rb, line 125
def comp_data
  arr = @qName.split(".")
  str = pack_name(@qName)
  string = ""
  names = {}
  offset = Net::DNS::HFIXEDSZ
  arr.size.times do |i|
    x = i+1
    elem = arr[-x]
    len = elem.size
    string = ((string.reverse)+([len,elem].pack("Ca*")).reverse).reverse
    names[string] = offset
    offset += len
  end
  offset += 2 * Net::DNS::INT16SZ
  str += "\0000"
  [[str,@qType.to_i,@qClass.to_i].pack("a*nn"),offset,names]
end
data() click to toggle source

Outputs binary data from a Question object

question.data
   #=> "\006google\003com\000\000\001\000\001"
# File lib/net/dns/question.rb, line 118
def data
  [pack_name(@qName),@qType.to_i,@qClass.to_i].pack("a*nn")
end
inspect → string click to toggle source

Returns a printable version of question with nice formatting.

q = Net::DNS::Question.new("google.com.", Net::DNS::A)
q.inspect # => "google.com.                  IN      A       "
# File lib/net/dns/question.rb, line 154
def inspect
  if @qName.size > 29 then
    len = @qName.size + 1
  else
    len = 29
  end
  [@qName, @qClass.to_s, @qType.to_s].pack("A#{len} A8 A8")
end
to_s → string click to toggle source

Returns a string representation of question. It is the same as inspect.

q = Net::DNS::Question.new("google.com.", Net::DNS::A)
q.inspect # => "google.com.                  IN      A       "
# File lib/net/dns/question.rb, line 173
def to_s
  "#{self.inspect}"
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.