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