require "time"
module AsyncDNS
class Settings
@local_domain : String?
@last_reload : Time?
getter :static_hosts, :name_servers, :local_domain, :search_domains,
:timeout, :max_attempts, :abs_num_dots, :uses_tcp
setter :static_hosts, :name_servers, :local_domain, :search_domains,
:uses_tcp
def initialize
@static_hosts = Hash(String, Array(String)).new
@name_servers = [] of String
@search_domains = [] of String
@timeout = Time::Span.new(seconds: 2)
@max_attempts = 2
@abs_num_dots = 1
@uses_tcp = false
self.reload
end
def reload
{% if flag?(:unix) %}
self.parse_hosts "/etc/hosts"
{% else %}
{% raise "Your OS is not supported by AsyncDNS" %}
{% end %}
end
def parse_hosts(path)
file = File.open(path, "r")
@static_hosts.clear
file.each_line do |line|
pos = line.index('#')
line = line[0, pos] if pos
split = line.split(/[ \t]/, remove_empty: true)
next unless split.size >= 2
address = split[0]
split[1, split.size - 1].each do |host|
addresses = @static_hosts[host]?
if addresses.nil?
addresses = [] of String
@static_hosts[host] = addresses
end
addresses << address
end
end
end
end
end