* public interface
*/
charonservice_t public;
+
+ /**
+ * CharonVpnService reference
+ */
+ jobject vpn_service;
};
/**
/**
* 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;
/**
* 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;
}
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();
JNI_METHOD(CharonVpnService, deinitializeCharon, void)
{
libcharon_deinit();
- charonservice_deinit();
+ charonservice_deinit(env);
libipsec_deinit();
libhydra_deinit();
library_deinit();