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, e.g.

[:tcp/:udp, address, port]

In the case of multiple servers, they will be checked in sequence.



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

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`.



56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/rubydns/resolver.rb', line 56

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.



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

def next_id!
	return (@sequence += 1)
end

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

Look up a named resource of the given resource_class.



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

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
	
	Request.fetch(message, @servers, @options, &block)
end