|
|
|
@ -9,12 +9,13 @@ namespace llarp
|
|
|
|
|
namespace dns
|
|
|
|
|
{
|
|
|
|
|
Proxy::Proxy(llarp_ev_loop_ptr serverLoop, Logic_ptr serverLogic,
|
|
|
|
|
llarp_ev_loop_ptr clientLoop, Logic_ptr clientLogic, IQueryHandler* h)
|
|
|
|
|
: m_ServerLoop(serverLoop),
|
|
|
|
|
m_ServerLogic(serverLogic),
|
|
|
|
|
m_ClientLoop(clientLoop),
|
|
|
|
|
m_ClientLogic(clientLogic),
|
|
|
|
|
m_QueryHandler(h)
|
|
|
|
|
llarp_ev_loop_ptr clientLoop, Logic_ptr clientLogic,
|
|
|
|
|
IQueryHandler* h)
|
|
|
|
|
: m_ServerLoop(serverLoop)
|
|
|
|
|
, m_ServerLogic(serverLogic)
|
|
|
|
|
, m_ClientLoop(clientLoop)
|
|
|
|
|
, m_ClientLogic(clientLogic)
|
|
|
|
|
, m_QueryHandler(h)
|
|
|
|
|
{
|
|
|
|
|
m_Client.user = this;
|
|
|
|
|
m_Server.user = this;
|
|
|
|
@ -125,16 +126,16 @@ namespace llarp
|
|
|
|
|
auto itr = m_Forwarded.find(tx);
|
|
|
|
|
if(itr == m_Forwarded.end())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const Addr requester = itr->second;
|
|
|
|
|
std::vector<byte_t> tmp(pkt->sz);
|
|
|
|
|
std::vector< byte_t > tmp(pkt->sz);
|
|
|
|
|
std::copy_n(pkt->cur, pkt->sz, tmp.begin());
|
|
|
|
|
auto self = shared_from_this();
|
|
|
|
|
m_ServerLogic->queue_func([=]() {
|
|
|
|
|
// forward reply to requester via server
|
|
|
|
|
llarp_buffer_t tmpbuf(tmp);
|
|
|
|
|
llarp_ev_udp_sendto(&self->m_Server, requester, tmpbuf);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
// remove pending
|
|
|
|
|
m_Forwarded.erase(itr);
|
|
|
|
|
}
|
|
|
|
@ -172,7 +173,7 @@ namespace llarp
|
|
|
|
|
// no upstream resolvers
|
|
|
|
|
// let's serv fail it
|
|
|
|
|
msg.AddServFail();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SendServerMessageTo(from, std::move(msg));
|
|
|
|
|
}
|
|
|
|
|
else if(itr == m_Forwarded.end())
|
|
|
|
@ -180,13 +181,13 @@ namespace llarp
|
|
|
|
|
// new forwarded query
|
|
|
|
|
tx.from = PickRandomResolver();
|
|
|
|
|
m_Forwarded[tx] = from;
|
|
|
|
|
std::vector<byte_t> tmp(pkt->sz);
|
|
|
|
|
std::vector< byte_t > tmp(pkt->sz);
|
|
|
|
|
std::copy_n(pkt->cur, pkt->sz, tmp.begin());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_ClientLogic->queue_func([=] {
|
|
|
|
|
// do query
|
|
|
|
|
llarp_buffer_t buf(tmp);
|
|
|
|
|
llarp_ev_udp_sendto(&self->m_Client, tx.from, buf);
|
|
|
|
|
llarp_ev_udp_sendto(&self->m_Client, tx.from, buf);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|