class Aquatone::Resolver
Constants
- TIMEOUT
Attributes
options[R]
Public Class Methods
new(options)
click to toggle source
# File lib/aquatone/resolver.rb, line 7 def initialize(options) @options = { :timeout => TIMEOUT }.merge(options) end
Public Instance Methods
resolve(host)
click to toggle source
# File lib/aquatone/resolver.rb, line 13 def resolve(host) retried = false host = "#{host}." unless host.end_with?(".") return (resolve_with_nameserver(host) || resolve_with_fallback_nameserver(host)) rescue if !retried retried = true retry end nil end
resource(host)
click to toggle source
# File lib/aquatone/resolver.rb, line 25 def resource(host) resource = resource_with_nameserver(host, Resolv::DNS::Resource::IN::CNAME) || resource_with_fallback_nameserver(host, Resolv::DNS::Resource::IN::CNAME) if !resource resource = resource_with_nameserver(host, Resolv::DNS::Resource::IN::A) || resource_with_fallback_nameserver(host, Resolv::DNS::Resource::IN::A) end resource end
Private Instance Methods
_resolve(host, nameserver_ip)
click to toggle source
# File lib/aquatone/resolver.rb, line 57 def _resolve(host, nameserver_ip) nameserver = Resolv::DNS.new(:nameserver => nameserver_ip).tap do |ns| ns.timeouts = options[:timeout] end ip = nameserver.getaddress(host).to_s nameserver.close ip rescue Resolv::ResolvError nameserver.close nil end
_resource(host, typeclass, nameserver_ip)
click to toggle source
# File lib/aquatone/resolver.rb, line 69 def _resource(host, typeclass, nameserver_ip) nameserver = Resolv::DNS.new(:nameserver => nameserver_ip).tap do |ns| ns.timeouts = options[:timeout] end resource = nameserver.getresource(host, typeclass) nameserver.close resource rescue Resolv::ResolvError nameserver.close nil end
resolve_with_fallback_nameserver(host)
click to toggle source
# File lib/aquatone/resolver.rb, line 45 def resolve_with_fallback_nameserver(host) _resolve(host, options[:fallback_nameservers].sample) end
resolve_with_nameserver(host)
click to toggle source
# File lib/aquatone/resolver.rb, line 41 def resolve_with_nameserver(host) _resolve(host, options[:nameservers].sample) end
resource_with_fallback_nameserver(host, typeclass)
click to toggle source
# File lib/aquatone/resolver.rb, line 53 def resource_with_fallback_nameserver(host, typeclass) _resource(host, typeclass, options[:fallback_nameservers].sample) end
resource_with_nameserver(host, typeclass)
click to toggle source
# File lib/aquatone/resolver.rb, line 49 def resource_with_nameserver(host, typeclass) _resource(host, typeclass, options[:nameservers].sample) end