Remove unused code
[platform/core/uifw/capi-ui-sticker.git] / server / stickerd_dbus.c
index 4ff175a..d125daf 100644 (file)
 #define LOG_TAG "STICKERD_DBUS"
 
 static GDBusConnection *_gdbus_connection;
+extern GMainLoop *main_loop;
 
 int stickerd_server_register(GVariant *parameters, GVariant **reply_body, const gchar *sender, GBusNameAppearedCallback name_appeared_handler,
-        GBusNameVanishedCallback name_vanished_handler, GHashTable **monitoring_hash)
+        GBusNameVanishedCallback name_vanished_handler, GHashTable **monitoring_hash, GList **consumer_list)
 {
-    GList *sender_list = NULL;
-    const char *bus_name = sender;
+    int ret = STICKERD_SERVER_ERROR_NONE;
+    char *m_info_bus_name = NULL;
+    char *list_bus_name = NULL;
     monitoring_info_s *m_info = NULL;
-    uid_t request_uid = 0;
     GList *monitoring_list = NULL;
+    int c_lib;
 
-    if (bus_name == NULL)
-        return STICKERD_SERVER_ERROR_IO_ERROR;
+    g_variant_get(parameters, "(i)", &c_lib);
 
-    g_variant_get(parameters, "(i)", &request_uid);
-    monitoring_list = (GList *)g_hash_table_lookup(*monitoring_hash, GUINT_TO_POINTER(request_uid));
-    sender_list = g_list_find_custom(monitoring_list, bus_name, (GCompareFunc) strcmp);
+    if (reply_body == NULL)
+        return STICKERD_SERVER_ERROR_INVALID_PARAMETER;
 
-    if (sender_list == NULL) {
-        LOGD("Add a new sender");
-        m_info = (monitoring_info_s *)calloc(1, sizeof(monitoring_info_s));
-        if (m_info == NULL) {
-            LOGE("Failed to alloc memory");
-            return STICKERD_SERVER_ERROR_IO_ERROR;
-        }
+    m_info_bus_name = strdup(sender);
+    list_bus_name = strdup(sender);
+    if (m_info_bus_name == NULL || list_bus_name == NULL) {
+        ret = STICKERD_SERVER_ERROR_IO_ERROR;
+        goto cleanup;
+    }
 
-        m_info->bus_name = strdup(bus_name);
-        m_info->uid = request_uid;
-        m_info->watcher_id = g_bus_watch_name_on_connection(
-                _gdbus_connection,
-                bus_name,
-                G_BUS_NAME_WATCHER_FLAGS_NONE,
-                name_appeared_handler,
-                name_vanished_handler,
-                m_info,
-                NULL);
-        if (m_info->watcher_id == 0) {
-            LOGE("Failed to get identifier");
-            free(m_info->bus_name);
-            free(m_info);
-            return STICKERD_SERVER_ERROR_IO_ERROR;
-        }
+    LOGD("Add a new sender");
+    m_info = (monitoring_info_s *)calloc(1, sizeof(monitoring_info_s));
+    if (m_info == NULL) {
+        LOGE("Failed to alloc memory");
+        ret = STICKERD_SERVER_ERROR_OUT_OF_MEMORY;
+        goto cleanup;
+    }
 
-        monitoring_list = g_list_append(monitoring_list, strdup(bus_name));
-        LOGD("sender: %s, len: %d", sender, g_list_length(monitoring_list));
-        if (g_hash_table_lookup(*monitoring_hash, GUINT_TO_POINTER(request_uid)) == NULL)
-            g_hash_table_insert(*monitoring_hash, GUINT_TO_POINTER(request_uid), monitoring_list);
-    } else {
-        LOGW("Sender(%s) already exist", sender);
+    m_info->bus_name = m_info_bus_name;
+    m_info->watcher_id = g_bus_watch_name_on_connection(
+            _gdbus_connection,
+            m_info_bus_name,
+            G_BUS_NAME_WATCHER_FLAGS_NONE,
+            name_appeared_handler,
+            name_vanished_handler,
+            m_info,
+            NULL);
+    if (m_info->watcher_id == 0) {
+        LOGE("Failed to get identifier");
+        ret = STICKERD_SERVER_ERROR_OPERATION_FAILED;
+        goto cleanup;
     }
 
-    *reply_body = g_variant_new("()");
+    *reply_body = g_variant_new("(i)", m_info->watcher_id);
     if (*reply_body == NULL) {
-        if (m_info) {
-            if (m_info->bus_name)
-                free(m_info->bus_name);
-            free(m_info);
-        }
-        monitoring_list = g_list_remove(monitoring_list, bus_name);
         LOGE("Failed to make reply");
-        return STICKERD_SERVER_ERROR_OUT_OF_MEMORY;
+        ret = STICKERD_SERVER_ERROR_OUT_OF_MEMORY;
+        goto cleanup;
+    }
+
+    if ((CLIENT_LIB)c_lib == STICKER_CLIENT_LIB_CONSUMER)
+        *consumer_list = g_list_append(*consumer_list, strdup((const char *)sender));
+
+    LOGD("sender: %s, watcher: %d", sender, m_info->watcher_id);
+    monitoring_list = g_list_append(monitoring_list, list_bus_name);
+    if (g_hash_table_lookup(*monitoring_hash, GUINT_TO_POINTER(m_info->watcher_id)) == NULL)
+        g_hash_table_insert(*monitoring_hash, GUINT_TO_POINTER(m_info->watcher_id), monitoring_list);
+    else
+        LOGW("Sender(%s) already exist", sender);
+
+    return STICKERD_SERVER_ERROR_NONE;
+
+cleanup:
+    if (m_info_bus_name)
+        free(m_info_bus_name);
+
+    if (list_bus_name)
+        free(list_bus_name);
+
+    if (m_info) {
+        free(m_info);
+        m_info = NULL;
     }
+
+    return ret;
+}
+
+int stickerd_server_unregister(GVariant *parameters, GVariant **reply_body, const gchar *sender, GHashTable **monitoring_hash, GList **consumer_list)
+{
+    int watcher_id = 0;
+    int c_lib;
+
+    g_variant_get(parameters, "(ii)", &c_lib, &watcher_id);
+
+    if ((CLIENT_LIB)c_lib == STICKER_CLIENT_LIB_CONSUMER)
+        *consumer_list = g_list_remove(*consumer_list, sender);
+
+    if (g_hash_table_lookup(*monitoring_hash, GUINT_TO_POINTER(watcher_id)) != NULL) {
+        g_bus_unwatch_name(watcher_id);
+        delete_monitoring_list(monitoring_hash, sender, watcher_id);
+    }
+
     return STICKERD_SERVER_ERROR_NONE;
 }
 
@@ -156,15 +191,15 @@ cleanup:
     return result;
 }
 
