libactd: Use glib instead of libsyscommon 47/208047/1
authorPaweł Szewczyk <p.szewczyk@samsung.com>
Mon, 17 Jun 2019 09:59:47 +0000 (11:59 +0200)
committerPaweł Szewczyk <p.szewczyk@samsung.com>
Mon, 17 Jun 2019 10:52:33 +0000 (12:52 +0200)
Libsyscommon does not provide neccessary control over dbus calls, e.g.
makes it hard to select a bus to connect to.

Change-Id: I79bab3bcc7d26bd4f68a6ab5ca58225081259581
Signed-off-by: Paweł Szewczyk <p.szewczyk@samsung.com>
Makefile.am
configure.ac
include/unit_control.h
packaging/activationd.spec
src/libactd/unit_control.c
tests/unit_tests.c

index 47f699ba580338e7501cb54f91c9093823ac0972..66118175fd0b2ef9424e8f17653b78f08aeb3abc 100644 (file)
@@ -42,6 +42,7 @@ AM_CFLAGS = \
        -fPIE \
        -rdynamic \
        $(GLIB_CFLAGS) \
+       $(GIO_CFLAGS) \
        $(VCONF_CFLAGS) \
        -D"EPC_MODNAME_T=$(call name_fix,$(modname))"
 
@@ -158,7 +159,7 @@ unit_control_api_la_SOURCES = src/listeners/unit_control_api.c
 unit_control_api_config_DATA = org.tizen.Activationd.conf
 unit_control_api_configdir = /etc/dbus-1/system.d/
 
-actd_LDADD = $(LIBSYSTEMD_LIBS) $(GLIB_LIBS) $(JSON_C_LIBS)
+actd_LDADD = $(LIBSYSTEMD_LIBS) $(GLIB_LIBS) $(GIO_LIBS) $(JSON_C_LIBS)
 
 actdevelincludedir = $(includedir)/epc
 actdevelinclude_HEADERS = \
@@ -199,8 +200,8 @@ install-data-local:
 lib_LTLIBRARIES = libactd.la
 libactd_la_SOURCES = src/libactd/unit_control.c
 libactd_la_LDFLAGS = -pie -shared
-libactd_la_LIBADD = $(SYSCOMMON_LIBS)
-libactd_la_CFLAGS = $(AM_CFLAGS) $(SYSCOMMON_CFLAGS)
+libactd_la_LIBADD = $(GLIB_LIBS) $(GIO_LIBS)
+libactd_la_CFLAGS = $(AM_CFLAGS) $(GLIB_CFLAGS) $(GIO_CFLAGS)
 libactd_includedir = $(includedir)/actd
 libactd_include_HEADERS = include/unit_control.h
 
