add an A Record for random.snode so that it works

pull/1183/head
Jeff Becker 4 years ago
parent ec2f6912d8
commit 4452b152aa
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -407,8 +407,26 @@ namespace llarp
TunEndpoint::HandleHookedDNSMessage(
dns::Message msg, std::function< void(dns::Message) > reply)
{
// llarp::LogInfo("Tun.HandleHookedDNSMessage ", msg.questions[0].qname, "
// of type", msg.questions[0].qtype);
auto ReplyToSNodeDNSWhenReady = [self = this, reply = reply](
RouterID snode, auto msg,
bool isV6) -> bool {
return self->EnsurePathToSNode(
snode, [=](const RouterID &, exit::BaseSession_ptr s) {
self->SendDNSReply(snode, s, msg, reply, true, isV6);
});
};
auto ReplyToLokiDNSWhenReady = [self = this, reply = reply](
service::Address addr, auto msg,
bool isV6) -> bool {
using service::Address;
using service::OutboundContext;
return self->EnsurePathToService(
addr,
[=](const Address &, OutboundContext *ctx) {
self->SendDNSReply(addr, ctx, msg, reply, false, isV6);
},
2s);
};
std::string qname;
if(msg.answers.size() > 0)
{
@ -424,10 +442,7 @@ namespace llarp
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);
});
return ReplyToSNodeDNSWhenReady(addr, std::move(replyMsg), false);
}
else if(answer.HasCNameForTLD(".loki"))
{
@ -438,26 +453,9 @@ namespace llarp
service::Address addr;
if(not addr.FromString(qname))
return false;
clear_dns_message(msg);
if(HasAddress(addr))
{
huint128_t ip = ObtainIPForAddr(addr, false);
msg.AddINReply(ip, false);
reply(msg);
return true;
}
else
{
auto replyMsg = std::make_shared< dns::Message >(std::move(msg));
using service::Address;
using service::OutboundContext;
return EnsurePathToService(
addr,
[=](const Address &, OutboundContext *ctx) {
SendDNSReply(addr, ctx, replyMsg, reply, false, false);
},
2s);
}
auto replyMsg =
std::make_shared< dns::Message >(clear_dns_message(msg));
return ReplyToLokiDNSWhenReady(addr, replyMsg, false);
}
}
if(msg.questions.size() != 1)
@ -484,7 +482,9 @@ namespace llarp
{
RouterID random;
if(Router()->GetRandomGoodRouter(random))
{
msg.AddCNAMEReply(random.ToString(), 1);
}
else
msg.AddNXReply();
}
@ -521,7 +521,11 @@ namespace llarp
{
RouterID random;
if(Router()->GetRandomGoodRouter(random))
{
msg.AddCNAMEReply(random.ToString(), 1);
return ReplyToSNodeDNSWhenReady(
random, std::make_shared< dns::Message >(msg), isV6);
}
else
msg.AddNXReply();
}
@ -550,23 +554,10 @@ namespace llarp
{
msg.hdr_fields |= dns::flags_QR | dns::flags_AA | dns::flags_RA;
}
else if(HasAddress(addr))
{
huint128_t ip = ObtainIPForAddr(addr, false);
msg.AddINReply(ip, isV6);
}
else
{
auto replyMsg = std::make_shared< dns::Message >(msg);
using service::Address;
using service::OutboundContext;
return EnsurePathToService(
addr,
[=](const Address &, OutboundContext *ctx) {
SendDNSReply(addr, ctx, replyMsg, reply, false,
isV6 || !isV4);
},
2s);
return ReplyToLokiDNSWhenReady(
addr, std::make_shared< dns::Message >(msg), isV6);
}
}
else if(addr.FromString(qname, ".snode"))
@ -577,12 +568,8 @@ namespace llarp
}
else
{
auto replyMsg = std::make_shared< dns::Message >(std::move(msg));
return EnsurePathToSNode(
addr.as_array(),
[=](const RouterID &, exit::BaseSession_ptr s) {
SendDNSReply(addr, s, replyMsg, reply, true, isV6);
});
return ReplyToSNodeDNSWhenReady(
addr.as_array(), std::make_shared< dns::Message >(msg), isV6);
}
}
else

Loading…
Cancel
Save