From 6bfd55f3f4907ab9456076326b2c13a27e8183c1 Mon Sep 17 00:00:00 2001 From: Ryan Tharp Date: Wed, 3 Oct 2018 03:54:12 -0700 Subject: [PATCH] fix headers, clang-format, favor llarp::Addr --- include/llarp/dnsc.hpp | 34 ++++++++++++++++++------------- llarp/dnsc.cpp | 45 ++++++++++++++++++++++-------------------- 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/include/llarp/dnsc.hpp b/include/llarp/dnsc.hpp index 3eadc0045..2cdb480fe 100644 --- a/include/llarp/dnsc.hpp +++ b/include/llarp/dnsc.hpp @@ -1,8 +1,8 @@ #ifndef LIBLLARP_DNSC_HPP #define LIBLLARP_DNSC_HPP -#include // for sockaadr -#include "dns.hpp" // get protocol structs +#include // for sockaadr +#include // get protocol structs // internal, non-public functions // well dnsc init/stop are public... @@ -27,7 +27,7 @@ struct dnsc_answer_request dnsc_answer_hook_func resolved; /// result bool found; - struct sockaddr result; + llarp::Addr result; std::string revDNS; // a reference to dnsc_context incase of multiple contexts struct dnsc_context *context; @@ -35,14 +35,19 @@ struct dnsc_answer_request /// event handler for processing DNS responses void -llarp_handle_dnsc_recvfrom(struct llarp_udp_io *udp, +llarp_handle_dnsc_recvfrom(struct llarp_udp_io *const udp, const struct sockaddr *addr, const void *buf, - ssize_t sz); + const ssize_t sz); /// generic handler for processing DNS responses +/// this doesn't look like it exists +/// that's because raw_resolve_host calls generic_handle_dnsc_recvfrom directly +/// because we don't need a callback like recvfrom +/// because we're not evented +/// however daemon/dns expects this void raw_handle_recvfrom(int *sockfd, const struct sockaddr *addr, const void *buf, - ssize_t sz); + const ssize_t sz); /// DNS client context (one needed per upstream DNS server) struct dnsc_context @@ -61,27 +66,28 @@ struct dnsc_context /// async resolve a hostname using generic socks 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); /// async resolve a hostname using llarp platform framework bool -llarp_resolve_host(struct dnsc_context *dns, const char *url, - dnsc_answer_hook_func resolved, void *user); +llarp_resolve_host(struct dnsc_context *const dns, const char *url, + dnsc_answer_hook_func resolved, void *const user); /// cleans up request structure allocations void -llarp_host_resolved(dnsc_answer_request *request); +llarp_host_resolved(dnsc_answer_request *const request); /// initialize dns subsystem and bind socket /// returns true on bind success otherwise returns false bool -llarp_dnsc_init(struct dnsc_context *dnsc, struct llarp_logic *logic, - struct llarp_ev_loop *netloop, +llarp_dnsc_init(struct dnsc_context *const dnsc, + struct llarp_logic *const logic, + struct llarp_ev_loop *const netloop, const llarp::Addr &dnsc_sockaddr); /// shutdowns any events, and deallocates for this context bool -llarp_dnsc_stop(struct dnsc_context *dnsc); +llarp_dnsc_stop(struct dnsc_context *const dnsc); #endif diff --git a/llarp/dnsc.cpp b/llarp/dnsc.cpp index 4f5cd0d10..2b9138b05 100644 --- a/llarp/dnsc.cpp +++ b/llarp/dnsc.cpp @@ -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;