mirror of
https://github.com/oxen-io/lokinet
synced 2023-12-14 06:53:00 +01:00
handle snode and clean up codepath for hooked dns
This commit is contained in:
parent
e8f262ba1c
commit
9c30ff7a26
5 changed files with 34 additions and 14 deletions
|
@ -24,7 +24,7 @@ namespace llarp
|
|||
|
||||
/// handle a hooked message
|
||||
virtual bool
|
||||
HandleHookedDNSMessage(dns::Message&& query,
|
||||
HandleHookedDNSMessage(Message query,
|
||||
std::function< void(Message) > sendReply) = 0;
|
||||
};
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ namespace llarp
|
|||
|
||||
bool
|
||||
ExitEndpoint::HandleHookedDNSMessage(
|
||||
dns::Message &&msg, std::function< void(dns::Message) > reply)
|
||||
dns::Message msg, std::function< void(dns::Message) > reply)
|
||||
{
|
||||
if(msg.questions[0].qtype == dns::qTypePTR)
|
||||
{
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace llarp
|
|||
ShouldHookDNSMessage(const dns::Message& msg) const override;
|
||||
|
||||
bool
|
||||
HandleHookedDNSMessage(dns::Message&& msg,
|
||||
HandleHookedDNSMessage(dns::Message msg,
|
||||
std::function< void(dns::Message) >) override;
|
||||
|
||||
bool
|
||||
|
|
|
@ -391,9 +391,19 @@ namespace llarp
|
|||
return false;
|
||||
}
|
||||
|
||||
static dns::Message &
|
||||
clear_dns_message(dns::Message &msg)
|
||||
{
|
||||
msg.authorities.resize(0);
|
||||
msg.additional.resize(0);
|
||||
msg.answers.resize(0);
|
||||
msg.hdr_fields &= ~dns::flags_RCODENameError;
|
||||
return msg;
|
||||
}
|
||||
|
||||
bool
|
||||
TunEndpoint::HandleHookedDNSMessage(
|
||||
dns::Message &&msg, std::function< void(dns::Message) > reply)
|
||||
dns::Message msg, std::function< void(dns::Message) > reply)
|
||||
{
|
||||
// llarp::LogInfo("Tun.HandleHookedDNSMessage ", msg.questions[0].qname, "
|
||||
// of type", msg.questions[0].qtype);
|
||||
|
@ -401,7 +411,23 @@ namespace llarp
|
|||
if(msg.answers.size() > 0)
|
||||
{
|
||||
const auto &answer = msg.answers[0];
|
||||
if(answer.HasCNameForTLD(".loki"))
|
||||
if(answer.HasCNameForTLD(".snode"))
|
||||
{
|
||||
dns::Name_t qname;
|
||||
llarp_buffer_t buf(answer.rData);
|
||||
if(not dns::DecodeName(&buf, qname, true))
|
||||
return false;
|
||||
RouterID addr;
|
||||
if(not addr.FromString(qname))
|
||||
return false;
|
||||
auto replyMsg =
|
||||
std::make_shared< dns::Message >(clear_dns_message(msg));
|
||||
return EnsurePathToSNode(
|
||||
addr.as_array(), [=](const RouterID &, exit::BaseSession_ptr s) {
|
||||
SendDNSReply(addr, s, replyMsg, reply, true, false);
|
||||
});
|
||||
}
|
||||
else if(answer.HasCNameForTLD(".loki"))
|
||||
{
|
||||
dns::Name_t qname;
|
||||
llarp_buffer_t buf(answer.rData);
|
||||
|
@ -409,14 +435,8 @@ namespace llarp
|
|||
return false;
|
||||
service::Address addr;
|
||||
if(not addr.FromString(qname))
|
||||
{
|
||||
LogError("bad name ", qname);
|
||||
return false;
|
||||
}
|
||||
msg.authorities.resize(0);
|
||||
msg.additional.resize(0);
|
||||
msg.answers.resize(0);
|
||||
msg.hdr_fields &= ~dns::flags_RCODENameError;
|
||||
clear_dns_message(msg);
|
||||
if(HasAddress(addr))
|
||||
{
|
||||
huint128_t ip = ObtainIPForAddr(addr, false);
|
||||
|
@ -426,7 +446,7 @@ namespace llarp
|
|||
}
|
||||
else
|
||||
{
|
||||
auto replyMsg = std::make_shared< dns::Message >(std::move(msg));
|
||||
auto replyMsg = std::make_shared< dns::Message >(msg);
|
||||
using service::Address;
|
||||
using service::OutboundContext;
|
||||
return EnsurePathToService(
|
||||
|
|
|
@ -50,7 +50,7 @@ namespace llarp
|
|||
|
||||
bool
|
||||
HandleHookedDNSMessage(
|
||||
dns::Message&& query,
|
||||
dns::Message query,
|
||||
std::function< void(dns::Message) > sendreply) override;
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in a new issue