Class: RubyDNS::Resolver

Inherits:
Object
  • Object
show all
Defined in:
lib/rubydns/resolver.rb

Defined Under Namespace

Classes: Request

Instance Method Summary collapse

Constructor Details

#initialize(servers, options = {}) ⇒ Resolver

Servers are specified in the same manor as options[:listen], e.g. [:tcp/:udp, address, port] In the case of multiple servers, they will be checked in sequence.



35
36
37
38
39
40
# File 'lib/rubydns/resolver.rb', line 35

def initialize(servers, options = {})
	@servers = servers
	@sequence = 0
	
	@options = options
end

Instance Method Details

#addresses_for(name, resource_class = Resolv::DNS::Resource::IN::A, &block) ⇒ Object

Yields a list of Resolv::IPv4 and Resolv::IPv6 addresses for the given name and resource_class.



62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/rubydns/resolver.rb', line 62

def addresses_for(name, resource_class = Resolv::DNS::Resource::IN::A, &block)
	query(name, resource_class) do |response|
		# Resolv::DNS::Name doesn't retain the trailing dot.
		name = name.sub(/\.$/, '')
		
		case response
		when Message
			yield response.answer.select{|record| record[0].to_s == name}.collect{|record| record[2].address}
		else
			yield []
		end
	end
end

#next_id!Object

Provides the next sequence identification number which is used to keep track of DNS messages.



43
44
45
46
# File 'lib/rubydns/resolver.rb', line 43

def next_id!
	# Sequence IDs are 16-bit integers.
	return (@sequence += 1) % (2**16)
end

#query(name, resource_class = Resolv::DNS::Resource::IN::A, &block) ⇒ Object

Look up a named resource of the given resource_class.



49
50
51
52
53
54
55
# File 'lib/rubydns/resolver.rb', line 49

def query(name, resource_class = Resolv::DNS::Resource::IN::A, &block)
	message = Resolv::DNS::Message.new(next_id!)
	message.rd = 1
	message.add_question name, resource_class
	
	send_message(message, &block)
end

#send_message(message, &block) ⇒ Object



57
58
59
# File 'lib/rubydns/resolver.rb', line 57

def send_message(message, &block)
	Request.fetch(message, @servers, @options, &block)
end