From 6b6706e3c582e31395a97f53970dd738755bff9a Mon Sep 17 00:00:00 2001 From: Niraj Kumar Goit Date: Wed, 21 Aug 2019 16:34:24 +0530 Subject: [PATCH] Added NameOwnerChanged signal handling for clatd service. If cellular profile is connected and clatd is terminated unexpectedly, restart clat service. Change-Id: Ic9a90db97fe6a8d6cefc52145496e55eb3394c17 Signed-off-by: Niraj Kumar Goit --- include/clatd-handler.h | 5 +++++ src/clatd-handler.c | 11 +++++++---- src/signal-handler.c | 26 +++++++++++++++++++++++--- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/include/clatd-handler.h b/include/clatd-handler.h index 47060e0..7e0fdc8 100755 --- a/include/clatd-handler.h +++ b/include/clatd-handler.h @@ -24,8 +24,13 @@ extern "C" { #endif +#define CLATD_SERVICE "com.samsung.clatd" +#define CLATD_PATH "/com/samsung/clatd" +#define CLATD_INTERFACE "com.samsung.clatd.Control" + int netconfig_clatd_enable(void); int netconfig_clatd_disable(void); +void netconfig_clatd_reset(void); #ifdef __cplusplus } diff --git a/src/clatd-handler.c b/src/clatd-handler.c index 557943f..814504b 100755 --- a/src/clatd-handler.c +++ b/src/clatd-handler.c @@ -26,10 +26,6 @@ #include "netdbus.h" #include "clatd-handler.h" -#define CLATD_SERVICE "com.samsung.clatd" -#define CLATD_PATH "/com/samsung/clatd" -#define CLATD_INTERFACE "com.samsung.clatd.Control" - static gboolean g_is_running = FALSE; static void __netconfig_clatd_async_callback(GObject *source_object, @@ -151,3 +147,10 @@ int netconfig_clatd_disable(void) return 0; } + +void netconfig_clatd_reset() +{ + DBG(""); + g_is_running = FALSE; + netconfig_clatd_enable(); +} diff --git a/src/signal-handler.c b/src/signal-handler.c index 9a57730..99620b8 100755 --- a/src/signal-handler.c +++ b/src/signal-handler.c @@ -66,10 +66,10 @@ #define CONNMAN_SIGNAL_SERVICES_CHANGED "ServicesChanged" #define CONNMAN_SIGNAL_PROPERTY_CHANGED "PropertyChanged" -#define CONNMAN_SIGNAL_NAME_CHANGED "NameOwnerChanged" +#define SIGNAL_NAME_OWNER_CHANGED "NameOwnerChanged" #define MAX_SIG_LEN 64 -#define TOTAL_CONN_SIGNALS 5 +#define TOTAL_CONN_SIGNALS 6 #define MAX_SOCKET_OPEN_RETRY 5 typedef enum { @@ -583,6 +583,12 @@ static void _dbus_name_changed_cb(GDBusConnection *conn, DBG("ConnMan destroyed: name %s, old %s, new %s", name, old, new); connman_register_agent(); + } else if (g_strcmp0(name, CLATD_SERVICE) == 0 && *new == '\0') { + DBG("Clat destroyed: name %s, old %s, new %s", name, old, new); + + /* If clatd is terminated unexpectedly, reset and enable clat service. */ + if (NETCONFIG_CELLULAR_ONLINE == cellular_state_get_service_state()) + netconfig_clatd_reset(); } g_free(name); g_free(old); @@ -1206,7 +1212,7 @@ void register_gdbus_signal(void) connection, DBUS_SERVICE_DBUS, DBUS_INTERFACE_DBUS, - CONNMAN_SIGNAL_NAME_CHANGED, + SIGNAL_NAME_OWNER_CHANGED, NULL, CONNMAN_SERVICE, G_DBUS_SIGNAL_FLAGS_NONE, @@ -1242,6 +1248,20 @@ void register_gdbus_signal(void) INFO("Successfully register Supplicant WPS DBus signal filters"); + conn_subscription_ids[5] = g_dbus_connection_signal_subscribe( + connection, + DBUS_SERVICE_DBUS, + DBUS_INTERFACE_DBUS, + SIGNAL_NAME_OWNER_CHANGED, + NULL, + CLATD_SERVICE, + G_DBUS_SIGNAL_FLAGS_NONE, + _dbus_name_changed_cb, + NULL, + NULL); + + INFO("Successfully register clat DBus signal filters"); + for (sig = SIG_INTERFACE_REMOVED; sig < SIG_MAX; sig++) { /* * For SIG_INTERFACE_REMOVED INTERFACE_ADDED -- 2.34.1