Charon logs to a file in the App's data directory

This commit is contained in:
Tobias Brunner 2012-08-10 09:06:49 +02:00
parent 4308ce1cf7
commit fe05f1f05c
2 changed files with 45 additions and 3 deletions

View File

@ -19,6 +19,7 @@
#include <string.h> #include <string.h>
#include <sys/utsname.h> #include <sys/utsname.h>
#include <android/log.h> #include <android/log.h>
#include <errno.h>
#include "charonservice.h" #include "charonservice.h"
#include "android_jni.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, METHOD(charonservice_t, update_status, bool,
private_charonservice_t *this, android_vpn_state_t code) 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 * Initialize charon and the libraries via JNI
*/ */
JNI_METHOD(CharonVpnService, initializeCharon, void, JNI_METHOD(CharonVpnService, initializeCharon, void,
jobject builder) jobject builder, jstring jlogfile)
{ {
struct sigaction action; struct sigaction action;
struct utsname utsname; struct utsname utsname;
char *logfile;
/* logging for library during initialization, as we have no bus yet */ /* logging for library during initialization, as we have no bus yet */
dbg = dbg_android; dbg = dbg_android;
@ -392,6 +423,10 @@ JNI_METHOD(CharonVpnService, initializeCharon, void,
return; return;
} }
logfile = androidjni_convert_jstring(env, jlogfile);
initialize_logger(logfile);
free(logfile);
charonservice_init(env, this, builder); charonservice_init(env, this, builder);
if (uname(&utsname) != 0) if (uname(&utsname) != 0)

View File

@ -17,6 +17,7 @@
package org.strongswan.android.logic; package org.strongswan.android.logic;
import java.io.File;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.NetworkInterface; import java.net.NetworkInterface;
import java.net.SocketException; import java.net.SocketException;
@ -46,6 +47,9 @@ import android.util.Log;
public class CharonVpnService extends VpnService implements Runnable public class CharonVpnService extends VpnService implements Runnable
{ {
private static final String TAG = CharonVpnService.class.getSimpleName(); private static final String TAG = CharonVpnService.class.getSimpleName();
public static final String LOG_FILE = "charon.log";
private String mLogFile;
private VpnProfileDataSource mDataSource; private VpnProfileDataSource mDataSource;
private Thread mConnectionHandler; private Thread mConnectionHandler;
private VpnProfile mCurrentProfile; private VpnProfile mCurrentProfile;
@ -113,6 +117,8 @@ public class CharonVpnService extends VpnService implements Runnable
@Override @Override
public void onCreate() public void onCreate()
{ {
mLogFile = getFilesDir().getAbsolutePath() + File.separator + LOG_FILE;
mDataSource = new VpnProfileDataSource(this); mDataSource = new VpnProfileDataSource(this);
mDataSource.open(); mDataSource.open();
/* use a separate thread as main thread for charon */ /* use a separate thread as main thread for charon */
@ -204,7 +210,7 @@ public class CharonVpnService extends VpnService implements Runnable
mIsDisconnecting = false; mIsDisconnecting = false;
BuilderAdapter builder = new BuilderAdapter(mCurrentProfile.getName()); BuilderAdapter builder = new BuilderAdapter(mCurrentProfile.getName());
initializeCharon(builder); initializeCharon(builder, mLogFile);
Log.i(TAG, "charon started"); Log.i(TAG, "charon started");
String local_address = getLocalIPv4Address(); String local_address = getLocalIPv4Address();
@ -418,8 +424,9 @@ public class CharonVpnService extends VpnService implements Runnable
* Initialization of charon, provided by libandroidbridge.so * Initialization of charon, provided by libandroidbridge.so
* *
* @param builder BuilderAdapter for this connection * @param builder BuilderAdapter for this connection
* @param logfile absolute path to the logfile
*/ */
public native void initializeCharon(BuilderAdapter builder); public native void initializeCharon(BuilderAdapter builder, String logfile);
/** /**
* Deinitialize charon, provided by libandroidbridge.so * Deinitialize charon, provided by libandroidbridge.so