index e4b9c143ae96aba4f94b97fa1dd51e4a25139827..2c2e4fe922fae8ea83026c30e029bb02a80e84cc 100644 (file)
@@ -110,13 +110,19 @@ PKG_CHECK_MODULES(LIBSYSTEMD,
 AS_IF([test "x$have_libsystemd" = "xno"],
       AC_MSG_ERROR([libsystemd version 221 or newer not found]))
 
-AS_IF([test "x$enable_glib_mainloop" = xyes],
-      [PKG_CHECK_MODULES(GLIB,
+PKG_CHECK_MODULES(GLIB,
        [glib-2.0],
        have_glib=yes,
        have_glib=no)
       AS_IF([test "x$have_glib" = "xno"],
-      AC_MSG_ERROR([glib not found]))])
+      AC_MSG_ERROR([glib not found]))
+
+PKG_CHECK_MODULES(GIO,
+       [gio-2.0],
+       have_gio=yes,
+       have_gio=no)
+      AS_IF([test "x$have_gio" = "xno"],
+      AC_MSG_ERROR([gio not found]))
 
 PKG_CHECK_MODULES(JSON_C,
         [json-c],
@@ -132,13 +138,6 @@ PKG_CHECK_MODULES(VCONF,
 AS_IF([test "x$have_vconf" = "xno"],
       AC_MSG_ERROR([vconf not found]))
 
-PKG_CHECK_MODULES(SYSCOMMON,
-        [libsyscommon],
-        have_syscommon=yes,
-        have_syscommon=no)
-AS_IF([test "x$have_syscommon" = "xno"],
-      AC_MSG_ERROR([syscommon not found]))
-
 AC_CHECK_FUNCS([ \
        printf\
 ])
index 136eb248c2a2f1537eaecd17588bccd21acd33c2..3763725a007dbd263bf05529ce28f981db552784 100644 (file)
@@ -3,15 +3,16 @@
 
 #include <glib.h>
 #include <glib/gi18n.h>
+#include <gio/gio.h>
 
 typedef void (*actd_unit_cb)(GVariant *var, void *user_data, GError *err);
 
-int actd_start_unit(const char *unit);
-int actd_stop_unit(const char *unit);
-int actd_restart_unit(const char *unit);
+int actd_start_unit(GBusType bus_type, const char *unit);
+int actd_stop_unit(GBusType bus_type, const char *unit);
+int actd_restart_unit(GBusType bus_type, const char *unit);
 
-int actd_start_unit_async(const char *unit, actd_unit_cb cb, void *user_data);
-int actd_stop_unit_async(const char *unit, actd_unit_cb cb, void *user_data);
-int actd_restart_unit_async(const char *unit, actd_unit_cb cb, void *user_data);
+int actd_start_unit_async(GBusType bus_type, const char *unit, actd_unit_cb cb, void *user_data);
+int actd_stop_unit_async(GBusType bus_type, const char *unit, actd_unit_cb cb, void *user_data);
+int actd_restart_unit_async(GBusType bus_type, const char *unit, actd_unit_cb cb, void *user_data);
 
 #endif /* UNIT_CONTROL_H */
index 1e14ed4978ff70d3b9b857c1605af464d0dea58e..281972a183c38c917bee575c7bcb5a0d5d014e2e 100644 (file)
@@ -87,7 +87,8 @@ Files used in external modules development
 %package -n libactd
 Summary:    Activationd API
 Group:      Development/Libraries
-BuildRequires: pkgconfig(libsyscommon)
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(gio-2.0)
 BuildRequires: pkgconfig(dlog)
 
 %description -n libactd
index 747679cfece0d0dacc9103634a1b81b89edc47e0..d41e8c7a1b04a19b74263a69c4e89cea726282d0 100644 (file)
@@ -16,7 +16,8 @@
  * limitations under the License.
  */
 
-#include <libsyscommon/dbus-system.h>
+#include <glib.h>
+#include <gio/gio.h>
 #include <errno.h>
 
 #include "unit_control.h"
 #define UNIT_CONTROL_INTERFACE "org.tizen.Activationd"
 #define UNIT_CONTROL_OBJ_PATH "/org/tizen/activationd"
 
-static int call_uc(const char *method, const char *unit)
+static int call_uc(GBusType bus_type, const char *method, const char *unit)
 {
        int ret;
        GVariant *msg = NULL;
+       GDBusConnection *bus;
        const char *result;
 
-       msg = dbus_handle_method_sync_with_reply_var(UNIT_CONTROL_NAME,
+       bus = g_bus_get_sync(bus_type, NULL, NULL);
+       if (!bus)
+               return -1;
+
+       msg = g_dbus_connection_call_sync(bus,
+                       UNIT_CONTROL_NAME,
                        UNIT_CONTROL_OBJ_PATH,
                        UNIT_CONTROL_INTERFACE,
                        method,
-                       g_variant_new("(s)", unit));
-
+                       g_variant_new("(s)", unit),
+                       NULL,
+                       G_DBUS_CALL_FLAGS_NONE,
+                       -1,
+                       NULL,
+                       NULL);
        if (!msg)
                return -EBADMSG;
 
@@ -50,44 +61,56 @@ static int call_uc(const char *method, const char *unit)
        return ret;
 }
 
-static int call_uc_async(const char *method, const char *unit, actd_unit_cb cb, void *user_data)
+static int call_uc_async(GBusType bus_type, const char *method, const char *unit, actd_unit_cb cb, void *user_data)
 {
-       return dbus_handle_method_async_with_reply_var(UNIT_CONTROL_NAME,
+       GDBusConnection *bus;
+
+       bus = g_bus_get_sync(bus_type, NULL, NULL);
+       if (!bus)
+               return -1;
+
+       g_dbus_connection_call(bus,
+                       UNIT_CONTROL_NAME,
                        UNIT_CONTROL_OBJ_PATH,
                        UNIT_CONTROL_INTERFACE,
                        method,
                        g_variant_new("(s)", unit),
-                       cb,
+                       NULL,
+                       G_DBUS_CALL_FLAGS_NONE,
                        -1,
-                       user_data);
+                       NULL,
+                       (GAsyncReadyCallback) cb,
+                       NULL);
+
+       return 0;
 }
 
-int actd_start_unit(const char *unit)
+int actd_start_unit(GBusType bus_type, const char *unit)
 {
-       return call_uc("Start", unit);
+       return call_uc(bus_type, "Start", unit);
 }
 
-int actd_stop_unit(const char *unit)
+int actd_stop_unit(GBusType bus_type, const char *unit)
 {
-       return call_uc("Stop", unit);
+       return call_uc(bus_type, "Stop", unit);
 }
 
-int actd_restart_unit(const char *unit)
+int actd_restart_unit(GBusType bus_type, const char *unit)
 {
-       return call_uc("Restart", unit);
+       return call_uc(bus_type, "Restart", unit);
 }
 
-int actd_start_unit_async(const char *unit, actd_unit_cb cb, void *user_data)
+int actd_start_unit_async(GBusType bus_type, const char *unit, actd_unit_cb cb, void *user_data)
 {
-       return call_uc_async("Start", unit, cb, user_data);
+       return call_uc_async(bus_type, "Start", unit, cb, user_data);
 }
 
-int actd_stop_unit_async(const char *unit, actd_unit_cb cb, void *user_data)
+int actd_stop_unit_async(GBusType bus_type, const char *unit, actd_unit_cb cb, void *user_data)
 {
-       return call_uc_async("Stop", unit, cb, user_data);
+       return call_uc_async(bus_type, "Stop", unit, cb, user_data);
 }
 
-int actd_restart_unit_async(const char *unit, actd_unit_cb cb, void *user_data)
+int actd_restart_unit_async(GBusType bus_type, const char *unit, actd_unit_cb cb, void *user_data)
 {
-       return call_uc_async("Restart", unit, cb, user_data);
+       return call_uc_async(bus_type, "Restart", unit, cb, user_data);
 }
index 774c07a46b856fb57b2cfe12f90e524205551168..8f2799c148ba4b697dafde9437d34f10fa774dca 100644 (file)
@@ -4,19 +4,22 @@
 
 static const char *async_result = NULL;
 
+#define TEST_SERVICE "activationd-acceptance-test-s-p.service"
+
+
 int test_unit_start()
 {
-       return actd_start_unit("foo.bar");
+       return actd_start_unit(G_BUS_TYPE_SYSTEM, TEST_SERVICE);
 }
 
 int test_unit_stop()
 {
-       return actd_stop_unit("foo.bar");
+       return actd_stop_unit(G_BUS_TYPE_SYSTEM, TEST_SERVICE);
 }
 
 int test_unit_restart()
 {
-       return actd_restart_unit("foo.bar");
+       return actd_restart_unit(G_BUS_TYPE_SYSTEM, TEST_SERVICE);
 }
 
 void handler(GVariant *var, void *user_data, GError *err)
@@ -25,7 +28,7 @@ void handler(GVariant *var, void *user_data, GError *err)
        g_main_loop_quit(user_data);
 }
 
-int test_async_action(int (*func)(const char *unit, actd_unit_cb cb, void *user_data))
+int test_async_action(int (*func)(GBusType bus_type, const char *unit, actd_unit_cb cb, void *user_data))
 {
        assert(func);
        int ret;
@@ -33,7 +36,7 @@ int test_async_action(int (*func)(const char *unit, actd_unit_cb cb, void *user_
 
        loop = g_main_loop_new(NULL, FALSE);
 
-       ret = func("foo.bar", handler, loop);
+       ret = func(G_BUS_TYPE_SYSTEM, TEST_SERVICE, handler, loop);
        if (ret < 0)
                return ret;