From: Marcel Holtmann Date: Sun, 23 Nov 2008 14:04:32 +0000 (+0100) Subject: Fix value of global state property X-Git-Tag: 2.0_alpha~4594 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3b665a3511198458b350528d800c5a8e875e586b;p=framework%2Fconnectivity%2Fconnman.git Fix value of global state property --- diff --git a/src/connman.h b/src/connman.h index 8bacda6..7b7cc5e 100644 --- a/src/connman.h +++ b/src/connman.h @@ -74,6 +74,7 @@ void __connman_element_cleanup(void); void __connman_element_list(enum connman_element_type type, DBusMessageIter *iter); +int __connman_element_count(enum connman_element_type type); const char *__connman_element_type2string(enum connman_element_type type); const char *__connman_element_subtype2string(enum connman_element_subtype type); diff --git a/src/element.c b/src/element.c index d3040cc..58b600e 100644 --- a/src/element.c +++ b/src/element.c @@ -542,10 +542,10 @@ struct append_filter { DBusMessageIter *iter; }; -static gboolean append_path(GNode *node, gpointer data) +static gboolean append_path(GNode *node, gpointer user_data) { struct connman_element *element = node->data; - struct append_filter *filter = data; + struct append_filter *filter = user_data; DBG("element %p name %s", element, element->name); @@ -575,6 +575,44 @@ void __connman_element_list(enum connman_element_type type, g_static_rw_lock_reader_unlock(&element_lock); } +struct count_data { + enum connman_element_type type; + int count; +}; + +static gboolean count_element(GNode *node, gpointer user_data) +{ + struct connman_element *element = node->data; + struct count_data *data = user_data; + + DBG("element %p name %s", element, element->name); + + if (element->type == CONNMAN_ELEMENT_TYPE_ROOT) + return FALSE; + + if (data->type != CONNMAN_ELEMENT_TYPE_UNKNOWN && + data->type != element->type) + return FALSE; + + data->count++; + + return FALSE; +} + +int __connman_element_count(enum connman_element_type type) +{ + struct count_data data = { type, 0 }; + + DBG(""); + + g_static_rw_lock_reader_lock(&element_lock); + g_node_traverse(element_root, G_PRE_ORDER, G_TRAVERSE_ALL, -1, + count_element, &data); + g_static_rw_lock_reader_unlock(&element_lock); + + return data.count; +} + static gint compare_priority(gconstpointer a, gconstpointer b) { const struct connman_driver *driver1 = a; diff --git a/src/manager.c b/src/manager.c index 58f2982..ddaf8fc 100644 --- a/src/manager.c +++ b/src/manager.c @@ -149,7 +149,10 @@ static DBusMessage *get_properties(DBusConnection *conn, append_devices(&dict); append_connections(&dict); - append_state(&dict, "offline"); + if (__connman_element_count(CONNMAN_ELEMENT_TYPE_CONNECTION) > 0) + append_state(&dict, "online"); + else + append_state(&dict, "offline"); dbus_message_iter_close_container(&array, &dict);