Android & hive fixes

pull/1557/head
Jason Rhinelander 3 years ago
parent 673d065ed8
commit d995766436

@ -100,7 +100,7 @@ namespace llarp
{ {
m_PacketRouter.reset( m_PacketRouter.reset(
new vpn::PacketRouter{[&](net::IPPacket pkt) { HandleGotUserPacket(std::move(pkt)); }}); new vpn::PacketRouter{[&](net::IPPacket pkt) { HandleGotUserPacket(std::move(pkt)); }});
#if ANDROID #ifdef ANDROID
m_Resolver = std::make_shared<DnsInterceptor>(r, this); m_Resolver = std::make_shared<DnsInterceptor>(r, this);
m_PacketRouter->AddUDPHandler(huint16_t{53}, [&](net::IPPacket pkt) { m_PacketRouter->AddUDPHandler(huint16_t{53}, [&](net::IPPacket pkt) {
const size_t ip_header_size = (pkt.Header()->ihl * 4); const size_t ip_header_size = (pkt.Header()->ihl * 4);
@ -111,11 +111,10 @@ namespace llarp
const SockAddr raddr{src.n, *reinterpret_cast<const uint16_t*>(ptr)}; const SockAddr raddr{src.n, *reinterpret_cast<const uint16_t*>(ptr)};
const SockAddr laddr{dst.n, *reinterpret_cast<const uint16_t*>(ptr + 2)}; const SockAddr laddr{dst.n, *reinterpret_cast<const uint16_t*>(ptr + 2)};
std::vector<byte_t> buf; OwnedBuffer buf{pkt.sz - (udp_header_size + ip_header_size)};
buf.resize(pkt.sz - (udp_header_size + ip_header_size)); std::copy_n(ptr + udp_header_size, buf.sz, buf.buf.get());
std::copy_n(ptr + udp_header_size, buf.size(), buf.data());
if (m_Resolver->ShouldHandlePacket(laddr, raddr, buf)) if (m_Resolver->ShouldHandlePacket(laddr, raddr, buf))
m_Resolver->HandlePacket(laddr, raddr, std::move(buf)); m_Resolver->HandlePacket(laddr, raddr, buf);
else else
HandleGotUserPacket(std::move(pkt)); HandleGotUserPacket(std::move(pkt));
}); });

@ -19,7 +19,7 @@
#include <util/logging/logger.hpp> #include <util/logging/logger.hpp>
#include <util/str.hpp> #include <util/str.hpp>
#if ANDROID #ifdef ANDROID
#include <android/ifaddrs.h> #include <android/ifaddrs.h>
#else #else
#ifndef _WIN32 #ifndef _WIN32

@ -8,7 +8,7 @@ namespace tooling
{} {}
std::shared_ptr<llarp::AbstractRouter> std::shared_ptr<llarp::AbstractRouter>
HiveContext::makeRouter(llarp::EventLoop_ptr loop) HiveContext::makeRouter(const llarp::EventLoop_ptr& loop)
{ {
return std::make_shared<HiveRouter>(loop, makeVPNPlatform(), m_hive); return std::make_shared<HiveRouter>(loop, makeVPNPlatform(), m_hive);
} }

@ -12,7 +12,7 @@ namespace tooling
HiveContext(RouterHive* hive); HiveContext(RouterHive* hive);
std::shared_ptr<llarp::AbstractRouter> std::shared_ptr<llarp::AbstractRouter>
makeRouter(llarp::EventLoop_ptr loop) override; makeRouter(const llarp::EventLoop_ptr& loop) override;
/// Get this context's router as a HiveRouter. /// Get this context's router as a HiveRouter.
/// ///

@ -74,11 +74,11 @@ namespace tooling
llarp::LogInfo("Signalling all routers to stop"); llarp::LogInfo("Signalling all routers to stop");
for (auto& [routerId, ctx] : relays) for (auto& [routerId, ctx] : relays)
{ {
ctx->mainloop->call([ctx = ctx]() { ctx->HandleSignal(SIGINT); }); ctx->loop->call([ctx = ctx]() { ctx->HandleSignal(SIGINT); });
} }
for (auto& [routerId, ctx] : clients) for (auto& [routerId, ctx] : clients)
{ {
ctx->mainloop->call([ctx = ctx]() { ctx->HandleSignal(SIGINT); }); ctx->loop->call([ctx = ctx]() { ctx->HandleSignal(SIGINT); });
} }
llarp::LogInfo("Waiting on routers to be stopped"); llarp::LogInfo("Waiting on routers to be stopped");
@ -149,7 +149,7 @@ namespace tooling
RouterHive::VisitRouter(Context_ptr ctx, std::function<void(Context_ptr)> visit) RouterHive::VisitRouter(Context_ptr ctx, std::function<void(Context_ptr)> visit)
{ {
// TODO: this should be called from each router's appropriate Loop, e.g.: // TODO: this should be called from each router's appropriate Loop, e.g.:
// ctx->mainloop->call([visit, ctx]() { visit(ctx); }); // ctx->loop->call([visit, ctx]() { visit(ctx); });
// however, this causes visit calls to be deferred // however, this causes visit calls to be deferred
visit(ctx); visit(ctx);
} }
@ -180,7 +180,7 @@ namespace tooling
size_t done_count = 0; size_t done_count = 0;
for (auto& [routerId, ctx] : relays) for (auto& [routerId, ctx] : relays)
{ {
ctx->mainloop->call([&, i, ctx = ctx]() { ctx->loop->call([&, i, ctx = ctx]() {
size_t count = ctx->router->NumberOfConnectedRouters(); size_t count = ctx->router->NumberOfConnectedRouters();
std::lock_guard guard{results_lock}; std::lock_guard guard{results_lock};
results[i] = count; results[i] = count;

@ -76,7 +76,7 @@ namespace llarp
void void
SendPacket(service::Address remote, std::vector<byte_t> pkt, service::ProtocolType proto) SendPacket(service::Address remote, std::vector<byte_t> pkt, service::ProtocolType proto)
{ {
LogicCall(m_router->logic(), [remote, pkt, proto, self = shared_from_this()]() { m_router->loop()->call([remote, pkt, proto, self = shared_from_this()]() {
self->SendToServiceOrQueue(remote, llarp_buffer_t(pkt), proto); self->SendToServiceOrQueue(remote, llarp_buffer_t(pkt), proto);
}); });
} }

@ -8,7 +8,7 @@ namespace llarp
void void
AbstractRouter_Init(py::module& mod) AbstractRouter_Init(py::module& mod)
{ {
py::class_<AbstractRouter>(mod, "AbstractRouter") py::class_<AbstractRouter, std::shared_ptr<AbstractRouter>>(mod, "AbstractRouter")
.def("rc", &AbstractRouter::rc) .def("rc", &AbstractRouter::rc)
.def("Stop", &AbstractRouter::Stop) .def("Stop", &AbstractRouter::Stop)
.def("peerDb", &AbstractRouter::peerDb); .def("peerDb", &AbstractRouter::peerDb);
@ -21,7 +21,7 @@ namespace tooling
void void
HiveRouter_Init(py::module& mod) HiveRouter_Init(py::module& mod)
{ {
py::class_<HiveRouter, llarp::AbstractRouter>(mod, "HiveRouter") py::class_<HiveRouter, llarp::AbstractRouter, std::shared_ptr<HiveRouter>>(mod, "HiveRouter")
.def("disableGossiping", &HiveRouter::disableGossiping) .def("disableGossiping", &HiveRouter::disableGossiping)
.def("enableGossiping", &HiveRouter::enableGossiping); .def("enableGossiping", &HiveRouter::enableGossiping);
} }

Loading…
Cancel
Save