]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
android: Pass absolute path to the app's data directory via JNI
authorTobias Brunner <tobias@strongswan.org>
Mon, 21 Aug 2017 13:26:06 +0000 (15:26 +0200)
committerTobias Brunner <tobias@strongswan.org>
Mon, 4 Sep 2017 08:41:25 +0000 (10:41 +0200)
src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java
src/frontends/android/app/src/main/jni/libandroidbridge/charonservice.c

index f9fef4ffcfb3b44e5d6c4d27bdd1e41bbd90e1c9..ba3d434cebdf55f97a1314b78170845bb54dbd19 100644 (file)
@@ -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
index f74936edbd71ee580dd2436fa2ce9ed1e189c976..5eb1bd9c0dab26bfe1f2790b7923e7980c416a08 100644 (file)
@@ -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)
        {