Module: RCS::Resolver

Included in:
Common::WinFirewall::Rule, Updater::Client
Defined in:
lib/rcs-common/resolver.rb

Instance Method Summary collapse

Instance Method Details

#resolve_dns(dns, use_cache: false) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rcs-common/resolver.rb', line 10

def resolve_dns(dns, use_cache: false)
  if use_cache and resolved_dns_cache[dns]
    return resolved_dns_cache[dns]
  end

  ip = nil

  Timeout::timeout(8) do
    ip = Resolv.getaddress(dns).to_s rescue nil
  end

  if ip.nil? and defined?(Win32)
    Timeout::timeout(10) do
      info = Win32::Resolv.get_resolv_info
      resolver = Resolv::DNS.new(nameserver: info[1], search: info[0])
      ip = resolver.getaddress(dns).to_s rescue nil
    end
  end

  raise("Cannot resolve DNS #{dns.inspect}: unknown host") unless ip

  resolved_dns_cache[dns] = ip

  return ip
rescue Timeout::Error
  raise("Cannot resolve DNS #{dns.inspect}: timeout")
rescue Exception => ex
  raise("Cannot resolve DNS #{dns.inspect}: #{ex.message}")
end

#resolved_dns_cacheObject



6
7
8
# File 'lib/rcs-common/resolver.rb', line 6

def resolved_dns_cache
  @@dns_cache ||= {}
end