|
|
@ -199,7 +199,7 @@ namespace llarp
|
|
|
|
TunEndpoint::HandleHookedDNSMessage(
|
|
|
|
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);
|
|
|
|
// llarp::LogInfo("Tun.HandleHookedDNSMessage ", msg.questions[0].qname);
|
|
|
|
if(msg.questions.size() != 1)
|
|
|
|
if(msg.questions.size() != 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
llarp::LogWarn("bad number of dns questions: ", msg.questions.size());
|
|
|
|
llarp::LogWarn("bad number of dns questions: ", msg.questions.size());
|
|
|
@ -244,6 +244,7 @@ namespace llarp
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
msg.AddNXReply();
|
|
|
|
msg.AddNXReply();
|
|
|
|
|
|
|
|
reply(msg);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(msg.questions[0].qtype == dns::qTypeA)
|
|
|
|
else if(msg.questions[0].qtype == dns::qTypeA)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -252,10 +253,7 @@ namespace llarp
|
|
|
|
if(msg.questions[0].qname == "random.snode"
|
|
|
|
if(msg.questions[0].qname == "random.snode"
|
|
|
|
|| msg.questions[0].qname == "random.snode.")
|
|
|
|
|| msg.questions[0].qname == "random.snode.")
|
|
|
|
{
|
|
|
|
{
|
|
|
|
RouterID random;
|
|
|
|
// don't reply to A queries, applications MUST use CNAME queries
|
|
|
|
if(Router()->GetRandomGoodRouter(random))
|
|
|
|
|
|
|
|
msg.AddCNAMEReply(random.ToString(), 1);
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
msg.AddNXReply();
|
|
|
|
msg.AddNXReply();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(msg.questions[0].qname == "localhost.loki"
|
|
|
|
else if(msg.questions[0].qname == "localhost.loki"
|
|
|
@ -297,7 +295,7 @@ namespace llarp
|
|
|
|
// TODO: add hook to EnsurePathToSNode
|
|
|
|
// TODO: add hook to EnsurePathToSNode
|
|
|
|
EnsurePathToSNode(addr.as_array());
|
|
|
|
EnsurePathToSNode(addr.as_array());
|
|
|
|
huint32_t ip = ObtainIPForAddr(addr, true);
|
|
|
|
huint32_t ip = ObtainIPForAddr(addr, true);
|
|
|
|
if (ip.h)
|
|
|
|
if(ip.h)
|
|
|
|
msg.AddINReply(ip);
|
|
|
|
msg.AddINReply(ip);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -357,7 +355,7 @@ namespace llarp
|
|
|
|
// always hook mx records
|
|
|
|
// always hook mx records
|
|
|
|
if(msg.questions[0].qtype == llarp::dns::qTypeMX)
|
|
|
|
if(msg.questions[0].qtype == llarp::dns::qTypeMX)
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
// hook random.snode for CNAME
|
|
|
|
// hook random.snode
|
|
|
|
if(msg.questions[0].qname == "random.snode"
|
|
|
|
if(msg.questions[0].qname == "random.snode"
|
|
|
|
|| msg.questions[0].qname == "random.snode.")
|
|
|
|
|| msg.questions[0].qname == "random.snode.")
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|