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)
{
int ret = STICKERD_SERVER_ERROR_NONE;
char *m_info_bus_name = NULL;
char *list_bus_name = NULL;
monitoring_info_s *m_info = NULL;
GList *monitoring_list = NULL;
+ int c_lib;
+
+ g_variant_get(parameters, "(i)", &c_lib);
if (reply_body == NULL)
return STICKERD_SERVER_ERROR_INVALID_PARAMETER;
goto cleanup;
}
+ if ((CLIENT_LIB)c_lib == STICKER_CLIENT_LIB_CONSUMER)
+ *consumer_list = g_list_append(*consumer_list, g_strdup((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)
return ret;
}
-int stickerd_server_unregister(GVariant *parameters, GVariant **reply_body, const gchar *sender, GHashTable **monitoring_hash)
+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, "(i)", &watcher_id);
+ g_variant_get(parameters, "(ii)", &c_lib, &watcher_id);
+
+ if ((CLIENT_LIB)c_lib == STICKER_CLIENT_LIB_CONSUMER) {
+ GList *node = g_list_find_custom(*consumer_list, sender, (GCompareFunc) strcmp);
+ if (node)
+ *consumer_list = g_list_delete_link(*consumer_list, node);
+ }
if (g_hash_table_lookup(*monitoring_hash, GUINT_TO_POINTER(watcher_id)) != NULL) {
g_bus_unwatch_name(watcher_id);