|
|
@ -233,15 +233,13 @@ namespace llarp
|
|
|
|
static bool
|
|
|
|
static bool
|
|
|
|
is_random_snode(const dns::Message &msg)
|
|
|
|
is_random_snode(const dns::Message &msg)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return msg.questions[0].qname == "random.snode"
|
|
|
|
return msg.questions[0].IsName("random.snode");
|
|
|
|
|| msg.questions[0].qname == "random.snode.";
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static bool
|
|
|
|
static bool
|
|
|
|
is_localhost_loki(const dns::Message &msg)
|
|
|
|
is_localhost_loki(const dns::Message &msg)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return msg.questions[0].qname == "localhost.loki"
|
|
|
|
return msg.questions[0].IsName("localhost.loki");
|
|
|
|
|| msg.questions[0].qname == "localhost.loki.";
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
bool
|
|
|
@ -255,7 +253,7 @@ namespace llarp
|
|
|
|
llarp::LogWarn("bad number of dns questions: ", msg.questions.size());
|
|
|
|
llarp::LogWarn("bad number of dns questions: ", msg.questions.size());
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
std::string qname = msg.questions[0].qname;
|
|
|
|
const std::string qname = msg.questions[0].Name();
|
|
|
|
if(msg.questions[0].qtype == dns::qTypeMX)
|
|
|
|
if(msg.questions[0].qtype == dns::qTypeMX)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// mx record
|
|
|
|
// mx record
|
|
|
@ -340,8 +338,8 @@ namespace llarp
|
|
|
|
using service::OutboundContext;
|
|
|
|
using service::OutboundContext;
|
|
|
|
return EnsurePathToService(
|
|
|
|
return EnsurePathToService(
|
|
|
|
addr,
|
|
|
|
addr,
|
|
|
|
[=](const Address &remote, OutboundContext *ctx) {
|
|
|
|
[=](const Address &, OutboundContext *ctx) {
|
|
|
|
SendDNSReply(remote, ctx, replyMsg, reply, false, isV6);
|
|
|
|
SendDNSReply(addr, ctx, replyMsg, reply, false, isV6);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
2000);
|
|
|
|
2000);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -350,9 +348,8 @@ namespace llarp
|
|
|
|
{
|
|
|
|
{
|
|
|
|
dns::Message *replyMsg = new dns::Message(std::move(msg));
|
|
|
|
dns::Message *replyMsg = new dns::Message(std::move(msg));
|
|
|
|
EnsurePathToSNode(
|
|
|
|
EnsurePathToSNode(
|
|
|
|
addr.as_array(),
|
|
|
|
addr.as_array(), [=](const RouterID &, exit::BaseSession_ptr s) {
|
|
|
|
[=](const RouterID &remote, exit::BaseSession_ptr s) {
|
|
|
|
SendDNSReply(addr, s, replyMsg, reply, true, isV6);
|
|
|
|
SendDNSReply(remote, s, replyMsg, reply, true, isV6);
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -407,18 +404,17 @@ namespace llarp
|
|
|
|
if(msg.questions.size() == 1)
|
|
|
|
if(msg.questions.size() == 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// hook random.snode
|
|
|
|
// hook random.snode
|
|
|
|
if(msg.questions[0].qname == "random.snode"
|
|
|
|
if(msg.questions[0].IsName("random.snode"))
|
|
|
|
|| msg.questions[0].qname == "random.snode.")
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
// hook localhost.loki
|
|
|
|
// hook localhost.loki
|
|
|
|
if(msg.questions[0].qname == "localhost.loki"
|
|
|
|
if(msg.questions[0].IsName("localhost.loki"))
|
|
|
|
|| msg.questions[0].qname == "localhost.loki.")
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
const std::string name = msg.questions[0].Name();
|
|
|
|
// hook .loki
|
|
|
|
// hook .loki
|
|
|
|
if(addr.FromString(msg.questions[0].qname, ".loki"))
|
|
|
|
if(addr.FromString(name, ".loki"))
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
// hook .snode
|
|
|
|
// hook .snode
|
|
|
|
if(addr.FromString(msg.questions[0].qname, ".snode"))
|
|
|
|
if(addr.FromString(name, ".snode"))
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
// hook any ranges we own
|
|
|
|
// hook any ranges we own
|
|
|
|
if(msg.questions[0].qtype == llarp::dns::qTypePTR)
|
|
|
|
if(msg.questions[0].qtype == llarp::dns::qTypePTR)
|
|
|
|