remove redundance from (sockaddr) param refactor

pull/58/head
Ryan Tharp 6 years ago
parent 7039d70aa5
commit de418125f2

@ -2,10 +2,6 @@
#define LIBLLARP_DNS_DOTLOKILOOKUP_HPP
#include <llarp/service/address.hpp>
//#include <llarp/service.hpp>
//#include <llarp/service/endpoint.hpp>
//#include <llarp/handlers/tun.hpp>
//#include <llarp/handlers/tun.hpp>
#include "dnsd.hpp"
@ -38,7 +34,7 @@ struct dotLokiLookup
};
dnsd_query_hook_response *
llarp_dotlokilookup_handler(std::string name, const struct sockaddr *from,
llarp_dotlokilookup_handler(std::string name,
struct dnsd_question_request *const request);
#endif

@ -44,8 +44,9 @@ struct dnsc_answer_request
/// result
bool found;
llarp::huint32_t result;
std::string revDNS;
// llarp::huint32_t result;
// std::string revDNS;
// a reference to dnsc_context incase of multiple contexts
struct dnsc_context *context;
};

@ -65,25 +65,22 @@ llarp_handle_dnsd_recvfrom(struct llarp_udp_io *udp,
/// NXDOMAIN not found
void
write404_dnss_response(const struct sockaddr *from,
dnsd_question_request *request);
write404_dnss_response(dnsd_question_request *request);
/// for hook functions to use
void
writecname_dnss_response(std::string cname, const struct sockaddr *from,
dnsd_question_request *request);
writecname_dnss_response(std::string cname, dnsd_question_request *request);
// FIXME: llarp::Addr
/// send an A record found response
void
writesend_dnss_response(llarp::huint32_t *hostRes, const struct sockaddr *from,
writesend_dnss_response(llarp::huint32_t *hostRes,
dnsd_question_request *request);
// FIXME: llarp::Addr
/// send an PTR record found response
void
writesend_dnss_revresponse(std::string reverse, const struct sockaddr *from,
dnsd_question_request *request);
writesend_dnss_revresponse(std::string reverse, dnsd_question_request *request);
// FIXME: llarp::Addr
//
@ -92,8 +89,7 @@ writesend_dnss_revresponse(std::string reverse, const struct sockaddr *from,
/// intercept query hook functor
typedef dnsd_query_hook_response *(*intercept_query_hook)(
std::string name, const struct sockaddr *from,
struct dnsd_question_request *request);
std::string name, struct dnsd_question_request *request);
// FIXME: llarp::Addr
/// DNS Server context

@ -23,7 +23,8 @@ random_string(size_t len = 15, std::string const &allowed_chars = default_chars)
struct check_query_simple_request
{
const struct sockaddr *from; // source
// already inside request
// const struct sockaddr *from; // source
dnsd_question_request *request;
};
@ -44,7 +45,7 @@ llarp_dotlokilookup_checkQuery(void *u, __attribute__((unused)) uint64_t orig,
if(!dll)
{
llarp::LogError("DNSd dotLokiLookup is not configured");
write404_dnss_response(qr->from, qr->request);
write404_dnss_response(qr->request);
delete qr;
return;
}
@ -58,7 +59,7 @@ llarp_dotlokilookup_checkQuery(void *u, __attribute__((unused)) uint64_t orig,
{
llarp::LogWarn("Could not base32 decode address: ",
qr->request->question.name);
write404_dnss_response(qr->from, qr->request);
write404_dnss_response(qr->request);
delete qr;
return;
}
@ -85,7 +86,7 @@ llarp_dotlokilookup_checkQuery(void *u, __attribute__((unused)) uint64_t orig,
if(!routerHiddenServiceContext)
{
llarp::LogWarn("dotLokiLookup user isnt a service::Context: ", dll->user);
write404_dnss_response(qr->from, qr->request);
write404_dnss_response(qr->request);
delete qr;
return;
}
@ -95,7 +96,7 @@ llarp_dotlokilookup_checkQuery(void *u, __attribute__((unused)) uint64_t orig,
if(!tunIp->h)
{
llarp::LogWarn("dotLokiLookup failed to map address");
write404_dnss_response(qr->from, qr->request);
write404_dnss_response(qr->request);
delete qr;
return;
}
@ -142,7 +143,7 @@ llarp_dotlokilookup_checkQuery(void *u, __attribute__((unused)) uint64_t orig,
llarp::huint32_t foundAddr;
if(!routerHiddenServiceContext->FindBestAddressFor(addr, foundAddr))
{
write404_dnss_response(qr->from, qr->request);
write404_dnss_response(qr->request);
delete qr;
return;
}
@ -160,7 +161,7 @@ llarp_dotlokilookup_checkQuery(void *u, __attribute__((unused)) uint64_t orig,
// saddr.sin_addr.s_addr = llarp::xhtonl(foundAddr).n;
// FIXME: flush cache to disk
// on crash we'll need to bring up all the same IPs we assigned before...
writesend_dnss_response(&foundAddr, qr->from, qr->request);
writesend_dnss_response(&foundAddr, qr->request);
delete qr;
return;
}
@ -188,7 +189,7 @@ split(std::string str)
struct reverse_handler_iter_context
{
std::string lName;
const struct sockaddr *from;
// const struct sockaddr *from; // aready inside dnsd_question_request
const struct dnsd_question_request *request;
};
@ -258,13 +259,12 @@ ReverseHandlerIter(struct llarp::service::Context::endpoint_iter *endpointCfg)
tunEndpoint->ObtainAddrForIP(searchIPv4_fixed);
if(addr.IsZero())
{
write404_dnss_response(context->from,
(dnsd_question_request *)context->request);
write404_dnss_response((dnsd_question_request *)context->request);
}
else
{
// llarp::LogInfo("Returning [", addr.ToString(), "]");
writesend_dnss_revresponse(addr.ToString(), context->from,
writesend_dnss_revresponse(addr.ToString(),
(dnsd_question_request *)context->request);
}
return false;
@ -273,7 +273,7 @@ ReverseHandlerIter(struct llarp::service::Context::endpoint_iter *endpointCfg)
}
dnsd_query_hook_response *
llarp_dotlokilookup_handler(std::string name, const struct sockaddr *from,
llarp_dotlokilookup_handler(std::string name,
struct dnsd_question_request *const request)
{
dnsd_query_hook_response *response = new dnsd_query_hook_response;
@ -301,8 +301,8 @@ llarp_dotlokilookup_handler(std::string name, const struct sockaddr *from,
// which range?
// for each tun interface
struct reverse_handler_iter_context context;
context.lName = lName;
context.from = from;
context.lName = lName;
// context.from = request->from;
context.request = request;
struct llarp::service::Context::endpoint_iter i;
@ -360,8 +360,8 @@ llarp_dotlokilookup_handler(std::string name, const struct sockaddr *from,
// schedule future response
check_query_simple_request *qr = new check_query_simple_request;
qr->from = from;
qr->request = request;
// qr->from = request->from;
qr->request = request;
auto tun = routerHiddenServiceContext->getFirstTun();
if(tun->HasPathToService(addr))

@ -476,9 +476,11 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
// std::to_string(answer->rData[2]),
// ".", std::to_string(answer->rData[1]), ".",
// std::to_string(answer->rData[0]));
/*
request->result =
llarp::ipaddr_ipv4_bits(answer->rData[3], answer->rData[2],
answer->rData[1], answer->rData[0]);
*/
// llarp::Addr test(request->result);
// llarp::LogDebug(request->result);
@ -497,12 +499,12 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
else if(answer->type == 12)
{
llarp::LogDebug("Resolving PTR");
llarp::dns::type_12ptr *record =
dynamic_cast< llarp::dns::type_12ptr * >(answer->record.get());
// llarp::dns::type_12ptr *record = dynamic_cast< llarp::dns::type_12ptr *
// >(answer->record.get());
request->found = true;
// request->revDNS = std::string((char *)answer->rData.data(),
// answer->rData.size());
request->revDNS = record->revname;
// request->revDNS = record->revname;
request->resolved(request);
return;
}
@ -511,11 +513,11 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
llarp::dns::type_15mx *record =
dynamic_cast< llarp::dns::type_15mx * >(answer->record.get());
llarp::LogDebug("Resolving MX ", record->mx, "@", record->priority);
request->found = true;
request->result.h = record->priority;
request->found = true;
// request->result.h = record->priority;
// request->revDNS = std::string((char *)answer->rData.data(),
// answer->rData.size());
request->revDNS = record->mx;
// request->revDNS = record->mx;
request->resolved(request);
return;
}
@ -523,8 +525,8 @@ generic_handle_dnsc_recvfrom(dnsc_answer_request *request,
{
llarp::LogDebug("Resolving TXT");
request->found = true;
request->revDNS =
std::string((char *)answer->rData.data(), answer->rData.size());
// request->revDNS = std::string((char *)answer->rData.data(),
// answer->rData.size());
request->resolved(request);
return;
}

@ -39,8 +39,7 @@ llarp_sendto_dns_hook_func(void *sock, const struct sockaddr *from,
}
void
write404_dnss_response(const struct sockaddr *from,
dnsd_question_request *request)
write404_dnss_response(dnsd_question_request *request)
{
char buf[BUFFER_SIZE] = {0};
@ -75,12 +74,11 @@ write404_dnss_response(const struct sockaddr *from,
uint32_t out_bytes = write_buffer - bufferBegin;
llarp::LogDebug("Sending 404, ", out_bytes, " bytes");
// struct llarp_udp_io *udp = (struct llarp_udp_io *)request->user;
request->sendto_hook(request->user, from, buf, out_bytes);
request->sendto_hook(request->user, request->from, buf, out_bytes);
}
void
writecname_dnss_response(std::string cname, const struct sockaddr *from,
dnsd_question_request *request)
writecname_dnss_response(std::string cname, dnsd_question_request *request)
{
char buf[BUFFER_SIZE] = {0};
@ -143,12 +141,11 @@ writecname_dnss_response(std::string cname, const struct sockaddr *from,
uint32_t out_bytes = write_buffer - bufferBegin;
llarp::LogDebug("Sending cname, ", out_bytes, " bytes");
// struct llarp_udp_io *udp = (struct llarp_udp_io *)request->user;
request->sendto_hook(request->user, from, buf, out_bytes);
request->sendto_hook(request->user, request->from, buf, out_bytes);
}
void
writesend_dnss_revresponse(std::string reverse, const struct sockaddr *from,
dnsd_question_request *request)
writesend_dnss_revresponse(std::string reverse, dnsd_question_request *request)
{
char buf[BUFFER_SIZE] = {0};
@ -182,13 +179,13 @@ writesend_dnss_revresponse(std::string reverse, const struct sockaddr *from,
uint32_t out_bytes = write_buffer - bufferBegin;
llarp::LogDebug("Sending reverse: ", reverse, " ", out_bytes, " bytes");
// struct llarp_udp_io *udp = (struct llarp_udp_io *)request->user;
request->sendto_hook(request->user, from, buf, out_bytes);
request->sendto_hook(request->user, request->from, buf, out_bytes);
}
// FIXME: we need an DNS answer not a sockaddr
// otherwise ttl, type and class can't be relayed correctly
void
writesend_dnss_response(llarp::huint32_t *hostRes, const struct sockaddr *from,
writesend_dnss_response(llarp::huint32_t *hostRes,
dnsd_question_request *request)
{
// llarp::Addr test(*from);
@ -196,7 +193,7 @@ writesend_dnss_response(llarp::huint32_t *hostRes, const struct sockaddr *from,
if(!hostRes)
{
llarp::LogWarn("Failed to resolve ", request->question.name);
write404_dnss_response(from, request);
write404_dnss_response(request);
return;
}
@ -250,7 +247,7 @@ writesend_dnss_response(llarp::huint32_t *hostRes, const struct sockaddr *from,
uint32_t out_bytes = write_buffer - bufferBegin;
llarp::LogInfo("Sending found, ", out_bytes, " bytes");
// struct llarp_udp_io *udp = (struct llarp_udp_io *)request->user;
request->sendto_hook(request->user, from, buf, out_bytes);
request->sendto_hook(request->user, request->from, buf, out_bytes);
}
void
@ -350,7 +347,7 @@ handle_dnsc_result(dnsc_answer_request *client_request)
return;
}
client_request->packet.header->id = server_request->id;
client_request->packet.header->id = server_request->id; // stomp ID
std::vector< byte_t > test = packet2bytes(client_request->packet);
// llarp::LogInfo("packet2bytes figures we should send ", test.size(), "
// bytes");
@ -363,6 +360,8 @@ handle_dnsc_result(dnsc_answer_request *client_request)
// llarp::LogDebug("handle_dnsc_result - client request question type",
// std::to_string(client_request->question.type));
/*
if(client_request->question.type == 12)
{
writesend_dnss_revresponse(client_request->revDNS, server_request->from,
@ -392,12 +391,13 @@ handle_dnsc_result(dnsc_answer_request *client_request)
writesend_dnss_response(useHostRes, server_request->from, server_request);
}
llarp_host_resolved(client_request);
*/
}
// our generic version
void
handle_recvfrom(const char *buffer, __attribute__((unused)) ssize_t nbytes,
const struct sockaddr *from, dnsd_question_request *request)
dnsd_question_request *request)
{
const size_t HDR_OFFSET = 12;
const char *p_buffer = buffer;
@ -436,8 +436,8 @@ handle_recvfrom(const char *buffer, __attribute__((unused)) ssize_t nbytes,
llarp::LogInfo("DNS request from ", test2);
*/
sockaddr *fromCopy =
new sockaddr(*from); // make our own sockaddr that won't get cleaned up
// sockaddr *fromCopy = new sockaddr(*from); // make our own sockaddr that
// won't get cleaned up
if(!request)
{
llarp::LogError("request is not configured");
@ -453,7 +453,7 @@ handle_recvfrom(const char *buffer, __attribute__((unused)) ssize_t nbytes,
// llarp::Addr test(*from);
// llarp::LogInfo("from ", test);
dnsd_query_hook_response *intercept =
request->context->intercept(request->question.name, fromCopy, request);
request->context->intercept(request->question.name, request);
// if(!forward_dns_request(m_qName))
if(intercept != nullptr)
{
@ -467,7 +467,7 @@ handle_recvfrom(const char *buffer, __attribute__((unused)) ssize_t nbytes,
{
llarp::LogDebug("HOOKED: sending an immediate override");
// told that hook will handle overrides
writesend_dnss_response(intercept->returnThis, fromCopy, request);
writesend_dnss_response(intercept->returnThis, request);
return;
}
}
@ -477,7 +477,7 @@ handle_recvfrom(const char *buffer, __attribute__((unused)) ssize_t nbytes,
if(!request->context)
{
llarp::LogError("dnsd request context was not a dnsd context");
writesend_dnss_response(nullptr, fromCopy, request);
writesend_dnss_response(nullptr, request);
return;
}
/*
@ -498,7 +498,7 @@ handle_recvfrom(const char *buffer, __attribute__((unused)) ssize_t nbytes,
return;
}
*/
delete fromCopy;
// delete fromCopy;
// call DNSc
if(request->llarp)
{
@ -537,7 +537,7 @@ llarp_handle_dnsd_recvfrom(struct llarp_udp_io *udp,
&llarp_sendto_dns_hook_func; // set sock hook
// llarp::LogInfo("Server request's UDP ", llarp_dns_request->user);
handle_recvfrom((char *)buf, sz, llarp_dns_request->from, llarp_dns_request);
handle_recvfrom((char *)buf, sz, llarp_dns_request);
}
void
@ -556,7 +556,7 @@ raw_handle_recvfrom(int *sockfd, const struct sockaddr *saddr, const void *buf,
llarp_dns_request->user = (void *)sockfd;
llarp_dns_request->llarp = false;
llarp_dns_request->sendto_hook = &raw_sendto_dns_hook_func;
handle_recvfrom((char *)buf, sz, llarp_dns_request->from, llarp_dns_request);
handle_recvfrom((char *)buf, sz, llarp_dns_request);
}
bool

Loading…
Cancel
Save