diff --git a/CMakeLists.txt b/CMakeLists.txt
index c5da2a7dc..6c2647676 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -275,7 +275,7 @@ pkg_check_modules(SD libsystemd)
# Default WITH_SYSTEMD to true if we found it
option(WITH_SYSTEMD "enable systemd integration for sd_notify" ${SD_FOUND})
-if(WITH_SYSTEMD)
+if(WITH_SYSTEMD AND (NOT ANDROID))
if(NOT SD_FOUND)
message(FATAL_ERROR "libsystemd not found")
endif()
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index f4a081ccb..33d5bc1e9 100755
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -3,11 +3,7 @@
package="network.loki.lokinet"
android:installLocation="auto"
android:versionCode="1"
- android:versionName="0.3.2">
-
-
+ android:versionName="0.8.0">
diff --git a/android/build.gradle b/android/build.gradle
index dbe7bfe58..d867fc811 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -2,9 +2,10 @@ buildscript {
repositories {
mavenCentral()
jcenter()
+ google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.3'
+ classpath 'com.android.tools.build:gradle:4.0.1'
}
}
@@ -16,31 +17,33 @@ repositories {
maven {
url 'https://maven.google.com'
}
+ google()
}
android {
compileSdkVersion 28
- buildToolsVersion "28.0.1"
defaultConfig {
applicationId "network.loki.lokinet"
targetSdkVersion 28
minSdkVersion 23
versionCode 1
- versionName "0.4.0"
- ndk {
- abiFilters 'armeabi'
- }
+ versionName '0.8.0'
externalNativeBuild {
cmake {
- targets "lokinetandroid"
- arguments "-DANDROID=ON", "-DANDROID_STL=c++_static", "-DANDROID_ARM_NEON=TRUE", "-DLIBUV_ROOT=" + libuvsrc, "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ARM_MODE=arm"
- cppFlags "-fexceptions -std=c++14 -frtti"
+ // targets "lokinet-android"
+ arguments "-DWITH_LTO=OFF", "-DCXXOPTS_BUILD_TESTS=OFF","-DWITH_TESTS=OFF", "-DCMAKE_CROSSCOMPILING=ON", "-DNATIVE_BUILD=OFF", "-DANDROID=ON", "-DANDROID_STL=c++_static", "-DBUILD_STATIC_DEPS=ON", "-DBUILD_SHARED_LIBS=OFF", "-DSTATIC_LINK=ON", "-DDOWNLOAD_UV=FORCE", "-DANDROID_ARM_MODE=arm"
+ cppFlags "-std=c++17"
+ abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
+ // abiFilters 'armeabi-v7a'
+ // abiFilters 'arm64-v8a', 'x86_64', 'armeabi-v7a'
}
}
- packagingOptions{
- doNotStrip "*/armeabi/*.so"
- doNotStrip "*/armeabi-v7a/*.so"
- doNotStrip "*/x86/*.so"
+
+
+ }
+ externalNativeBuild {
+ cmake {
+ path "../CMakeLists.txt"
}
}
sourceSets {
@@ -63,13 +66,16 @@ android {
minifyEnabled true
//signingConfig signingConfigs.jeff
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
+ debuggable false
}
- }
- externalNativeBuild {
- cmake {
- path lokinetCMake
+ debug {
+ // jniDebuggable true
}
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
}
diff --git a/android/readme.md b/android/readme.md
new file mode 100644
index 000000000..647032dea
--- /dev/null
+++ b/android/readme.md
@@ -0,0 +1,33 @@
+# lokinet android
+
+this directory contains basic stuff for lokinet on android.
+
+## Prerequsites
+
+To build you need the following:
+
+* Gradle (6.x)
+* Android SDK (latest version)
+* Android NDK (latest version)
+
+## Building
+
+Next set up the path to Android SDK and NDK in `local.properties`
+
+```
+sdk.dir=/path/to/android/sdk
+ndk.dir=/path/to/android/ndk
+```
+
+Then build:
+
+ $ gradle assemble
+
+This fetches a large amount (several dozen Gigabytes) of files from some
+server somewhere dumping it on your filesystem to make the thing do the
+building, then proceeds to peg all your cores for several dozen minutes
+while it does the required incantations to build 2 apks.
+
+The build outputs apks to to subdirectories in `build/outputs/apk/`
+one called `debug` for debug builds and one called `release` for release builds.
+
diff --git a/android/src/network/loki/lokinet/LokiNetActivity.java b/android/src/network/loki/lokinet/LokiNetActivity.java
index 8654d676b..c36fdc7f6 100755
--- a/android/src/network/loki/lokinet/LokiNetActivity.java
+++ b/android/src/network/loki/lokinet/LokiNetActivity.java
@@ -42,7 +42,7 @@ public class LokiNetActivity extends Activity {
super.onCreate(savedInstanceState);
textView = new TextView(this);
setContentView(textView);
- System.loadLibrary("lokinetandroid");
+ System.loadLibrary("lokinet-android");
}
diff --git a/cmake/StaticBuild.cmake b/cmake/StaticBuild.cmake
index 72a40f3e9..50c9cd29f 100644
--- a/cmake/StaticBuild.cmake
+++ b/cmake/StaticBuild.cmake
@@ -68,6 +68,7 @@ if(CMAKE_CXX_COMPILER_LAUNCHER)
set(deps_cxx "${CMAKE_CXX_COMPILER_LAUNCHER} ${deps_cxx}")
endif()
+
function(expand_urls output source_file)
set(expanded)
foreach(mirror ${ARGN})
@@ -100,6 +101,46 @@ if(CMAKE_CROSSCOMPILING)
set(cross_rc "WINDRES=${CMAKE_RC_COMPILER}")
endif()
endif()
+if(ANDROID)
+ set(android_toolchain_suffix linux-android)
+ set(android_compiler_suffix linux-android23)
+ if(CMAKE_ANDROID_ARCH_ABI MATCHES x86_64)
+ set(android_machine x86_64)
+ set(cross_host "--host=x86_64-linux-android")
+ set(android_compiler_prefix x86_64)
+ set(android_compiler_suffix linux-android23)
+ set(android_toolchain_prefix x86_64)
+ set(android_toolchain_suffix linux-android)
+ elseif(CMAKE_ANDROID_ARCH_ABI MATCHES x86)
+ set(android_machine i686)
+ set(cross_host "--host=i686-linux-android")
+ set(android_compiler_prefix i686)
+ set(android_compiler_suffix linux-android23)
+ set(android_toolchain_prefix i686)
+ set(android_toolchain_suffix linux-android)
+ elseif(CMAKE_ANDROID_ARCH_ABI MATCHES armeabi-v7a)
+ set(android_machine armv7)
+ set(cross_host "--host=armv7a-linux-androideabi")
+ set(android_compiler_prefix armv7a)
+ set(android_compiler_suffix linux-androideabi23)
+ set(android_toolchain_prefix arm)
+ set(android_toolchain_suffix linux-androideabi)
+ elseif(CMAKE_ANDROID_ARCH_ABI MATCHES arm64-v8a)
+ set(android_machine aarch64)
+ set(cross_host "--host=aarch64-linux-android")
+ set(android_compiler_prefix aarch64)
+ set(android_compiler_suffix linux-android23)
+ set(android_toolchain_prefix aarch64)
+ set(android_toolchain_suffix linux-android)
+ else()
+ message(FATAL_ERROR "unknown android arch: ${CMAKE_ANDROID_ARCH_ABI}")
+ endif()
+ set(deps_cc "${CMAKE_ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/${android_compiler_prefix}-${android_compiler_suffix}-clang")
+ set(deps_cxx "${CMAKE_ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/${android_compiler_prefix}-${android_compiler_suffix}-clang++")
+ set(deps_ld "${CMAKE_ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/${android_compiler_prefix}-${android_toolchain_suffix}-ld")
+ set(deps_ranlib "${CMAKE_ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/${android_toolchain_prefix}-${android_toolchain_suffix}-ranlib")
+ set(deps_ar "${CMAKE_ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/${android_toolchain_prefix}-${android_toolchain_suffix}-ar")
+endif()
# Builds a target; takes the target name (e.g. "readline") and builds it in an external project with
@@ -149,11 +190,14 @@ if(CMAKE_CROSSCOMPILING)
set(openssl_system_env SYSTEM=MINGW64 RC=${CMAKE_RC_COMPILER} AR=${ARCH_TRIPLET}-ar RANLIB=${ARCH_TRIPLET}-ranlib)
elseif(ARCH_TRIPLET STREQUAL i686-w64-mingw32)
set(openssl_system_env SYSTEM=MINGW32 RC=${CMAKE_RC_COMPILER} AR=${ARCH_TRIPLET}-ar RANLIB=${ARCH_TRIPLET}-ranlib)
+ elseif(ANDROID)
+ set(openssl_system_env SYSTEM=Linux MACHINE=${android_machine} LD=${deps_ld} RANLIB=${deps_ranlib} AR=${deps_ar})
+ set(openssl_extra_opts no-asm)
endif()
endif()
build_external(openssl
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env CC=${deps_cc} ${openssl_system_env} ./config
- --prefix=${DEPS_DESTDIR} no-shared no-capieng no-dso no-dtls1 no-ec_nistp_64_gcc_128 no-gost
+ --prefix=${DEPS_DESTDIR} ${openssl_extra_opts} no-shared no-capieng no-dso no-dtls1 no-ec_nistp_64_gcc_128 no-gost
no-heartbeats no-md2 no-rc5 no-rdrand no-rfc3779 no-sctp no-ssl-trace no-ssl2 no-ssl3
no-static-engine no-tests no-weak-ssl-ciphers no-zlib no-zlib-dynamic "CFLAGS=-O2 ${flto}"
INSTALL_COMMAND make install_sw
@@ -197,7 +241,8 @@ endif()
-build_external(sodium)
+build_external(sodium CONFIGURE_COMMAND ./configure ${cross_host} ${cross_rc} --prefix=${DEPS_DESTDIR} --disable-shared
+ --enable-static --with-pic "CC=${deps_cc}" "CFLAGS=-O2 ${flto}")
add_static_target(sodium sodium_external libsodium.a)
build_external(sqlite3)
@@ -208,6 +253,7 @@ if(ZMQ_VERSION VERSION_LESS 4.3.4 AND CMAKE_CROSSCOMPILING AND ARCH_TRIPLET MATC
set(zmq_patch
PATCH_COMMAND patch -p1 -i ${PROJECT_SOURCE_DIR}/contrib/cross/patches/libzmq-mingw-closesocket.patch)
endif()
+
build_external(zmq
DEPENDS sodium_external
${zmq_patch}
diff --git a/cmake/unix.cmake b/cmake/unix.cmake
index f090f9b5c..6fc76490c 100644
--- a/cmake/unix.cmake
+++ b/cmake/unix.cmake
@@ -1,5 +1,7 @@
-if(NOT UNIX)
- return()
+if(NOT ANDROID)
+ if(NOT UNIX)
+ return()
+ endif()
endif()
include(CheckCXXSourceCompiles)
@@ -35,8 +37,10 @@ elseif(DOWNLOAD_UV)
add_subdirectory(${LIBUV_ROOT})
set(LIBUV_INCLUDE_DIRS ${LIBUV_ROOT}/include)
set(LIBUV_LIBRARY uv_a)
- add_definitions(-D_LARGEFILE_SOURCE)
- add_definitions(-D_FILE_OFFSET_BITS=64)
+ if(NOT ANDROID)
+ add_definitions(-D_LARGEFILE_SOURCE)
+ add_definitions(-D_FILE_OFFSET_BITS=64)
+ endif()
endif()
include_directories(${LIBUV_INCLUDE_DIRS})
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index e74060996..0500aa9ed 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -46,7 +46,7 @@ set(NTRU_AVX_SRC
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(-mavx2 COMPILER_SUPPORTS_AVX2)
check_cxx_compiler_flag(-mfma COMPILER_SUPPORTS_FMA)
-if(COMPILER_SUPPORTS_AVX2 AND COMPILER_SUPPORTS_FMA)
+if(COMPILER_SUPPORTS_AVX2 AND COMPILER_SUPPORTS_FMA AND (NOT ANDROID))
target_sources(lokinet-cryptography PRIVATE ${NTRU_AVX_SRC})
set_property(SOURCE ${NTRU_AVX_SRC} APPEND PROPERTY COMPILE_FLAGS "-mavx2 -mfma")
message(STATUS "Building libntrup with runtime AVX2/FMA support")
diff --git a/include/llarp.h b/include/llarp.h
index 0a2b4dd39..e86360d9a 100644
--- a/include/llarp.h
+++ b/include/llarp.h
@@ -85,14 +85,13 @@ extern "C"
void
llarp_vpn_io_close_async(struct llarp_vpn_io* io);
- /*
/// give main context a vpn io for mobile when it is reader to do io with
/// associated info tries to give the vpn io to endpoint with name epName a
/// deferred call to llarp_vpn_io.injected is queued unconditionally
/// thread safe
bool
llarp_main_inject_vpn_by_name(
- struct llarp_main* m,
+ struct llarp::Context* m,
const char* epName,
struct llarp_vpn_io* io,
struct llarp_vpn_ifaddr_info info);
@@ -100,11 +99,10 @@ extern "C"
/// give main context a vpn io on its default endpoint
static bool
llarp_main_inject_default_vpn(
- struct llarp_main* m, struct llarp_vpn_io* io, struct llarp_vpn_ifaddr_info info)
+ struct llarp::Context* m, struct llarp_vpn_io* io, struct llarp_vpn_ifaddr_info info)
{
- return llarp_main_inject_vpn_by_name(m, llarp_main_get_default_endpoint_name(m), io, info);
+ return llarp_main_inject_vpn_by_name(m, "default", io, info);
}
- */
#ifdef __cplusplus
}
diff --git a/jni/CMakeLists.txt b/jni/CMakeLists.txt
index 0a4a2825c..b7ec974b3 100644
--- a/jni/CMakeLists.txt
+++ b/jni/CMakeLists.txt
@@ -1,4 +1,5 @@
add_library(lokinet-android
+ SHARED
lokinet_config.cpp
lokinet_daemon.cpp
lokinet_vpn.cpp)
diff --git a/jni/lokinet_config.cpp b/jni/lokinet_config.cpp
index 5a8651b54..cc735e740 100644
--- a/jni/lokinet_config.cpp
+++ b/jni/lokinet_config.cpp
@@ -7,30 +7,29 @@ extern "C"
JNIEXPORT jobject JNICALL
Java_network_loki_lokinet_LokinetConfig_Obtain(JNIEnv* env, jclass)
{
- llarp_config* conf = llarp_default_config();
+ auto conf = new llarp::Config();
if (conf == nullptr)
return nullptr;
- return env->NewDirectByteBuffer(conf, llarp_config_size());
+ return env->NewDirectByteBuffer(conf, sizeof(llarp::Config));
}
JNIEXPORT void JNICALL
Java_network_loki_lokinet_LokinetConfig_Free(JNIEnv* env, jclass, jobject buf)
{
- llarp_config_free(FromBuffer(env, buf));
+ auto ptr = FromBuffer(env, buf);
+ delete ptr;
}
JNIEXPORT jboolean JNICALL
Java_network_loki_lokinet_LokinetConfig_Load(JNIEnv* env, jobject self, jstring fname)
{
- llarp_config* conf = GetImpl(env, self);
+ auto conf = GetImpl(env, self);
if (conf == nullptr)
return JNI_FALSE;
- return VisitStringAsStringView(
- env, fname, [conf](llarp::string_view val) -> jboolean {
- const auto filename = llarp::string_view_string(val);
- if (llarp_config_read_file(conf, filename.c_str()))
- return JNI_TRUE;
- return JNI_FALSE;
- });
+ return VisitStringAsStringView(env, fname, [conf](std::string_view val) -> jboolean {
+ if (conf->Load(val, false, llarp::GetDefaultDataDir()))
+ return JNI_TRUE;
+ return JNI_FALSE;
+ });
}
}
\ No newline at end of file
diff --git a/jni/lokinet_daemon.cpp b/jni/lokinet_daemon.cpp
index 8463c508a..f38e5579e 100644
--- a/jni/lokinet_daemon.cpp
+++ b/jni/lokinet_daemon.cpp
@@ -1,72 +1,81 @@
#include "network_loki_lokinet_LokinetDaemon.h"
#include "lokinet_jni_common.hpp"
#include "lokinet_jni_vpnio.hpp"
-#include
+#include
extern "C"
{
JNIEXPORT jobject JNICALL
Java_network_loki_lokinet_LokinetDaemon_Obtain(JNIEnv* env, jclass)
{
- llarp_main* ptr = llarp_main_default_init();
+ auto* ptr = new llarp::Context();
if (ptr == nullptr)
return nullptr;
- return env->NewDirectByteBuffer(ptr, llarp_main_size());
+ return env->NewDirectByteBuffer(ptr, sizeof(llarp::Context));
}
JNIEXPORT void JNICALL
Java_network_loki_lokinet_LokinetDaemon_Free(JNIEnv* env, jclass, jobject buf)
{
- llarp_main* ptr = FromBuffer(env, buf);
- llarp_main_free(ptr);
+ auto ptr = FromBuffer(env, buf);
+ delete ptr;
}
JNIEXPORT jboolean JNICALL
Java_network_loki_lokinet_LokinetDaemon_Configure(JNIEnv* env, jobject self, jobject conf)
{
- llarp_main* ptr = GetImpl(env, self);
- llarp_config* config = GetImpl(env, conf);
+ auto ptr = GetImpl(env, self);
+ auto config = GetImpl(env, conf);
if (ptr == nullptr || config == nullptr)
return JNI_FALSE;
- if (llarp_main_configure(ptr, config))
- return JNI_TRUE;
- return llarp_main_setup(ptr) == 0 ? JNI_TRUE : JNI_FALSE;
+ try
+ {
+ llarp::RuntimeOptions opts{};
+ ptr->Configure(*config);
+ ptr->Setup(opts);
+ }
+ catch (...)
+ {
+ return JNI_FALSE;
+ }
+ return JNI_TRUE;
}
JNIEXPORT jint JNICALL
Java_network_loki_lokinet_LokinetDaemon_Mainloop(JNIEnv* env, jobject self)
{
- static llarp_main_runtime_opts opts;
- llarp_main* ptr = GetImpl(env, self);
+ auto ptr = GetImpl(env, self);
if (ptr == nullptr)
return -1;
- return llarp_main_run(ptr, opts);
+ llarp::RuntimeOptions opts{};
+ return ptr->Run(opts);
}
JNIEXPORT jboolean JNICALL
Java_network_loki_lokinet_LokinetDaemon_IsRunning(JNIEnv* env, jobject self)
{
- llarp_main* ptr = GetImpl(env, self);
- return (ptr != nullptr && llarp_main_is_running(ptr)) ? JNI_TRUE : JNI_FALSE;
+ auto ptr = GetImpl(env, self);
+ return (ptr != nullptr && ptr->IsUp()) ? JNI_TRUE : JNI_FALSE;
}
JNIEXPORT jboolean JNICALL
Java_network_loki_lokinet_LokinetDaemon_Stop(JNIEnv* env, jobject self)
{
- llarp_main* ptr = GetImpl(env, self);
+ auto ptr = GetImpl(env, self);
if (ptr == nullptr)
return JNI_FALSE;
- if (not llarp_main_is_running(ptr))
+ if (not ptr->IsUp())
return JNI_FALSE;
- llarp_main_stop(ptr);
- return llarp_main_is_running(ptr) ? JNI_FALSE : JNI_TRUE;
+ ptr->CloseAsync();
+ ptr->Wait();
+ return ptr->IsUp() ? JNI_FALSE : JNI_TRUE;
}
JNIEXPORT jboolean JNICALL
Java_network_loki_lokinet_LokinetDaemon_InjectVPN(JNIEnv* env, jobject self, jobject vpn)
{
- llarp_main* ptr = GetImpl(env, self);
- lokinet_jni_vpnio* impl = GetImpl(env, vpn);
+ auto ptr = GetImpl(env, self);
+ auto impl = GetImpl(env, vpn);
if (ptr == nullptr || impl == nullptr)
return JNI_FALSE;
if (impl->info.netmask == 0)
diff --git a/jni/lokinet_jni_common.hpp b/jni/lokinet_jni_common.hpp
index 04be43226..0b162e54a 100644
--- a/jni/lokinet_jni_common.hpp
+++ b/jni/lokinet_jni_common.hpp
@@ -2,7 +2,7 @@
#define LOKINET_JNI_COMMON_HPP
#include
-#include
+#include
#include
/// visit string as native bytes
@@ -21,7 +21,7 @@ VisitStringAsStringView(JNIEnv* env, jobject str, V visit)
const size_t length = env->GetArrayLength(stringJbytes);
jbyte* pBytes = env->GetByteArrayElements(stringJbytes, NULL);
- T result = visit(llarp::string_view((const char*)pBytes, length));
+ T result = visit(std::string_view((const char*)pBytes, length));
env->ReleaseByteArrayElements(stringJbytes, pBytes, JNI_ABORT);
env->DeleteLocalRef(stringJbytes);
diff --git a/jni/lokinet_jni_vpnio.hpp b/jni/lokinet_jni_vpnio.hpp
index beb1b767c..fd2f374c7 100644
--- a/jni/lokinet_jni_vpnio.hpp
+++ b/jni/lokinet_jni_vpnio.hpp
@@ -4,7 +4,7 @@
#include
#include
#include
-#include
+#include
#include
#include
@@ -56,7 +56,7 @@ namespace lokinet
}
bool
- Init(llarp_main* ptr)
+ Init(llarp::Context* ptr)
{
if (Ready())
return false;
@@ -114,14 +114,14 @@ namespace lokinet
}
void
- SetIfName(llarp::string_view val)
+ 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(llarp::string_view val)
+ SetIfAddr(std::string_view val)
{
const auto sz = std::min(val.size(), sizeof(info.ifaddr));
std::copy_n(val.data(), sz, info.ifaddr);
diff --git a/jni/lokinet_vpn.cpp b/jni/lokinet_vpn.cpp
index 073f47551..43adb76cf 100644
--- a/jni/lokinet_vpn.cpp
+++ b/jni/lokinet_vpn.cpp
@@ -2,6 +2,8 @@
#include "lokinet_jni_vpnio.hpp"
#include "lokinet_jni_common.hpp"
#include
+#include
+#include
extern "C"
{
@@ -69,12 +71,12 @@ extern "C"
if (vpn == nullptr)
return;
VisitObjectMemberStringAsStringView(
- env, info, "ifaddr", [vpn](llarp::string_view val) -> bool {
+ env, info, "ifaddr", [vpn](std::string_view val) -> bool {
vpn->SetIfAddr(val);
return true;
});
VisitObjectMemberStringAsStringView(
- env, info, "ifname", [vpn](llarp::string_view val) -> bool {
+ env, info, "ifname", [vpn](std::string_view val) -> bool {
vpn->SetIfName(val);
return true;
});
diff --git a/llarp/net/route.cpp b/llarp/net/route.cpp
index ca94c6ccf..18107f027 100644
--- a/llarp/net/route.cpp
+++ b/llarp/net/route.cpp
@@ -6,8 +6,10 @@
#include
#include
#include
+#ifndef ANDROID
#include
#include
+#endif
#include
#include
#include
@@ -76,6 +78,7 @@ namespace llarp::net
#endif
#ifdef __linux__
+#ifndef ANDROID
struct NLSocket
{
NLSocket() : fd(socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE))
@@ -217,12 +220,13 @@ namespace llarp::net
}
#endif
-
+#endif
void
AddRoute(std::string ip, std::string gateway)
{
LogInfo("Add route: ", ip, " via ", gateway);
#ifdef __linux__
+#ifndef ANDROID
NLSocket sock;
int default_gw = 0;
int if_idx = 0;
@@ -233,6 +237,7 @@ namespace llarp::net
read_addr(gateway.c_str(), &gw_addr);
read_addr(ip.c_str(), &to_addr);
do_route(sock.fd, nl_cmd, nl_flags, &to_addr, &gw_addr, default_gw, if_idx);
+#endif
#else
std::stringstream ss;
#if _WIN32
@@ -251,6 +256,7 @@ namespace llarp::net
{
LogInfo("Delete route: ", ip, " via ", gateway);
#ifdef __linux__
+#ifndef ANDROID
NLSocket sock;
int default_gw = 0;
int if_idx = 0;
@@ -261,6 +267,7 @@ namespace llarp::net
read_addr(gateway.c_str(), &gw_addr);
read_addr(ip.c_str(), &to_addr);
do_route(sock.fd, nl_cmd, nl_flags, &to_addr, &gw_addr, default_gw, if_idx);
+#endif
#else
std::stringstream ss;
#if _WIN32
@@ -279,6 +286,7 @@ namespace llarp::net
{
LogInfo("Add default route via ", ifname);
#ifdef __linux__
+#ifndef ANDROID
NLSocket sock;
int default_gw = 1;
int if_idx = if_nametoindex(ifname.c_str());
@@ -292,6 +300,7 @@ namespace llarp::net
int nl_flags = NLM_F_CREATE | NLM_F_EXCL;
read_addr(maybe->toHost().c_str(), &gw_addr);
do_route(sock.fd, nl_cmd, nl_flags, &to_addr, &gw_addr, default_gw, if_idx);
+#endif
#elif _WIN32
ifname.back()++;
Execute("route ADD 0.0.0.0 MASK 128.0.0.0 " + ifname);
@@ -309,6 +318,7 @@ namespace llarp::net
{
LogInfo("Remove default route via ", ifname);
#ifdef __linux__
+#ifndef ANDROID
NLSocket sock;
int default_gw = 1;
int if_idx = if_nametoindex(ifname.c_str());
@@ -322,6 +332,7 @@ namespace llarp::net
int nl_flags = 0;
read_addr(maybe->toHost().c_str(), &gw_addr);
do_route(sock.fd, nl_cmd, nl_flags, &to_addr, &gw_addr, default_gw, if_idx);
+#endif
#elif _WIN32
ifname.back()++;
Execute("route DELETE 0.0.0.0 MASK 128.0.0.0 " + ifname);
diff --git a/llarp/util/logging/android_logger.cpp b/llarp/util/logging/android_logger.cpp
index 53c772139..9edab801d 100644
--- a/llarp/util/logging/android_logger.cpp
+++ b/llarp/util/logging/android_logger.cpp
@@ -16,7 +16,9 @@ namespace llarp
return;
case eLogTrace:
ss << "[TRC] ";
- break case eLogDebug : ss << "[DBG] ";
+ break;
+ case eLogDebug:
+ ss << "[DBG] ";
break;
case eLogInfo:
ss << "[NFO] ";
@@ -50,8 +52,6 @@ namespace llarp
switch (lvl)
{
case eLogTrace:
- __android_log_write(ANDROID_LOG_TRACE, str.c_str(), msg.c_str());
- return;
case eLogDebug:
__android_log_write(ANDROID_LOG_DEBUG, str.c_str(), msg.c_str());
return;
diff --git a/llarp/util/logging/android_logger.hpp b/llarp/util/logging/android_logger.hpp
index 9c9cc87ee..3069928a5 100644
--- a/llarp/util/logging/android_logger.hpp
+++ b/llarp/util/logging/android_logger.hpp
@@ -24,6 +24,9 @@ namespace llarp
PostLog(std::stringstream&) const override;
void Tick(llarp_time_t) override;
+
+ void
+ ImmediateFlush() override{};
};
} // namespace llarp