-int delete_monitoring_list(GHashTable **monitoring_hash, const char *sender, uid_t uid)
+int delete_monitoring_list(GHashTable **monitoring_hash, const char *sender, int watcher_id)
 {
     GList *monitoring_list = NULL;
     GList *del_list = NULL;
     char *bus_name;
 
-    monitoring_list = (GList *)g_hash_table_lookup(*monitoring_hash, GUINT_TO_POINTER(uid));
+    monitoring_list = (GList *)g_hash_table_lookup(*monitoring_hash, GUINT_TO_POINTER(watcher_id));
     if (monitoring_list == NULL) {
-        LOGE("The key(%d) is not found", uid);
+        LOGE("The key(%d) is not found", watcher_id);
         return STICKERD_SERVER_ERROR_IO_ERROR;
     }
 
@@ -179,10 +214,10 @@ int delete_monitoring_list(GHashTable **monitoring_hash, const char *sender, uid
         monitoring_list = g_list_delete_link(monitoring_list, del_list);
 
         if (monitoring_list == NULL) {
-            g_hash_table_steal(*monitoring_hash, GUINT_TO_POINTER(uid));
+            g_hash_table_steal(*monitoring_hash, GUINT_TO_POINTER(watcher_id));
         } else {
             monitoring_list = g_list_first(monitoring_list);
-            g_hash_table_replace(*monitoring_hash, GUINT_TO_POINTER(uid), monitoring_list);
+            g_hash_table_replace(*monitoring_hash, GUINT_TO_POINTER(watcher_id), monitoring_list);
         }
     }
     return STICKERD_SERVER_ERROR_NONE;