Charon logs to a file in the App's data directory
This commit is contained in:
parent
4308ce1cf7
commit
fe05f1f05c
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue