From e3a8e242bdfc8f985338250e58356120696155d0 Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Mon, 3 Sep 2012 21:59:40 +0000 Subject: [PATCH] e/connman: Add security types to Connman_Service SVN revision: 76048 --- src/modules/connman/E_Connman.h | 1 + src/modules/connman/e_connman.c | 62 +++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/src/modules/connman/E_Connman.h b/src/modules/connman/E_Connman.h index 1c33926df..b976fa408 100644 --- a/src/modules/connman/E_Connman.h +++ b/src/modules/connman/E_Connman.h @@ -58,6 +58,7 @@ struct Connman_Service /* Properties */ char *name; + Eina_Array *security; enum Connman_State state; enum Connman_Service_Type type; uint8_t strength; diff --git a/src/modules/connman/e_connman.c b/src/modules/connman/e_connman.c index c4aa80e60..3c4e56e03 100644 --- a/src/modules/connman/e_connman.c +++ b/src/modules/connman/e_connman.c @@ -25,6 +25,18 @@ EAPI int E_CONNMAN_EVENT_MANAGER_OUT; /* utility functions */ +static void _eina_str_array_clean(Eina_Array *array) +{ + const char *item; + Eina_Array_Iterator itr; + unsigned int i; + + EINA_ARRAY_ITER_NEXT(array, i, item, itr) + eina_stringshare_del(item); + + eina_array_clean(array); +} + static bool _dbus_bool_get(DBusMessageIter *itr) { dbus_bool_t val; @@ -32,6 +44,47 @@ static bool _dbus_bool_get(DBusMessageIter *itr) return val; } +static void _dbus_str_array_to_eina(DBusMessageIter *value, Eina_Array **old, + unsigned nelem) +{ + DBusMessageIter itr; + Eina_Array *array; + EINA_SAFETY_ON_NULL_RETURN(value); + EINA_SAFETY_ON_NULL_RETURN(old); + + EINA_SAFETY_ON_FALSE_RETURN( + dbus_message_iter_get_arg_type(value) == DBUS_TYPE_ARRAY); + + dbus_message_iter_recurse(value, &itr); + + array = *old; + if (array == NULL) + { + array = eina_array_new(nelem); + *old = array; + } + else + _eina_str_array_clean(array); + + for (; dbus_message_iter_get_arg_type(&itr) != DBUS_TYPE_INVALID; + dbus_message_iter_next(&itr)) + { + const char *s; + if (dbus_message_iter_get_arg_type(&itr) != DBUS_TYPE_STRING) + { + ERR("Unexpected D-Bus type %d", + dbus_message_iter_get_arg_type(&itr)); + continue; + } + + dbus_message_iter_get_basic(&itr, &s); + eina_array_push(array, eina_stringshare_add(s)); + DBG("Push %s", s); + } + + return; +} + static enum Connman_State str_to_state(const char *s) { if (strcmp(s, "offline") == 0) @@ -144,6 +197,13 @@ static void _service_parse_prop_changed(struct Connman_Service *cs, cs->strength = strength; DBG("New strength: %d", strength);; } + else if (strcmp(prop_name, "Security") == 0) + { + DBG("Old security count: %d", + cs->security ? eina_array_count(cs->security) : 0); + _dbus_str_array_to_eina(value, &cs->security, 2); + DBG("New security count: %d", eina_array_count(cs->security)); + } } static void _service_prop_dict_changed(struct Connman_Service *cs, @@ -198,6 +258,8 @@ static void _service_free(struct Connman_Service *cs) return; free(cs->name); + _eina_str_array_clean(cs->security); + eina_array_free(cs->security); _connman_object_clear(&cs->obj); free(cs);