Moved Android specific logger to separate plugin.
authorTobias Brunner <tobias@strongswan.org>
Thu, 16 Feb 2012 17:17:09 +0000 (18:17 +0100)
committerTobias Brunner <tobias@strongswan.org>
Wed, 8 Aug 2012 13:07:43 +0000 (15:07 +0200)
This is mainly because the other parts of the existing android plugin
can not be built in the NDK (access to keystore and system properties are
not part of the stable NDK libraries).

14 files changed:
Android.mk.in
configure.in
man/strongswan.conf.5.in
src/libcharon/Android.mk
src/libcharon/Makefile.am
src/libcharon/plugins/android/Makefile.am
src/libcharon/plugins/android/android_logger.c [deleted file]
src/libcharon/plugins/android/android_logger.h [deleted file]
src/libcharon/plugins/android/android_plugin.c
src/libcharon/plugins/android_log/Makefile.am [new file with mode: 0644]
src/libcharon/plugins/android_log/android_log_logger.c [new file with mode: 0644]
src/libcharon/plugins/android_log/android_log_logger.h [new file with mode: 0644]
src/libcharon/plugins/android_log/android_log_plugin.c [new file with mode: 0644]
src/libcharon/plugins/android_log/android_log_plugin.h [new file with mode: 0644]

index a1ce1c5..19048b9 100644 (file)
@@ -16,8 +16,8 @@ include $(CLEAR_VARS)
 
 # this is the list of plugins that are built into libstrongswan and charon
 # also these plugins are loaded by default (if not changed in strongswan.conf)
-strongswan_CHARON_PLUGINS := openssl fips-prf random nonce pubkey pkcs1 \
-       pem xcbc hmac kernel-netlink socket-default android \
+strongswan_CHARON_PLUGINS := android-log openssl fips-prf random nonce pubkey \
+       pkcs1 pem xcbc hmac kernel-netlink socket-default android \
        stroke eap-identity eap-mschapv2 eap-md5
 
 ifneq ($(strongswan_BUILD_SCEPCLIENT),)
index 0c288f8..96b1fe3 100644 (file)
@@ -206,6 +206,7 @@ ARG_ENABL_SET([gcm],            [enables the GCM AEAD wrapper crypto plugin.])
 ARG_ENABL_SET([addrblock],      [enables RFC 3779 address block constraint support.])
 ARG_ENABL_SET([uci],            [enable OpenWRT UCI configuration plugin.])
 ARG_ENABL_SET([android],        [enable Android specific plugin.])
+ARG_ENABL_SET([android-log],    [enable Android specific logger plugin.])
 ARG_ENABL_SET([maemo],          [enable Maemo specific plugin.])
 ARG_ENABL_SET([nm],             [enable NetworkManager backend.])
 ARG_ENABL_SET([ha],             [enable high availability cluster plugin.])
@@ -935,6 +936,7 @@ ADD_PLUGIN([medsrv],               [c charon])
 ADD_PLUGIN([medcli],               [c charon])
 ADD_PLUGIN([dhcp],                 [c charon])
 ADD_PLUGIN([android],              [c charon])
+ADD_PLUGIN([android-log],          [c charon])
 ADD_PLUGIN([ha],                   [c charon])
 ADD_PLUGIN([whitelist],            [c charon])
 ADD_PLUGIN([certexpire],           [c charon])
@@ -1016,6 +1018,7 @@ AM_CONDITIONAL(USE_MEDSRV, test x$medsrv = xtrue)
 AM_CONDITIONAL(USE_MEDCLI, test x$medcli = xtrue)
 AM_CONDITIONAL(USE_UCI, test x$uci = xtrue)
 AM_CONDITIONAL(USE_ANDROID, test x$android = xtrue)
+AM_CONDITIONAL(USE_ANDROID_LOG, test x$android_log = xtrue)
 AM_CONDITIONAL(USE_MAEMO, test x$maemo = xtrue)
 AM_CONDITIONAL(USE_SMP, test x$smp = xtrue)
 AM_CONDITIONAL(USE_SQL, test x$sql = xtrue)
@@ -1253,6 +1256,7 @@ AC_OUTPUT(
        src/libcharon/plugins/coupling/Makefile
        src/libcharon/plugins/radattr/Makefile
        src/libcharon/plugins/android/Makefile
+       src/libcharon/plugins/android_log/Makefile
        src/libcharon/plugins/maemo/Makefile
        src/libcharon/plugins/stroke/Makefile
        src/libcharon/plugins/updown/Makefile
index 1a4da00..ee8f8a8 100644 (file)
@@ -272,7 +272,7 @@ Section to define syslog loggers, see LOGGER CONFIGURATION
 Number of worker threads in charon
 .SS charon.plugins subsection
 .TP
-.BR charon.plugins.android.loglevel " [1]"
+.BR charon.plugins.android_log.loglevel " [1]"
 Loglevel for logging to Android specific logger
 .TP
 .BR charon.plugins.attr
index 87a2e22..5e93e23 100644 (file)
@@ -127,10 +127,14 @@ processing/jobs/adopt_children_job.c processing/jobs/adopt_children_job.h
 LOCAL_SRC_FILES += $(call add_plugin, android)
 ifneq ($(call plugin_enabled, android),)
 LOCAL_C_INCLUDES += frameworks/base/cmds/keystore
-LOCAL_LDLIBS += -llog
 LOCAL_SHARED_LIBRARIES += libcutils
 endif
 
+LOCAL_SRC_FILES += $(call add_plugin, android-log)
+ifneq ($(call plugin_enabled, android-log),)
+LOCAL_LDLIBS += -llog
+endif
+
 LOCAL_SRC_FILES += $(call add_plugin, attr)
 
 LOCAL_SRC_FILES += $(call add_plugin, eap-aka)
index a254c03..df23e22 100644 (file)
@@ -456,6 +456,13 @@ if MONOLITHIC
 endif
 endif
 
+if USE_ANDROID_LOG
+  SUBDIRS += plugins/android_log
+if MONOLITHIC
+  libcharon_la_LIBADD += plugins/android_log/libstrongswan-android-log.la
+endif
+endif
+
 if USE_MAEMO
   SUBDIRS += plugins/maemo
 if MONOLITHIC
index b922ef4..b10cd95 100644 (file)
@@ -14,7 +14,6 @@ libstrongswan_android_la_SOURCES = \
        android_plugin.c android_plugin.h \
        android_service.c android_service.h \
        android_handler.c android_handler.h \
-       android_logger.c android_logger.h \
        android_creds.c android_creds.h
 
 libstrongswan_android_la_LDFLAGS = -module -avoid-version
diff --git a/src/libcharon/plugins/android/android_logger.c b/src/libcharon/plugins/android/android_logger.c
deleted file mode 100644 (file)
index 0c5f609..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2010-2012 Tobias Brunner
- * Hochschule fuer Technik Rapperswil
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * for more details.
- */
-
-#include <string.h>
-#include <android/log.h>
-
-#include "android_logger.h"
-
-#include <library.h>
-#include <daemon.h>
-#include <threading/mutex.h>
-
-typedef struct private_android_logger_t private_android_logger_t;
-
-/**
- * Private data of an android_logger_t object
- */
-struct private_android_logger_t {
-
-       /**
-        * Public interface
-        */
-       android_logger_t public;
-
-       /**
-        * logging level
-        */
-       int level;
-
-       /**
-        * Mutex to ensure multi-line log messages are not torn apart
-        */
-       mutex_t *mutex;
-};
-
-METHOD(logger_t, log_, void,
-       private_android_logger_t *this, debug_t group, level_t level,
-       int thread, ike_sa_t* ike_sa, const char *message)
-{
-       int prio = level > 1 ? ANDROID_LOG_DEBUG : ANDROID_LOG_INFO;
-       char sgroup[16];
-       const char *current = message, *next;
-       snprintf(sgroup, sizeof(sgroup), "%N", debug_names, group);
-       this->mutex->lock(this->mutex);
-       while (TRUE)
-       {       /* log each line separately */
-               next = strchr(current, '\n');
-               if (next == NULL)
-               {
-                       __android_log_print(prio, "charon", "%.2d[%s] %s\n",
-                                                               thread, sgroup, current);
-                       break;
-               }
-               __android_log_print(prio, "charon", "%.2d[%s] %.*s\n",
-                                                       thread, sgroup, (int)(next - current), current);
-               current = next + 1;
-       }
-       this->mutex->unlock(this->mutex);
-}
-
-METHOD(logger_t, get_level, level_t,
-       private_android_logger_t *this, debug_t group)
-{
-       return this->level;
-}
-
-METHOD(android_logger_t, destroy, void,
-       private_android_logger_t *this)
-{
-       this->mutex->destroy(this->mutex);
-       free(this);
-}
-
-/**
- * Described in header.
- */
-android_logger_t *android_logger_create()
-{
-       private_android_logger_t *this;
-
-       INIT(this,
-               .public = {
-                       .logger = {
-                               .log = _log_,
-                               .get_level = _get_level,
-                       },
-                       .destroy = _destroy,
-               },
-               .mutex = mutex_create(MUTEX_TYPE_DEFAULT),
-               .level = lib->settings->get_int(lib->settings,
-                                                               "%s.plugins.android.loglevel", 1, charon->name),
-       );
-
-       return &this->public;
-}
-
diff --git a/src/libcharon/plugins/android/android_logger.h b/src/libcharon/plugins/android/android_logger.h
deleted file mode 100644 (file)
index 15abbb4..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2010 Tobias Brunner
- * Hochschule fuer Technik Rapperswil
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * for more details.
- */
-
-/**
- * @defgroup android_logger android_logger
- * @{ @ingroup android
- */
-
-#ifndef ANDROID_LOGGER_H_
-#define ANDROID_LOGGER_H_
-
-#include <bus/bus.h>
-
-typedef struct android_logger_t android_logger_t;
-
-/**
- * Android specific logger.
- */
-struct android_logger_t {
-
-       /**
-        * Implements logger_t interface
-        */
-       logger_t logger;
-
-       /**
-        * Destroy the logger.
-        */
-       void (*destroy)(android_logger_t *this);
-
-};
-
-/**
- * Create an Android specific logger instance.
- *
- * @return                     logger instance
- */
-android_logger_t *android_logger_create();
-
-#endif /** ANDROID_LOGGER_H_ @}*/
index bad8bc0..c0f58e9 100644 (file)
@@ -15,7 +15,6 @@
  */
 
 #include "android_plugin.h"
-#include "android_logger.h"
 #include "android_handler.h"
 #include "android_creds.h"
 #include "android_service.h"
@@ -36,11 +35,6 @@ struct private_android_plugin_t {
        android_plugin_t public;
 
        /**
-        * Android specific logger
-        */
-       android_logger_t *logger;
-
-       /**
         * Android specific DNS handler
         */
        android_handler_t *handler;
@@ -68,10 +62,8 @@ METHOD(plugin_t, destroy, void,
        hydra->attributes->remove_handler(hydra->attributes,
                                                                          &this->handler->handler);
        lib->credmgr->remove_set(lib->credmgr, &this->creds->set);
-       charon->bus->remove_logger(charon->bus, &this->logger->logger);
        this->creds->destroy(this->creds);
        this->handler->destroy(this->handler);
-       this->logger->destroy(this->logger);
        DESTROY_IF(this->service);
        free(this);
 }
@@ -91,14 +83,12 @@ plugin_t *android_plugin_create()
                                .destroy = _destroy,
                        },
                },
-               .logger = android_logger_create(),
                .creds = android_creds_create(),
        );
 
        this->service = android_service_create(this->creds);
        this->handler = android_handler_create(this->service != NULL);
 
-       charon->bus->add_logger(charon->bus, &this->logger->logger);
        lib->credmgr->add_set(lib->credmgr, &this->creds->set);
        hydra->attributes->add_handler(hydra->attributes, &this->handler->handler);
 
diff --git a/src/libcharon/plugins/android_log/Makefile.am b/src/libcharon/plugins/android_log/Makefile.am
new file mode 100644 (file)
index 0000000..3c180f1
--- /dev/null
@@ -0,0 +1,17 @@
+
+INCLUDES = -I$(top_srcdir)/src/libstrongswan -I$(top_srcdir)/src/libhydra \
+       -I$(top_srcdir)/src/libcharon
+
+AM_CFLAGS = -rdynamic
+
+if MONOLITHIC
+noinst_LTLIBRARIES = libstrongswan-android-log.la
+else
+plugin_LTLIBRARIES = libstrongswan-android-log.la
+endif
+
+libstrongswan_android_log_la_SOURCES = \
+       android_log_plugin.c android_log_plugin.h \
+       android_log_logger.c android_log_logger.h
+
+libstrongswan_android_log_la_LDFLAGS = -module -avoid-version
diff --git a/src/libcharon/plugins/android_log/android_log_logger.c b/src/libcharon/plugins/android_log/android_log_logger.c
new file mode 100644 (file)
index 0000000..48bcaa5
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2010-2012 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+#include <string.h>
+#include <android/log.h>
+
+#include "android_log_logger.h"
+
+#include <library.h>
+#include <daemon.h>
+#include <threading/mutex.h>
+
+typedef struct private_android_log_logger_t private_android_log_logger_t;
+
+/**
+ * Private data of an android_log_logger_t object
+ */
+struct private_android_log_logger_t {
+
+       /**
+        * Public interface
+        */
+       android_log_logger_t public;
+
+       /**
+        * logging level
+        */
+       int level;
+
+       /**
+        * Mutex to ensure multi-line log messages are not torn apart
+        */
+       mutex_t *mutex;
+};
+
+METHOD(logger_t, log_, void,
+       private_android_log_logger_t *this, debug_t group, level_t level,
+       int thread, ike_sa_t* ike_sa, const char *message)
+{
+       int prio = level > 1 ? ANDROID_LOG_DEBUG : ANDROID_LOG_INFO;
+       char sgroup[16];
+       const char *current = message, *next;
+       snprintf(sgroup, sizeof(sgroup), "%N", debug_names, group);
+       this->mutex->lock(this->mutex);
+       while (TRUE)
+       {       /* log each line separately */
+               next = strchr(current, '\n');
+               if (next == NULL)
+               {
+                       __android_log_print(prio, "charon", "%.2d[%s] %s\n",
+                                                               thread, sgroup, current);
+                       break;
+               }
+               __android_log_print(prio, "charon", "%.2d[%s] %.*s\n",
+                                                       thread, sgroup, (int)(next - current), current);
+               current = next + 1;
+       }
+       this->mutex->unlock(this->mutex);
+}
+
+METHOD(logger_t, get_level, level_t,
+       private_android_log_logger_t *this, debug_t group)
+{
+       return this->level;
+}
+
+METHOD(android_log_logger_t, destroy, void,
+       private_android_log_logger_t *this)
+{
+       this->mutex->destroy(this->mutex);
+       free(this);
+}
+
+/**
+ * Described in header.
+ */
+android_log_logger_t *android_log_logger_create()
+{
+       private_android_log_logger_t *this;
+
+       INIT(this,
+               .public = {
+                       .logger = {
+                               .log = _log_,
+                               .get_level = _get_level,
+                       },
+                       .destroy = _destroy,
+               },
+               .mutex = mutex_create(MUTEX_TYPE_DEFAULT),
+               .level = lib->settings->get_int(lib->settings,
+                                                       "%s.plugins.android_log.loglevel", 1, charon->name),
+       );
+
+       return &this->public;
+}
+
diff --git a/src/libcharon/plugins/android_log/android_log_logger.h b/src/libcharon/plugins/android_log/android_log_logger.h
new file mode 100644 (file)
index 0000000..ed271bf
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2010 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+/**
+ * @defgroup android_log_logger android_log_logger
+ * @{ @ingroup android_log
+ */
+
+#ifndef ANDROID_LOG_LOGGER_H_
+#define ANDROID_LOG_LOGGER_H_
+
+#include <bus/bus.h>
+
+typedef struct android_log_logger_t android_log_logger_t;
+
+/**
+ * Android specific logger.
+ */
+struct android_log_logger_t {
+
+       /**
+        * Implements logger_t interface
+        */
+       logger_t logger;
+
+       /**
+        * Destroy the logger.
+        */
+       void (*destroy)(android_log_logger_t *this);
+
+};
+
+/**
+ * Create an Android specific logger instance.
+ *
+ * @return                     logger instance
+ */
+android_log_logger_t *android_log_logger_create();
+
+#endif /** ANDROID_LOG_LOGGER_H_ @}*/
diff --git a/src/libcharon/plugins/android_log/android_log_plugin.c b/src/libcharon/plugins/android_log/android_log_plugin.c
new file mode 100644 (file)
index 0000000..6757c22
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2012 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+#include "android_log_plugin.h"
+#include "android_log_logger.h"
+
+#include <daemon.h>
+
+typedef struct private_android_log_plugin_t private_android_log_plugin_t;
+
+/**
+ * Private data of an android_log_plugin_t object.
+ */
+struct private_android_log_plugin_t {
+
+       /**
+        * Public android_log_plugin_t interface.
+        */
+       android_log_plugin_t public;
+
+       /**
+        * Android specific logger
+        */
+       android_log_logger_t *logger;
+
+};
+
+METHOD(plugin_t, get_name, char*,
+       private_android_log_plugin_t *this)
+{
+       return "android-log";
+}
+
+METHOD(plugin_t, destroy, void,
+       private_android_log_plugin_t *this)
+{
+       charon->bus->remove_logger(charon->bus, &this->logger->logger);
+       this->logger->destroy(this->logger);
+       free(this);
+}
+
+/**
+ * See header
+ */
+plugin_t *android_log_plugin_create()
+{
+       private_android_log_plugin_t *this;
+
+       INIT(this,
+               .public = {
+                       .plugin = {
+                               .get_name = _get_name,
+                               .reload = (void*)return_false,
+                               .destroy = _destroy,
+                       },
+               },
+               .logger = android_log_logger_create(),
+       );
+
+       charon->bus->add_logger(charon->bus, &this->logger->logger);
+
+       return &this->public.plugin;
+}
+
diff --git a/src/libcharon/plugins/android_log/android_log_plugin.h b/src/libcharon/plugins/android_log/android_log_plugin.h
new file mode 100644 (file)
index 0000000..32c4dc1
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2012 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+/**
+ * @defgroup android_log android_log
+ * @ingroup cplugins
+ *
+ * @defgroup android_log_plugin android_log_plugin
+ * @{ @ingroup android_log
+ */
+
+#ifndef ANDROID_LOG_PLUGIN_H_
+#define ANDROID_LOG_PLUGIN_H_
+
+#include <plugins/plugin.h>
+
+typedef struct android_log_plugin_t android_log_plugin_t;
+
+/**
+ * Plugin providing an Android specific logger implementation.
+ */
+struct android_log_plugin_t {
+
+       /**
+        * Implements plugin interface.
+        */
+       plugin_t plugin;
+};
+
+#endif /** ANDROID_LOG_PLUGIN_H_ @}*/