dbus: utility to create dbus message from wpabuf array
If a wpabuf array is used to store basic typed data that we would like to send over D-Bus then this utility will be of help when it places the data in a variant with format aa? (array of an array of type ?, with ? indicating any basic type). Signed-hostap: Jayant Sane <jayant.sane@intel.com> Signed-hostap: Angie Chinchilla <angie.v.chinchilla@intel.com> intended-for: hostap-1
This commit is contained in:
parent
dddc70455b
commit
96c4f3a707
2 changed files with 76 additions and 0 deletions
|
@ -447,6 +447,76 @@ dbus_bool_t wpas_dbus_simple_array_property_getter(DBusMessageIter *iter,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wpas_dbus_simple_array_array_property_getter - Get array array type property
|
||||||
|
* @iter: Pointer to incoming dbus message iterator
|
||||||
|
* @type: DBus type of property array elements (must be basic type)
|
||||||
|
* @array: pointer to array of elements to put into response message
|
||||||
|
* @array_len: length of above array
|
||||||
|
* @error: a pointer to an error to fill on failure
|
||||||
|
* Returns: TRUE if the request succeeded, FALSE if it failed
|
||||||
|
*
|
||||||
|
* Generic getter for array type properties. Array elements type is
|
||||||
|
* required to be basic.
|
||||||
|
*/
|
||||||
|
dbus_bool_t wpas_dbus_simple_array_array_property_getter(DBusMessageIter *iter,
|
||||||
|
const int type,
|
||||||
|
struct wpabuf **array,
|
||||||
|
size_t array_len,
|
||||||
|
DBusError *error)
|
||||||
|
{
|
||||||
|
DBusMessageIter variant_iter, array_iter;
|
||||||
|
char type_str[] = "aa?";
|
||||||
|
char inner_type_str[] = "a?";
|
||||||
|
const char *sub_type_str;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if (!dbus_type_is_basic(type)) {
|
||||||
|
dbus_set_error(error, DBUS_ERROR_FAILED,
|
||||||
|
"%s: given type is not basic", __func__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub_type_str = wpa_dbus_type_as_string(type);
|
||||||
|
type_str[2] = sub_type_str[0];
|
||||||
|
inner_type_str[1] = sub_type_str[0];
|
||||||
|
|
||||||
|
if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT,
|
||||||
|
type_str, &variant_iter)) {
|
||||||
|
dbus_set_error(error, DBUS_ERROR_FAILED,
|
||||||
|
"%s: failed to construct message 1", __func__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (!dbus_message_iter_open_container(&variant_iter, DBUS_TYPE_ARRAY,
|
||||||
|
inner_type_str, &array_iter)) {
|
||||||
|
dbus_set_error(error, DBUS_ERROR_FAILED,
|
||||||
|
"%s: failed to construct message 2", __func__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < array_len; i++) {
|
||||||
|
wpa_dbus_dict_bin_array_add_element(&array_iter,
|
||||||
|
wpabuf_head(array[i]),
|
||||||
|
wpabuf_len(array[i]));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dbus_message_iter_close_container(&variant_iter, &array_iter)) {
|
||||||
|
dbus_set_error(error, DBUS_ERROR_FAILED,
|
||||||
|
"%s: failed to close message 2", __func__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dbus_message_iter_close_container(iter, &variant_iter)) {
|
||||||
|
dbus_set_error(error, DBUS_ERROR_FAILED,
|
||||||
|
"%s: failed to close message 1", __func__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpas_dbus_handler_create_interface - Request registration of a network iface
|
* wpas_dbus_handler_create_interface - Request registration of a network iface
|
||||||
* @message: Pointer to incoming dbus message
|
* @message: Pointer to incoming dbus message
|
||||||
|
|
|
@ -41,6 +41,12 @@ dbus_bool_t wpas_dbus_simple_array_property_getter(DBusMessageIter *iter,
|
||||||
size_t array_len,
|
size_t array_len,
|
||||||
DBusError *error);
|
DBusError *error);
|
||||||
|
|
||||||
|
dbus_bool_t wpas_dbus_simple_array_array_property_getter(DBusMessageIter *iter,
|
||||||
|
const int type,
|
||||||
|
struct wpabuf **array,
|
||||||
|
size_t array_len,
|
||||||
|
DBusError *error);
|
||||||
|
|
||||||
DBusMessage * wpas_dbus_handler_create_interface(DBusMessage *message,
|
DBusMessage * wpas_dbus_handler_create_interface(DBusMessage *message,
|
||||||
struct wpa_global *global);
|
struct wpa_global *global);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue