diff --git a/jni/java/src/network/loki/lokinet/LokinetDaemon.java b/jni/java/src/network/loki/lokinet/LokinetDaemon.java index 072d21ab4..b1c485354 100644 --- a/jni/java/src/network/loki/lokinet/LokinetDaemon.java +++ b/jni/java/src/network/loki/lokinet/LokinetDaemon.java @@ -26,6 +26,9 @@ public class LokinetDaemon extends VpnService private static native String DetectFreeRange(); + public native String DumpStatus(); + + public static final String LOG_TAG = "LokinetDaemon"; ByteBuffer impl = null; diff --git a/jni/lokinet_daemon.cpp b/jni/lokinet_daemon.cpp index 465078851..8de704ae8 100644 --- a/jni/lokinet_daemon.cpp +++ b/jni/lokinet_daemon.cpp @@ -2,6 +2,7 @@ #include "lokinet_jni_common.hpp" #include #include +#include extern "C" { @@ -99,4 +100,23 @@ extern "C" } return env->NewStringUTF(rangestr.c_str()); } + + JNIEXPORT jstring JNICALL + Java_network_loki_lokinet_LokinetDaemon_DumpStatus(JNIEnv* env, jobject self) + { + std::string status{}; + if (auto ptr = GetImpl(env, self)) + { + if (ptr->IsUp()) + { + std::promise result; + ptr->CallSafe([&result, router = ptr->router]() { + const auto status = router->ExtractStatus(); + result.set_value(status.dump()); + }); + status = result.get_future().get(); + } + } + return env->NewStringUTF(status.c_str()); + } } diff --git a/jni/network_loki_lokinet_LokinetDaemon.h b/jni/network_loki_lokinet_LokinetDaemon.h index 78966b989..cc4d54fed 100644 --- a/jni/network_loki_lokinet_LokinetDaemon.h +++ b/jni/network_loki_lokinet_LokinetDaemon.h @@ -80,6 +80,14 @@ extern "C" JNIEXPORT jstring JNICALL Java_network_loki_lokinet_LokinetDaemon_DetectFreeRange(JNIEnv*, jclass); + /* + * Class: network_loki_lokinet_LokinetDaemon + * Method: DumpStatus + * Signature: ()Ljava/lang/String; + */ + JNIEXPORT jstring JNICALL + Java_network_loki_lokinet_LokinetDaemon_DumpStatus(JNIEnv*, jobject); + #ifdef __cplusplus } #endif