Class: RubyDNS::Resolver
- Inherits:
-
Object
- Object
- RubyDNS::Resolver
- Defined in:
- lib/rubydns/resolver.rb
Defined Under Namespace
Classes: Request
Instance Method Summary collapse
-
#addresses_for(name, resource_class = Resolv::DNS::Resource::IN::A, &block) ⇒ Object
Yields a list of
Resolv::IPv4
andResolv::IPv6
addresses for the givenname
andresource_class
. -
#initialize(servers, options = {}) ⇒ Resolver
constructor
Servers are specified in the same manor as options[:listen], e.g.
-
#next_id! ⇒ Object
Provides the next sequence identification number which is used to keep track of DNS messages.
-
#query(name, resource_class = Resolv::DNS::Resource::IN::A, &block) ⇒ Object
Look up a named resource of the given resource_class.
- #send_message(message, &block) ⇒ Object
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, = {}) @servers = servers @sequence = 0 @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) = Resolv::DNS::Message.new(next_id!) .rd = 1 .add_question name, resource_class (, &block) end |