e/connman: Add security types to Connman_Service

SVN revision: 76048
This commit is contained in:
Lucas De Marchi 2012-09-03 21:59:40 +00:00
parent 2f3aac7e18
commit e3a8e242bd
2 changed files with 63 additions and 0 deletions

View File

@ -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;

View File

@ -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);