From bb5d1f4ce3a42ec674878fb0a6245e44fa9c0de2 Mon Sep 17 00:00:00 2001 From: INSUN PYO Date: Tue, 17 Nov 2020 15:04:06 +0900 Subject: [PATCH] Add dbus-signal-test package Change-Id: I64c70e0c974b7c7b1e724b410df500c050b332d3 --- CMakeLists.txt | 1 + packaging/session-utils.spec | 16 ++++ src/dbus-signal-test/CMakeLists.txt | 22 +++++ src/dbus-signal-test/dbus-signal-test.c | 114 ++++++++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 src/dbus-signal-test/CMakeLists.txt create mode 100644 src/dbus-signal-test/dbus-signal-test.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 38d7177..a797078 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,5 +5,6 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX}) ADD_SUBDIRECTORY(src/dbus-activation-stop-test) ADD_SUBDIRECTORY(src/dbus-send-receive-test) +ADD_SUBDIRECTORY(src/dbus-signal-test) ADD_SUBDIRECTORY(src/dbus-policy-two-wellknownname-per-one-connection-test) ADD_SUBDIRECTORY(src/glibc-api-test) diff --git a/packaging/session-utils.spec b/packaging/session-utils.spec index ed66203..8c1aeb9 100644 --- a/packaging/session-utils.spec +++ b/packaging/session-utils.spec @@ -40,6 +40,14 @@ Summary: dbus send and receive test. This package provides the test code of dbus send and receive. +############################################################################### +%package -n dbus-signal-test +Summary: dbus signal send and receive test. + +%description -n dbus-signal-test +This package provides the test code of dbus signal send and receive. + + ############################################################################### %package -n dbus-policy-two-wellknownname-per-one-connection-test Summary: dbus policy test for twe wellknownname per one connection. @@ -112,6 +120,14 @@ install -m 644 units/dbus-policy-two-wellknownname-per-one-connection-test-2.con %{_bindir}/dbus-send-receive-test +############################################################################### +%files -n dbus-signal-test +%license LICENSE.Apache-2.0 +%manifest session-utils.manifest +#%config %{_sysconfdir}/dbus-1/system.d/dbus-send-receive-test.conf +%{_bindir}/dbus-signal-test + + ############################################################################### %files -n dbus-policy-two-wellknownname-per-one-connection-test %license LICENSE.Apache-2.0 diff --git a/src/dbus-signal-test/CMakeLists.txt b/src/dbus-signal-test/CMakeLists.txt new file mode 100644 index 0000000..887490d --- /dev/null +++ b/src/dbus-signal-test/CMakeLists.txt @@ -0,0 +1,22 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(dbus-signal-test C) + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED + glib-2.0 + gio-2.0 + libsystemd +) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIE") + +ADD_EXECUTABLE(${PROJECT_NAME} dbus-signal-test.c) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -pie) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) diff --git a/src/dbus-signal-test/dbus-signal-test.c b/src/dbus-signal-test/dbus-signal-test.c new file mode 100644 index 0000000..13c491a --- /dev/null +++ b/src/dbus-signal-test/dbus-signal-test.c @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include +#include +#include + +#define PATH "/org/tizen/dbus_signal_test" +#define INTERFACE "org.tizen.dbus_signal_test" +#define METHOD "signal_send" + +static void signal_handler(GDBusConnection *connection, + const gchar *sender_name, const gchar *object_path, const gchar *interface_name, + const gchar *signal_name, GVariant *parameters, gpointer user_data) +{ + int i = -1; + + g_variant_get(parameters, "(i)", &i); + fprintf(stderr, "signal receive : %d\n", i); +} + + +static int dbus_signal_recv() +{ + guint subscribe_id; + GError *error = NULL; + GMainLoop *mainloop; + GDBusConnection *conn = NULL; + + conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); + if (!conn || error) { + fprintf(stderr, "failed to get system bus\n"); + return -1; + } + + subscribe_id = g_dbus_connection_signal_subscribe(conn, NULL, INTERFACE, METHOD, PATH, NULL, G_DBUS_SIGNAL_FLAGS_NONE, signal_handler, NULL, NULL); + if (!subscribe_id) { + fprintf(stderr, "fail g_dbus_connection_signal_subscribe\n"); + return -1; + } + + mainloop = g_main_loop_new(NULL, FALSE); + g_main_loop_run(mainloop); + + g_dbus_connection_signal_unsubscribe(conn, subscribe_id); + g_main_loop_unref(mainloop); + + return 0; +} + +static int dbus_signal_send(int forever) +{ + gint result; + GError *error = NULL; + GDBusConnection *conn; + + conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); + if (!conn || error) { + fprintf(stderr, "failed to get system bus\n"); + return -1; + } + +retry: + result = g_dbus_connection_emit_signal(conn, NULL, PATH, INTERFACE, METHOD, g_variant_new("(i)", 1), NULL); + if (!result) { + fprintf(stderr, "failed to send g_dbus_connection_emit_signal\n"); + return -1; + } + + if (forever) + goto retry; + + g_dbus_connection_flush_sync(conn, NULL, NULL); + g_object_unref(conn); + + return 0; +} + +int main(int argc, char *argv[]) +{ + if (argc != 2) { + printf("Usage %s [send|sendloop|recv]\n", argv[0]); + exit (0); + } + + if (strcmp(argv[1], "send") == 0) + return dbus_signal_send(0); + + if (strcmp(argv[1], "sendloop") == 0) + return dbus_signal_send(1); + + if (strcmp(argv[1], "recv") == 0) + return dbus_signal_recv(); + + return 0; +} -- 2.34.1