mirror of https://github.com/oxen-io/lokinet
fix address mapping bug
This commit is contained in:
parent
5188873288
commit
0828307906
|
@ -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 >
|
||||
|
|
|
@ -148,22 +148,24 @@ namespace llarp
|
|||
handleTickTun(void* u);
|
||||
|
||||
/// get a key for ip address
|
||||
template < typename Addr >
|
||||
Addr
|
||||
template < typename Addr_t >
|
||||
Addr_t
|
||||
ObtainAddrForIP(huint128_t ip, bool isSNode)
|
||||
{
|
||||
Addr_t addr;
|
||||
auto itr = m_IPToAddr.find(ip);
|
||||
if(itr == m_IPToAddr.end() || m_SNodes[itr->second] != isSNode)
|
||||
if(itr != m_IPToAddr.end() and m_SNodes[itr->second] == isSNode)
|
||||
{
|
||||
// not found
|
||||
Addr addr;
|
||||
addr.Zero();
|
||||
return addr;
|
||||
addr = Addr_t(itr->second);
|
||||
}
|
||||
// found
|
||||
return Addr{itr->second};
|
||||
return addr;
|
||||
}
|
||||
|
||||
template < typename Addr_t >
|
||||
bool
|
||||
FindAddrForIP(Addr_t& addr, huint128_t ip);
|
||||
|
||||
bool
|
||||
HasAddress(const AlignedBuffer< 32 >& addr) const
|
||||
{
|
||||
|
@ -314,6 +316,7 @@ namespace llarp
|
|||
void
|
||||
FlushToUser(std::function< bool(net::IPPacket&) > sendfunc);
|
||||
};
|
||||
|
||||
} // namespace handlers
|
||||
} // namespace llarp
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ namespace llarp
|
|||
bool
|
||||
IPPacket::Load(const llarp_buffer_t &pkt)
|
||||
{
|
||||
if(pkt.sz > sizeof(buf))
|
||||
if(pkt.sz > sizeof(buf) or pkt.sz == 0)
|
||||
return false;
|
||||
sz = pkt.sz;
|
||||
std::copy_n(pkt.base, sz, buf);
|
||||
|
|
|
@ -150,7 +150,7 @@ namespace llarp
|
|||
{
|
||||
LogicCall(r->logic(), flushIt);
|
||||
}
|
||||
if(not m_DownstreamGather.disabled())
|
||||
if(m_DownstreamGather.enabled())
|
||||
m_DownstreamGather.pushBack(msg);
|
||||
}
|
||||
m_DownstreamWorkCounter--;
|
||||
|
@ -185,7 +185,7 @@ namespace llarp
|
|||
{
|
||||
LogicCall(r->logic(), flushIt);
|
||||
}
|
||||
if(not m_UpstreamGather.disabled())
|
||||
if(m_UpstreamGather.enabled())
|
||||
m_UpstreamGather.pushBack(msg);
|
||||
}
|
||||
m_UpstreamWorkCounter--;
|
||||
|
|
|
@ -1136,6 +1136,8 @@ namespace llarp
|
|||
Endpoint::SendToServiceOrQueue(const service::Address& remote,
|
||||
const llarp_buffer_t& data, ProtocolType t)
|
||||
{
|
||||
if(data.sz == 0)
|
||||
return false;
|
||||
// inbound converstation
|
||||
const auto now = Now();
|
||||
|
||||
|
|
Loading…
Reference in New Issue