Sha256: a5dde445867c0fcc518777c0d930e44d5cd5002d03452f8278de30ab27232513
Contents?: true
Size: 1.04 KB
Versions: 1
Compression:
Stored size: 1.04 KB
Contents
# frozen_string_literal: true require 'async/dns' module DoHClient class Server < Async::DNS::Server attr_reader :client def initialize(resolver) super @client = resolver == "cloudflare" ? DoHClient::Client::Cloudflare : DoHClient::Client::Google end def process(name, resource_class, transaction) type = resource_class.to_s.split('::').last begin response = client.resolve(name, type: type) rescue ResponseError => _ return transaction.fail!(:NXDomain) unless answers end answers = response["Answer"] return transaction.fail!(:NXDomain) unless answers transaction.append_question! answers.each do |answer| next unless klass = Resolv::DNS::Resource.get_class(answer["type"], resource_class::ClassValue) resource = klass < Resolv::DNS::Resource::DomainName ? klass.new(Resolv::DNS::Name.create(answer["data"])) : klass.new(answer["data"]) transaction.response.add_answer(answer["name"], answer["TTL"], resource) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
doh_client-0.2.0 | lib/doh_client/server.rb |