aboutsummaryrefslogtreecommitdiffstats
path: root/src/frontends/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontends/android')
-rw-r--r--src/frontends/android/jni/libandroidbridge/charonservice.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/frontends/android/jni/libandroidbridge/charonservice.c b/src/frontends/android/jni/libandroidbridge/charonservice.c
index 671561f5f..75d0da693 100644
--- a/src/frontends/android/jni/libandroidbridge/charonservice.c
+++ b/src/frontends/android/jni/libandroidbridge/charonservice.c
@@ -41,6 +41,11 @@ struct private_charonservice_t {
* public interface
*/
charonservice_t public;
+
+ /**
+ * CharonVpnService reference
+ */
+ jobject vpn_service;
};
/**
@@ -86,13 +91,14 @@ static void dbg_android(debug_t group, level_t level, char *fmt, ...)
/**
* Initialize the charonservice object
*/
-static void charonservice_init()
+static void charonservice_init(JNIEnv *env, jobject service)
{
private_charonservice_t *this;
INIT(this,
.public = {
},
+ .vpn_service = (*env)->NewGlobalRef(env, service),
);
charonservice = &this->public;
@@ -103,10 +109,11 @@ static void charonservice_init()
/**
* Deinitialize the charonservice object
*/
-static void charonservice_deinit()
+static void charonservice_deinit(JNIEnv *env)
{
private_charonservice_t *this = (private_charonservice_t*)charonservice;
+ (*env)->DeleteGlobalRef(env, this->vpn_service);
free(this);
charonservice = NULL;
}
@@ -153,13 +160,13 @@ JNI_METHOD(CharonVpnService, initializeCharon, void)
return;
}
- charonservice_init();
+ charonservice_init(env, this);
if (!libcharon_init("charon") ||
!charon->initialize(charon, PLUGINS))
{
libcharon_deinit();
- charonservice_deinit();
+ charonservice_deinit(env);
libipsec_deinit();
libhydra_deinit();
library_deinit();
@@ -186,7 +193,7 @@ JNI_METHOD(CharonVpnService, initializeCharon, void)
JNI_METHOD(CharonVpnService, deinitializeCharon, void)
{
libcharon_deinit();
- charonservice_deinit();
+ charonservice_deinit(env);
libipsec_deinit();
libhydra_deinit();
library_deinit();