/*
- * Copyright (C) 2012 Tobias Brunner
+ * Copyright (C) 2012-2015 Tobias Brunner
* Copyright (C) 2012 Giuliano Grassi
* Copyright (C) 2012 Ralf Sager
* Hochschule fuer Technik Rapperswil
* for more details.
*/
+#include <dlfcn.h>
+
#include "android_jni.h"
#include <library.h>
*/
static JavaVM *android_jvm;
+static struct {
+ char name[32];
+ void *handle;
+} libs[] = {
+ { "libstrongswan.so", NULL },
+#ifdef USE_BYOD
+ { "libtncif.so", NULL },
+ { "libtnccs.so", NULL },
+ { "libimcv.so", NULL },
+#endif
+ { "libhydra.so", NULL },
+ { "libcharon.so", NULL },
+ { "libipsec.so", NULL },
+};
+
jclass *android_charonvpnservice_class;
jclass *android_charonvpnservice_builder_class;
android_sdk_version_t android_sdk_version;
JNIEnv *env;
jclass jversion;
jfieldID jsdk_int;
+ int i;
android_jvm = vm;
return -1;
}
+ for (i = 0; i < countof(libs); i++)
+ {
+ libs[i].handle = dlopen(libs[i].name, RTLD_GLOBAL);
+ if (!libs[i].handle)
+ {
+ return -1;
+ }
+ }
+
androidjni_threadlocal = thread_value_create(attached_thread_cleanup);
android_charonvpnservice_class =
*/
void JNI_OnUnload(JavaVM *vm, void *reserved)
{
+ int i;
+
androidjni_threadlocal->destroy(androidjni_threadlocal);
+
+ for (i = countof(libs) - 1; i >= 0; i--)
+ {
+ if (libs[i].handle)
+ {
+ dlclose(libs[i].handle);
+ }
+ }
}
import android.content.Intent;
import android.content.ServiceConnection;
import android.net.VpnService;
+import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
/*
* The libraries are extracted to /data/data/org.strongswan.android/...
- * during installation.
+ * during installation. On newer releases most are loaded in JNI_OnLoad.
*/
static
{
- System.loadLibrary("strongswan");
-
- if (MainActivity.USE_BYOD)
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2)
{
- System.loadLibrary("tncif");
- System.loadLibrary("tnccs");
- System.loadLibrary("imcv");
- }
+ System.loadLibrary("strongswan");
+
+ if (MainActivity.USE_BYOD)
+ {
+ System.loadLibrary("tncif");
+ System.loadLibrary("tnccs");
+ System.loadLibrary("imcv");
+ }
- System.loadLibrary("hydra");
- System.loadLibrary("charon");
- System.loadLibrary("ipsec");
+ System.loadLibrary("hydra");
+ System.loadLibrary("charon");
+ System.loadLibrary("ipsec");
+ }
System.loadLibrary("androidbridge");
}
}