Added NameOwnerChanged signal handling for clatd service. 39/212439/3
authorNiraj Kumar Goit <niraj.g@samsung.com>
Wed, 21 Aug 2019 11:04:24 +0000 (16:34 +0530)
committerNiraj Kumar Goit <niraj.g@samsung.com>
Thu, 29 Aug 2019 10:22:14 +0000 (15:52 +0530)
If cellular profile is connected and clatd is terminated unexpectedly,
restart clat service.

Change-Id: Ic9a90db97fe6a8d6cefc52145496e55eb3394c17
Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
include/clatd-handler.h
src/clatd-handler.c
src/signal-handler.c

index 47060e0..7e0fdc8 100755 (executable)
 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
 }
index 557943f..814504b 100755 (executable)
 #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();
+}
index 9a57730..99620b8 100755 (executable)
 
 #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