diff options
Diffstat (limited to 'src/frontends/android/jni/libandroidbridge/charonservice.c')
-rw-r--r-- | src/frontends/android/jni/libandroidbridge/charonservice.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/frontends/android/jni/libandroidbridge/charonservice.c b/src/frontends/android/jni/libandroidbridge/charonservice.c index 802e087ec..fab99ac10 100644 --- a/src/frontends/android/jni/libandroidbridge/charonservice.c +++ b/src/frontends/android/jni/libandroidbridge/charonservice.c @@ -19,6 +19,7 @@ #include <string.h> #include <sys/utsname.h> #include <android/log.h> +#include <errno.h> #include "charonservice.h" #include "android_jni.h" @@ -117,6 +118,35 @@ static void dbg_android(debug_t group, level_t level, char *fmt, ...) } } +/** + * Initialize file logger + */ +static void initialize_logger(char *logfile) +{ + file_logger_t *file_logger; + debug_t group; + FILE *file; + + /* truncate an existing file */ + file = fopen(logfile, "w"); + if (!file) + { + DBG1(DBG_DMN, "opening file %s for logging failed: %s", + logfile, strerror(errno)); + return; + } + /* flush each line */ + setlinebuf(file); + + file_logger = file_logger_create(file, "%b %e %T", FALSE); + for (group = 0; group < DBG_MAX; group++) + { + file_logger->set_level(file_logger, group, ANDROID_DEBUG_LEVEL); + } + charon->file_loggers->insert_last(charon->file_loggers, file_logger); + charon->bus->add_logger(charon->bus, &file_logger->logger); +} + METHOD(charonservice_t, update_status, bool, private_charonservice_t *this, android_vpn_state_t code) { @@ -353,10 +383,11 @@ static void segv_handler(int signal) * Initialize charon and the libraries via JNI */ JNI_METHOD(CharonVpnService, initializeCharon, void, - jobject builder) + jobject builder, jstring jlogfile) { struct sigaction action; struct utsname utsname; + char *logfile; /* logging for library during initialization, as we have no bus yet */ dbg = dbg_android; @@ -392,6 +423,10 @@ JNI_METHOD(CharonVpnService, initializeCharon, void, return; } + logfile = androidjni_convert_jstring(env, jlogfile); + initialize_logger(logfile); + free(logfile); + charonservice_init(env, this, builder); if (uname(&utsname) != 0) |