|
|
|
@ -133,7 +133,8 @@ answer_request_alloc(struct dnsc_context *dnsc, void *sock, const char *url,
|
|
|
|
|
if(id == 65535)
|
|
|
|
|
id = 0;
|
|
|
|
|
// conflict: do we need this?
|
|
|
|
|
//tracker->client_request[id] = std::unique_ptr< dnsc_answer_request >(request);
|
|
|
|
|
// tracker->client_request[id] = std::unique_ptr< dnsc_answer_request
|
|
|
|
|
// >(request);
|
|
|
|
|
|
|
|
|
|
dns_query *dns_packet = build_dns_packet(
|
|
|
|
|
(char *)request->question.name.c_str(), id, request->question.type);
|
|
|
|
@ -264,8 +265,8 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
|
|
|
|
|
llarp::LogDebug("Read answer, bytes left ", diff);
|
|
|
|
|
if(diff > sz)
|
|
|
|
|
{
|
|
|
|
|
llarp::LogWarn("Would read past end of dns packet. for ",
|
|
|
|
|
request->question.name);
|
|
|
|
|
// llarp::LogWarn("Would read past end of dns packet. for ",
|
|
|
|
|
// request->question.name);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -319,7 +320,8 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
|
|
|
|
|
|
|
|
|
|
if(answer == nullptr)
|
|
|
|
|
{
|
|
|
|
|
llarp::LogWarn("nameserver ", upstreamAddr, " didnt return any answers:");
|
|
|
|
|
llarp::LogWarn("nameserver ", upstreamAddr,
|
|
|
|
|
" didnt return any answers for ", question->name);
|
|
|
|
|
request->resolved(request);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -370,6 +372,7 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
|
|
|
|
|
|
|
|
|
|
if(answer->rdLen == 4)
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
request->result.sa_family = AF_INET;
|
|
|
|
|
#if((__APPLE__ && __MACH__) || __FreeBSD__)
|
|
|
|
|
request->result.sa_len = sizeof(in_addr);
|
|
|
|
@ -382,9 +385,12 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
|
|
|
|
|
ip[1] = answer->rData[1];
|
|
|
|
|
ip[2] = answer->rData[2];
|
|
|
|
|
ip[3] = answer->rData[3];
|
|
|
|
|
*/
|
|
|
|
|
request->result.from_4int(answer->rData[0], answer->rData[1],
|
|
|
|
|
answer->rData[2], answer->rData[3]);
|
|
|
|
|
|
|
|
|
|
llarp::Addr test(request->result);
|
|
|
|
|
llarp::LogDebug(test);
|
|
|
|
|
// llarp::Addr test(request->result);
|
|
|
|
|
// llarp::LogDebug(request->result);
|
|
|
|
|
request->found = true;
|
|
|
|
|
request->resolved(request);
|
|
|
|
|
return;
|
|
|
|
@ -408,8 +414,8 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
raw_resolve_host(struct dnsc_context *dnsc, const char *url,
|
|
|
|
|
dnsc_answer_hook_func resolved, void *user)
|
|
|
|
|
raw_resolve_host(struct dnsc_context *const dnsc, const char *url,
|
|
|
|
|
dnsc_answer_hook_func resolved, void *const user)
|
|
|
|
|
{
|
|
|
|
|
dns_query *dns_packet =
|
|
|
|
|
answer_request_alloc(dnsc, nullptr, url, resolved, user);
|
|
|
|
@ -451,13 +457,8 @@ raw_resolve_host(struct dnsc_context *dnsc, const char *url,
|
|
|
|
|
|
|
|
|
|
// hexdump("sending packet", &dnsQuery.request, dnsQuery.length);
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
ret = sendto(sockfd, (const char *)dns_packet->request, dns_packet->length, 0,
|
|
|
|
|
(struct sockaddr *)&addr, size);
|
|
|
|
|
#else
|
|
|
|
|
ret = sendto(sockfd, (const char *)dns_packet->request, dns_packet->length, 0,
|
|
|
|
|
(struct sockaddr *)&addr, size);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
delete dns_packet;
|
|
|
|
|
if(ret < 0)
|
|
|
|
@ -502,9 +503,9 @@ raw_resolve_host(struct dnsc_context *dnsc, const char *url,
|
|
|
|
|
|
|
|
|
|
/// intermediate udp_io handler
|
|
|
|
|
void
|
|
|
|
|
llarp_handle_dnsc_recvfrom(struct llarp_udp_io *udp,
|
|
|
|
|
llarp_handle_dnsc_recvfrom(struct llarp_udp_io *const udp,
|
|
|
|
|
const struct sockaddr *saddr, const void *buf,
|
|
|
|
|
ssize_t sz)
|
|
|
|
|
const ssize_t sz)
|
|
|
|
|
{
|
|
|
|
|
unsigned char *castBuf = (unsigned char *)buf;
|
|
|
|
|
// auto buffer = llarp::StackBuffer< decltype(castBuf) >(castBuf);
|
|
|
|
@ -528,8 +529,8 @@ llarp_handle_dnsc_recvfrom(struct llarp_udp_io *udp,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
llarp_resolve_host(struct dnsc_context *dnsc, const char *url,
|
|
|
|
|
dnsc_answer_hook_func resolved, void *user)
|
|
|
|
|
llarp_resolve_host(struct dnsc_context *const dnsc, const char *url,
|
|
|
|
|
dnsc_answer_hook_func resolved, void *const user)
|
|
|
|
|
{
|
|
|
|
|
// FIXME: probably can be stack allocated
|
|
|
|
|
dns_query *dns_packet =
|
|
|
|
@ -594,7 +595,7 @@ llarp_resolve_host(struct dnsc_context *dnsc, const char *url,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
llarp_host_resolved(dnsc_answer_request *request)
|
|
|
|
|
llarp_host_resolved(dnsc_answer_request *const request)
|
|
|
|
|
{
|
|
|
|
|
dns_tracker *tracker = (dns_tracker *)request->context->tracker;
|
|
|
|
|
auto val = std::find_if(
|
|
|
|
@ -612,8 +613,10 @@ llarp_host_resolved(dnsc_answer_request *request)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
llarp_dnsc_init(struct dnsc_context *dnsc, struct llarp_logic *logic,
|
|
|
|
|
struct llarp_ev_loop *netloop, const llarp::Addr &dnsc_sockaddr)
|
|
|
|
|
llarp_dnsc_init(struct dnsc_context *const dnsc,
|
|
|
|
|
struct llarp_logic *const logic,
|
|
|
|
|
struct llarp_ev_loop *const netloop,
|
|
|
|
|
const llarp::Addr &dnsc_sockaddr)
|
|
|
|
|
{
|
|
|
|
|
// create client socket
|
|
|
|
|
if(netloop)
|
|
|
|
@ -640,7 +643,7 @@ llarp_dnsc_init(struct dnsc_context *dnsc, struct llarp_logic *logic,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
llarp_dnsc_stop(struct dnsc_context *dnsc)
|
|
|
|
|
llarp_dnsc_stop(struct dnsc_context *const dnsc)
|
|
|
|
|
{
|
|
|
|
|
// delete(sockaddr_in *)dnsc->server; // deallocation
|
|
|
|
|
return true;
|
|
|
|
|