static GDBusConnection *uam_manager_conn;
static guint g_dbus_object_id = 0;
static guint owner_id = 0;
+static guint owner_sig_id = 0;
static const gchar uam_manager_introspection_xml[] =
"<node name='/net/uamd'>"
FUNC_ENTRY;
int result = UAM_ERROR_NONE;
- UAM_DBG("Method[%s] Path[%s] Interface[%s]",
- method_name, object_path, interface_name);
+ UAM_DBG("Sender[%s] Method[%s] Path[%s] Interface[%s]",
+ sender, method_name, object_path, interface_name);
if (0 == g_strcmp0(method_name, "enable")) {
int enable = FALSE;
g_variant_get(parameters, "(i)", &enable);
- UAM_INFO("Enable ua-manager %s", enable == TRUE ? "enabled" : "disabled");
- g_dbus_method_invocation_return_value(invocation,
- g_variant_new("(i)", result));
+ UAM_INFO("ua-manager %s", enable == TRUE ? "enabled" : "disabled");
+
+ g_dbus_method_invocation_return_value(invocation, g_variant_new("(i)", result));
} else if (0 == g_strcmp0(method_name, "uam_request")) {
int function;
/*TODO: Terminate daemon */
}
+static void __uam_manager_owner_change_cb(GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ const char *name = NULL;
+ const char *old_owner = NULL;
+ const char *new_owner = NULL;
+
+ g_variant_get(parameters, "(&s&s&s)", &name, &old_owner, &new_owner);
+
+ if ('\0' == *new_owner) {
+ /* Clean up client info */
+ _uam_core_cleanup_monitor((char *)name);
+ }
+}
+
static void __uam_manager_bus_acquired_cb(
GDBusConnection *connection, const gchar *name, gpointer user_data)
{
__uam_manager_register_object(connection, node_info);
g_dbus_node_info_unref(node_info);
+ /* Subscribe for name lost signal */
+ owner_sig_id = g_dbus_connection_signal_subscribe(connection,
+ UAM_SERVICE_DBUS, UAM_INTERFACE_DBUS,
+ NAME_OWNER_CHANGED, NULL, NULL, G_DBUS_SIGNAL_FLAGS_NONE,
+ __uam_manager_owner_change_cb, NULL, NULL);
+
+ UAM_DBG("owner_sig_id: [%d]", owner_sig_id);
+
uam_manager_conn = connection;
FUNC_EXIT;
FUNC_ENTRY;
if (uam_manager_conn) {
-
+ g_dbus_connection_signal_unsubscribe(uam_manager_conn, owner_sig_id);
__uam_manager_unregister_object(uam_manager_conn);
-
g_object_unref(uam_manager_conn);
- uam_manager_conn = NULL;
-
- if (owner_id > 0) {
- g_bus_unown_name(owner_id);
- owner_id = 0;
- }
-
+ g_bus_unown_name(owner_id);
}
FUNC_EXIT;