From: Tobias Brunner Date: Mon, 21 Aug 2017 13:26:06 +0000 (+0200) Subject: android: Pass absolute path to the app's data directory via JNI X-Git-Tag: 5.6.1dr2~10^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3fe9a436ee59a60a79ad859da5b0e4df1365df5f;p=thirdparty%2Fstrongswan.git android: Pass absolute path to the app's data directory via JNI --- diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java index f9fef4ffcf..ba3d434ceb 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java @@ -74,6 +74,7 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe public static final int VPN_STATE_NOTIFICATION_ID = 1; private String mLogFile; + private String mAppDir; private VpnProfileDataSource mDataSource; private Thread mConnectionHandler; private VpnProfile mCurrentProfile; @@ -152,6 +153,7 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe public void onCreate() { mLogFile = getFilesDir().getAbsolutePath() + File.separator + LOG_FILE; + mAppDir = getFilesDir().getAbsolutePath(); mDataSource = new VpnProfileDataSource(this); mDataSource.open(); @@ -244,7 +246,7 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe addNotification(); BuilderAdapter builder = new BuilderAdapter(mCurrentProfile); - if (initializeCharon(builder, mLogFile, mCurrentProfile.getVpnType().has(VpnTypeFeature.BYOD))) + if (initializeCharon(builder, mLogFile, mAppDir, mCurrentProfile.getVpnType().has(VpnTypeFeature.BYOD))) { Log.i(TAG, "charon started"); SettingsWriter writer = new SettingsWriter(); @@ -645,10 +647,11 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe * * @param builder BuilderAdapter for this connection * @param logfile absolute path to the logfile + * @param appdir absolute path to the data directory of the app * @param byod enable BYOD features * @return TRUE if initialization was successful */ - public native boolean initializeCharon(BuilderAdapter builder, String logfile, boolean byod); + public native boolean initializeCharon(BuilderAdapter builder, String logfile, String appdir, boolean byod); /** * Deinitialize charon, provided by libandroidbridge.so diff --git a/src/frontends/android/app/src/main/jni/libandroidbridge/charonservice.c b/src/frontends/android/app/src/main/jni/libandroidbridge/charonservice.c index f74936edbd..5eb1bd9c0d 100644 --- a/src/frontends/android/app/src/main/jni/libandroidbridge/charonservice.c +++ b/src/frontends/android/app/src/main/jni/libandroidbridge/charonservice.c @@ -515,7 +515,7 @@ static void set_options(char *logfile) * Initialize the charonservice object */ static void charonservice_init(JNIEnv *env, jobject service, jobject builder, - jboolean byod) + char *appdir, jboolean byod) { private_charonservice_t *this; static plugin_feature_t features[] = { @@ -602,11 +602,11 @@ static void segv_handler(int signal) * Initialize charon and the libraries via JNI */ JNI_METHOD(CharonVpnService, initializeCharon, jboolean, - jobject builder, jstring jlogfile, jboolean byod) + jobject builder, jstring jlogfile, jstring jappdir, jboolean byod) { struct sigaction action; struct utsname utsname; - char *logfile, *plugins; + char *logfile, *appdir, *plugins; /* logging for library during initialization, as we have no bus yet */ dbg = dbg_android; @@ -640,7 +640,9 @@ JNI_METHOD(CharonVpnService, initializeCharon, jboolean, charon->load_loggers(charon); - charonservice_init(env, this, builder, byod); + appdir = androidjni_convert_jstring(env, jappdir); + charonservice_init(env, this, builder, appdir, byod); + free(appdir); if (uname(&utsname) != 0) {