module HTTPX::Resolver

  1. lib/httpx/resolver.rb
  2. lib/httpx/resolver/cache.rb
  3. lib/httpx/resolver/cache/base.rb
  4. lib/httpx/resolver/cache/memory.rb
  5. lib/httpx/resolver/entry.rb
  6. lib/httpx/resolver/https.rb
  7. lib/httpx/resolver/multi.rb
  8. lib/httpx/resolver/native.rb
  9. lib/httpx/resolver/resolver.rb
  10. lib/httpx/resolver/system.rb
  11. lib/httpx/selector.rb
  12. show all

Constants

RESOLVE_TIMEOUT = [2, 3].freeze  

Public Instance methods

decode_dns_answer(payload)
[show source]
   # File lib/httpx/resolver.rb
46 def decode_dns_answer(payload)
47   begin
48     message = Resolv::DNS::Message.decode(payload)
49   rescue Resolv::DNS::DecodeError => e
50     return :decode_error, e
51   end
52 
53   # no domain was found
54   return :no_domain_found if message.rcode == Resolv::DNS::RCode::NXDomain
55 
56   return :message_truncated if message.tc == 1
57 
58   if message.rcode != Resolv::DNS::RCode::NoError
59     case message.rcode
60     when Resolv::DNS::RCode::ServFail
61       return :retriable_error, message.rcode
62     else
63       return :dns_error, message.rcode
64     end
65   end
66 
67   addresses = []
68 
69   now = Utils.now
70   message.each_answer do |question, _, value|
71     case value
72     when Resolv::DNS::Resource::IN::CNAME
73       addresses << {
74         "name" => question.to_s,
75         "TTL" => (now + value.ttl),
76         "alias" => value.name.to_s,
77       }
78     when Resolv::DNS::Resource::IN::A,
79          Resolv::DNS::Resource::IN::AAAA
80       addresses << {
81         "name" => question.to_s,
82         "TTL" => (now + value.ttl),
83         "data" => value.address.to_s,
84       }
85     end
86   end
87 
88   [:ok, addresses]
89 end
encode_dns_query(hostname, type: Resolv::DNS::Resource::IN::A, message_id: generate_id)
[show source]
   # File lib/httpx/resolver.rb
39 def encode_dns_query(hostname, type: Resolv::DNS::Resource::IN::A, message_id: generate_id)
40   Resolv::DNS::Message.new(message_id).tap do |query|
41     query.rd = 1
42     query.add_question(hostname, type)
43   end.encode
44 end
generate_id()
[show source]
   # File lib/httpx/resolver.rb
30 def generate_id
31   if Utils.in_ractor?
32     identifier = Ractor.store_if_absent(:httpx_resolver_identifier) { -1 }
33     Ractor.current[:httpx_resolver_identifier] = (identifier + 1) & 0xFFFF
34   else
35     id_synchronize { @identifier = (@identifier + 1) & 0xFFFF }
36   end
37 end
supported_ip_families()
[show source]
   # File lib/httpx/resolver.rb
22 def supported_ip_families
23   if Utils.in_ractor?
24     Ractor.store_if_absent(:httpx_supported_ip_families) { find_supported_ip_families }
25   else
26     @supported_ip_families ||= find_supported_ip_families
27   end
28 end