|
|
|
@ -336,6 +336,32 @@ namespace llarp
|
|
|
|
|
return msg.questions[0].IsName("localhost.loki");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <>
|
|
|
|
|
bool
|
|
|
|
|
TunEndpoint::FindAddrForIP(service::Address &addr, huint128_t ip)
|
|
|
|
|
{
|
|
|
|
|
auto itr = m_IPToAddr.find(ip);
|
|
|
|
|
if(itr != m_IPToAddr.end() and not m_SNodes[itr->second])
|
|
|
|
|
{
|
|
|
|
|
addr = service::Address(itr->second.as_array());
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <>
|
|
|
|
|
bool
|
|
|
|
|
TunEndpoint::FindAddrForIP(RouterID &addr, huint128_t ip)
|
|
|
|
|
{
|
|
|
|
|
auto itr = m_IPToAddr.find(ip);
|
|
|
|
|
if(itr != m_IPToAddr.end() and m_SNodes[itr->second])
|
|
|
|
|
{
|
|
|
|
|
addr = RouterID(itr->second.as_array());
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
TunEndpoint::HandleHookedDNSMessage(
|
|
|
|
|
dns::Message &&msg, std::function< void(dns::Message) > reply)
|
|
|
|
@ -479,18 +505,17 @@ namespace llarp
|
|
|
|
|
reply(msg);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
llarp::service::Address addr(
|
|
|
|
|
ObtainAddrForIP< llarp::service::Address >(ip, true));
|
|
|
|
|
if(!addr.IsZero())
|
|
|
|
|
RouterID snodeAddr;
|
|
|
|
|
if(FindAddrForIP(snodeAddr, ip))
|
|
|
|
|
{
|
|
|
|
|
msg.AddAReply(addr.ToString(".snode"));
|
|
|
|
|
msg.AddAReply(snodeAddr.ToString());
|
|
|
|
|
reply(msg);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
addr = ObtainAddrForIP< llarp::service::Address >(ip, false);
|
|
|
|
|
if(!addr.IsZero())
|
|
|
|
|
service::Address lokiAddr;
|
|
|
|
|
if(FindAddrForIP(lokiAddr, ip))
|
|
|
|
|
{
|
|
|
|
|
msg.AddAReply(addr.ToString(".loki"));
|
|
|
|
|
msg.AddAReply(lokiAddr.ToString());
|
|
|
|
|
reply(msg);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
@ -708,7 +733,13 @@ namespace llarp
|
|
|
|
|
llarp::LogInfo(Name(), " allocated up to ", m_MaxIP, " on range ",
|
|
|
|
|
m_OurRange);
|
|
|
|
|
|
|
|
|
|
MapAddress(m_Identity.pub.Addr(), GetIfAddr(), IsSNode());
|
|
|
|
|
const service::Address ourAddr = m_Identity.pub.Addr();
|
|
|
|
|
|
|
|
|
|
if(not MapAddress(ourAddr, GetIfAddr(), false))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(m_OnUp)
|
|
|
|
|
{
|
|
|
|
|
m_OnUp->NotifyAsync(NotifyParams());
|
|
|
|
@ -717,8 +748,8 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
vpnif->injected(vpnif, true);
|
|
|
|
|
}
|
|
|
|
|
auto itr = m_IPToAddr.find(GetIFAddr());
|
|
|
|
|
return itr != m_IPToAddr.end() && itr->second == m_Identity.pub.Addr();
|
|
|
|
|
|
|
|
|
|
return HasAddress(ourAddr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::unordered_map< std::string, std::string >
|
|
|
|
|