refining soomme signatures

This commit is contained in:
HoneyryderChuck 2023-04-26 23:05:45 +01:00
parent 5b5a360cb8
commit 387798fc1a
5 changed files with 46 additions and 4 deletions

40
examples/resolv_tcp.rb Normal file
View File

@ -0,0 +1,40 @@
# frozen_string_literal: true
require "resolv"
require "httpx"
host = "127.0.0.11"
port = 53
# srv_hostname = "aerserv-bc-us-east.bidswitch.net"
record_type = Resolv::DNS::Resource::IN::A
# # addresses = nil
# # Resolv::DNS.open(nameserver: host) do |dns|
# # require "pry-byebug"; binding.pry
# # addresses = dns.getresources(srv_hostname, record_type)
# # end
# message_id = 1
# buffer = HTTPX::Resolver.encode_dns_query(srv_hostname, type: record_type, message_id: message_id)
# io = TCPSocket.new(host, port)
# buffer[0, 2] = [buffer.size, message_id].pack("nn")
# io.write(buffer.to_s)
# data, _ = io.readpartial(2048)
# size = data[0, 2].unpack1("n")
# answer = data[2..-1]
# answer << io.readpartial(size) if size > answer.bytesize
# addresses = HTTPX::Resolver.decode_dns_answer(answer)
# puts "(#{srv_hostname}) addresses: #{addresses}"
srv_hostname = "www.sfjewjfwigiewpgwwg-native-1.com"
socket = UDPSocket.new
buffer = HTTPX::Resolver.encode_dns_query(srv_hostname, type: record_type)
socket.send(buffer.to_s, 0, host, port)
recv, _ = socket.recvfrom(512)
puts "received #{recv.bytesize} bytes..."
addresses = HTTPX::Resolver.decode_dns_answer(recv)
puts "(#{srv_hostname}) addresses: #{addresses}"

View File

@ -288,13 +288,14 @@ module HTTPX
connection = @queries.delete(name)
unless connection
orig_name = name
# absolute name
name_labels = Resolv::DNS::Name.create(name).to_a
name = @queries.each_key.first { |hname| name_labels == Resolv::DNS::Name.create(hname).to_a }
# probably a retried query for which there's an answer
unless name
@timeouts.delete(name)
@timeouts.delete(orig_name)
return
end

View File

@ -11,7 +11,8 @@ module HTTPX
@options: Options
@ns_index: Integer
@nameserver: Array[String]?
@nameserver: Array[String]
@socket_type: :udp | :tcp
@ndots: Integer
@start_timeout: Float?
@search: Array[String]

View File

@ -6,8 +6,6 @@ module HTTPX
RECORD_TYPES: Hash[Integer, singleton(Resolv::DNS::Resource)]
attr_reader family: ip_family?
@record_type: singleton(Resolv::DNS::Resource)
@options: Options
@resolver_options: Hash[Symbol, untyped]

View File

@ -5,6 +5,8 @@ module HTTPX
@resolver: Resolv::DNS
attr_reader family: nil
def <<: (Connection) -> void
private