mirror of https://github.com/oxen-io/lokinet
get rid of deprecated vpnio code in android
parent
b45a268dbc
commit
079604c6cf
@ -1,7 +1,6 @@
|
|||||||
add_library(lokinet-android
|
add_library(lokinet-android
|
||||||
SHARED
|
SHARED
|
||||||
lokinet_config.cpp
|
lokinet_config.cpp
|
||||||
lokinet_daemon.cpp
|
lokinet_daemon.cpp)
|
||||||
lokinet_vpn.cpp)
|
|
||||||
add_log_tag(lokinet-android)
|
add_log_tag(lokinet-android)
|
||||||
target_link_libraries(lokinet-android liblokinet)
|
target_link_libraries(lokinet-android liblokinet)
|
||||||
|
@ -1,144 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <llarp.h>
|
|
||||||
#include <memory>
|
|
||||||
#include <future>
|
|
||||||
#include <string_view>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <jni.h>
|
|
||||||
|
|
||||||
namespace lokinet
|
|
||||||
{
|
|
||||||
struct VPNIO
|
|
||||||
{
|
|
||||||
static VPNIO*
|
|
||||||
Get(llarp_vpn_io* vpn)
|
|
||||||
{
|
|
||||||
return static_cast<VPNIO*>(vpn->user);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~VPNIO() = default;
|
|
||||||
|
|
||||||
llarp_vpn_io io;
|
|
||||||
llarp_vpn_ifaddr_info info{{0}, {0}, 0};
|
|
||||||
std::unique_ptr<std::promise<void>> closeWaiter;
|
|
||||||
|
|
||||||
void
|
|
||||||
Closed()
|
|
||||||
{
|
|
||||||
if (closeWaiter)
|
|
||||||
closeWaiter->set_value();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void
|
|
||||||
InjectSuccess() = 0;
|
|
||||||
|
|
||||||
virtual void
|
|
||||||
InjectFail() = 0;
|
|
||||||
|
|
||||||
virtual void
|
|
||||||
Tick() = 0;
|
|
||||||
|
|
||||||
VPNIO()
|
|
||||||
{
|
|
||||||
io.impl = nullptr;
|
|
||||||
io.user = this;
|
|
||||||
io.closed = [](llarp_vpn_io* vpn) { VPNIO::Get(vpn)->Closed(); };
|
|
||||||
io.injected = [](llarp_vpn_io* vpn, bool good) {
|
|
||||||
VPNIO* ptr = VPNIO::Get(vpn);
|
|
||||||
if (good)
|
|
||||||
ptr->InjectSuccess();
|
|
||||||
else
|
|
||||||
ptr->InjectFail();
|
|
||||||
};
|
|
||||||
io.tick = [](llarp_vpn_io* vpn) { VPNIO::Get(vpn)->Tick(); };
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
Init(llarp::Context* ptr)
|
|
||||||
{
|
|
||||||
if (Ready())
|
|
||||||
return false;
|
|
||||||
return llarp_vpn_io_init(ptr, &io);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
Ready() const
|
|
||||||
{
|
|
||||||
return io.impl != nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Close()
|
|
||||||
{
|
|
||||||
if (not Ready())
|
|
||||||
return;
|
|
||||||
if (closeWaiter)
|
|
||||||
return;
|
|
||||||
closeWaiter = std::make_unique<std::promise<void>>();
|
|
||||||
llarp_vpn_io_close_async(&io);
|
|
||||||
closeWaiter->get_future().wait();
|
|
||||||
closeWaiter.reset();
|
|
||||||
io.impl = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
llarp_vpn_pkt_reader*
|
|
||||||
Reader()
|
|
||||||
{
|
|
||||||
return llarp_vpn_io_packet_reader(&io);
|
|
||||||
}
|
|
||||||
|
|
||||||
llarp_vpn_pkt_writer*
|
|
||||||
Writer()
|
|
||||||
{
|
|
||||||
return llarp_vpn_io_packet_writer(&io);
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t
|
|
||||||
ReadPacket(void* dst, size_t len)
|
|
||||||
{
|
|
||||||
if (not Ready())
|
|
||||||
return -1;
|
|
||||||
unsigned char* buf = (unsigned char*)dst;
|
|
||||||
return llarp_vpn_io_readpkt(Reader(), buf, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
WritePacket(void* pkt, size_t len)
|
|
||||||
{
|
|
||||||
if (not Ready())
|
|
||||||
return false;
|
|
||||||
unsigned char* buf = (unsigned char*)pkt;
|
|
||||||
return llarp_vpn_io_writepkt(Writer(), buf, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SetIfName(std::string_view val)
|
|
||||||
{
|
|
||||||
const auto sz = std::min(val.size(), sizeof(info.ifname));
|
|
||||||
std::copy_n(val.data(), sz, info.ifname);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SetIfAddr(std::string_view val)
|
|
||||||
{
|
|
||||||
const auto sz = std::min(val.size(), sizeof(info.ifaddr));
|
|
||||||
std::copy_n(val.data(), sz, info.ifaddr);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} // namespace lokinet
|
|
||||||
|
|
||||||
struct lokinet_jni_vpnio : public lokinet::VPNIO
|
|
||||||
{
|
|
||||||
void
|
|
||||||
InjectSuccess() override
|
|
||||||
{}
|
|
||||||
|
|
||||||
void
|
|
||||||
InjectFail() override
|
|
||||||
{}
|
|
||||||
|
|
||||||
void
|
|
||||||
Tick() override
|
|
||||||
{}
|
|
||||||
};
|
|
@ -1,85 +0,0 @@
|
|||||||
#include "network_loki_lokinet_LokinetVPN.h"
|
|
||||||
#include "lokinet_jni_vpnio.hpp"
|
|
||||||
#include "lokinet_jni_common.hpp"
|
|
||||||
#include <llarp/net/ip.hpp>
|
|
||||||
#include <llarp/net/ip_packet.hpp>
|
|
||||||
#include <string_view>
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
JNIEXPORT jint JNICALL
|
|
||||||
Java_network_loki_lokinet_LokinetVPN_PacketSize(JNIEnv*, jclass)
|
|
||||||
{
|
|
||||||
return llarp::net::IPPacket::MaxSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT jobject JNICALL
|
|
||||||
Java_network_loki_lokinet_LokinetVPN_Alloc(JNIEnv* env, jclass)
|
|
||||||
{
|
|
||||||
lokinet_jni_vpnio* vpn = new lokinet_jni_vpnio();
|
|
||||||
return env->NewDirectByteBuffer(vpn, sizeof(lokinet_jni_vpnio));
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
|
||||||
Java_network_loki_lokinet_LokinetVPN_Free(JNIEnv* env, jclass, jobject buf)
|
|
||||||
{
|
|
||||||
lokinet_jni_vpnio* vpn = FromBuffer<lokinet_jni_vpnio>(env, buf);
|
|
||||||
if (vpn == nullptr)
|
|
||||||
return;
|
|
||||||
delete vpn;
|
|
||||||
}
|
|
||||||
JNIEXPORT void JNICALL
|
|
||||||
Java_network_loki_lokinet_LokinetVPN_Stop(JNIEnv* env, jobject self)
|
|
||||||
{
|
|
||||||
lokinet_jni_vpnio* vpn = GetImpl<lokinet_jni_vpnio>(env, self);
|
|
||||||
if (vpn)
|
|
||||||
{
|
|
||||||
vpn->Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL
|
|
||||||
Java_network_loki_lokinet_LokinetVPN_ReadPkt(JNIEnv* env, jobject self, jobject pkt)
|
|
||||||
{
|
|
||||||
lokinet_jni_vpnio* vpn = GetImpl<lokinet_jni_vpnio>(env, self);
|
|
||||||
if (vpn == nullptr)
|
|
||||||
return -1;
|
|
||||||
void* pktbuf = env->GetDirectBufferAddress(pkt);
|
|
||||||
auto pktlen = env->GetDirectBufferCapacity(pkt);
|
|
||||||
if (pktbuf == nullptr)
|
|
||||||
return -1;
|
|
||||||
return vpn->ReadPacket(pktbuf, pktlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL
|
|
||||||
Java_network_loki_lokinet_LokinetVPN_WritePkt(JNIEnv* env, jobject self, jobject pkt)
|
|
||||||
{
|
|
||||||
lokinet_jni_vpnio* vpn = GetImpl<lokinet_jni_vpnio>(env, self);
|
|
||||||
if (vpn == nullptr)
|
|
||||||
return false;
|
|
||||||
void* pktbuf = env->GetDirectBufferAddress(pkt);
|
|
||||||
auto pktlen = env->GetDirectBufferCapacity(pkt);
|
|
||||||
if (pktbuf == nullptr)
|
|
||||||
return false;
|
|
||||||
return vpn->WritePacket(pktbuf, pktlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
|
||||||
Java_network_loki_lokinet_LokinetVPN_SetInfo(JNIEnv* env, jobject self, jobject info)
|
|
||||||
{
|
|
||||||
lokinet_jni_vpnio* vpn = GetImpl<lokinet_jni_vpnio>(env, self);
|
|
||||||
if (vpn == nullptr)
|
|
||||||
return;
|
|
||||||
VisitObjectMemberStringAsStringView<bool>(
|
|
||||||
env, info, "ifaddr", [vpn](std::string_view val) -> bool {
|
|
||||||
vpn->SetIfAddr(val);
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
VisitObjectMemberStringAsStringView<bool>(
|
|
||||||
env, info, "ifname", [vpn](std::string_view val) -> bool {
|
|
||||||
vpn->SetIfName(val);
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
vpn->info.netmask = GetObjectMemberAsInt<uint8_t>(env, info, "netmask");
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue