Classes and Modules
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