DBus: Refactor array adding, add binary arrays
[mech_eap.git] / wpa_supplicant / dbus / dbus_dict_helpers.h
index eb31575..9e90c50 100644 (file)
@@ -15,6 +15,8 @@
 #ifndef DBUS_DICT_HELPERS_H
 #define DBUS_DICT_HELPERS_H
 
+#include "wpabuf.h"
+
 /*
  * Adding a dict to a DBusMessage
  */
@@ -74,7 +76,13 @@ dbus_bool_t wpa_dbus_dict_append_byte_array(DBusMessageIter *iter_dict,
                                            const char *value,
                                            const dbus_uint32_t value_len);
 
-/* Manual construction and addition of string array elements */
+/* Manual construction and addition of array elements */
+dbus_bool_t wpa_dbus_dict_begin_array(DBusMessageIter *iter_dict,
+                                      const char *key, const char *type,
+                                      DBusMessageIter *iter_dict_entry,
+                                      DBusMessageIter *iter_dict_val,
+                                      DBusMessageIter *iter_array);
+
 dbus_bool_t wpa_dbus_dict_begin_string_array(DBusMessageIter *iter_dict,
                                              const char *key,
                                              DBusMessageIter *iter_dict_entry,
@@ -84,10 +92,24 @@ dbus_bool_t wpa_dbus_dict_begin_string_array(DBusMessageIter *iter_dict,
 dbus_bool_t wpa_dbus_dict_string_array_add_element(DBusMessageIter *iter_array,
                                              const char *elem);
 
-dbus_bool_t wpa_dbus_dict_end_string_array(DBusMessageIter *iter_dict,
-                                           DBusMessageIter *iter_dict_entry,
-                                           DBusMessageIter *iter_dict_val,
-                                           DBusMessageIter *iter_array);
+dbus_bool_t wpa_dbus_dict_bin_array_add_element(DBusMessageIter *iter_array,
+                                               const u8 *value,
+                                               size_t value_len);
+
+dbus_bool_t wpa_dbus_dict_end_array(DBusMessageIter *iter_dict,
+                                    DBusMessageIter *iter_dict_entry,
+                                    DBusMessageIter *iter_dict_val,
+                                    DBusMessageIter *iter_array);
+
+static inline dbus_bool_t
+wpa_dbus_dict_end_string_array(DBusMessageIter *iter_dict,
+                              DBusMessageIter *iter_dict_entry,
+                              DBusMessageIter *iter_dict_val,
+                              DBusMessageIter *iter_array)
+{
+       return wpa_dbus_dict_end_array(iter_dict, iter_dict_entry,
+                                      iter_dict_val, iter_array);
+}
 
 /* Convenience function to add a whole string list */
 dbus_bool_t wpa_dbus_dict_append_string_array(DBusMessageIter *iter_dict,
@@ -95,14 +117,22 @@ dbus_bool_t wpa_dbus_dict_append_string_array(DBusMessageIter *iter_dict,
                                              const char **items,
                                              const dbus_uint32_t num_items);
 
+dbus_bool_t wpa_dbus_dict_append_wpabuf_array(DBusMessageIter *iter_dict,
+                                             const char *key,
+                                             const struct wpabuf **items,
+                                             const dbus_uint32_t num_items);
+
 /*
  * Reading a dict from a DBusMessage
  */
 
+#define WPAS_DBUS_TYPE_BINARRAY (DBUS_NUMBER_OF_TYPES + 100)
+
 struct wpa_dbus_dict_entry {
        int type;         /** the dbus type of the dict entry's value */
        int array_type;   /** the dbus type of the array elements if the dict
-                             entry value contains an array */
+                             entry value contains an array, or the special
+                             WPAS_DBUS_TYPE_BINARRAY */
        const char *key;  /** key of the dict entry */
 
        /** Possible values of the property */
@@ -119,6 +149,7 @@ struct wpa_dbus_dict_entry {
                double double_value;
                char *bytearray_value;
                char **strarray_value;
+               struct wpabuf **binarray_value;
        };
        dbus_uint32_t array_len; /** length of the array if the dict entry's
                                     value contains an array */