class HTTPX::Resolver::HTTPS

  1. lib/httpx/resolver/https.rb
Superclass: Resolver

Implementation of a DoH name resolver (www.youtube.com/watch?v=unMXvnY2FNM). It wraps an HTTPX::Connection object which integrates with the main session in the same manner as other performed HTTP requests.

Methods

Public Class

  1. new

Public Instance

  1. <<
  2. closed?
  3. empty?
  4. resolver_connection

Constants

DEFAULTS = { uri: NAMESERVER, use_get: false, }.freeze  
NAMESERVER = "https://1.1.1.1/dns-query"  

Public Class methods

new(_, options)
[show source]
   # File lib/httpx/resolver/https.rb
35 def initialize(_, options)
36   super
37   @resolver_options = DEFAULTS.merge(@options.resolver_options)
38   @queries = {}
39   @requests = {}
40   @uri = URI(@resolver_options[:uri])
41   @uri_addresses = nil
42   @resolver = Resolv::DNS.new
43   @resolver.timeouts = @resolver_options.fetch(:timeouts, Resolver::RESOLVE_TIMEOUT)
44   @resolver.lazy_initialize
45 end

Public Instance methods

<<(connection)
[show source]
   # File lib/httpx/resolver/https.rb
47 def <<(connection)
48   return if @uri.origin == connection.peer.to_s
49 
50   @uri_addresses ||= HTTPX::Resolver.nolookup_resolve(@uri.host) || @resolver.getaddresses(@uri.host)
51 
52   if @uri_addresses.empty?
53     ex = ResolveError.new("Can't resolve DNS server #{@uri.host}")
54     ex.set_backtrace(caller)
55     connection.force_reset
56     throw(:resolve_error, ex)
57   end
58 
59   resolve(connection)
60 end
closed?()
[show source]
   # File lib/httpx/resolver/https.rb
62 def closed?
63   true
64 end
empty?()
[show source]
   # File lib/httpx/resolver/https.rb
66 def empty?
67   true
68 end
resolver_connection()
[show source]
   # File lib/httpx/resolver/https.rb
70 def resolver_connection
71   # TODO: leaks connection object into the pool
72   @resolver_connection ||= @current_session.find_connection(@uri, @current_selector,
73                                                             @options.merge(ssl: { alpn_protocols: %w[h2] })).tap do |conn|
74     emit_addresses(conn, @family, @uri_addresses) unless conn.addresses
75   end
76 end