Home | History | Annotate | Line # | Download | only in dbus
      1      1.1  christos /*
      2      1.1  christos  * WPA Supplicant / dbus-based control interface
      3      1.1  christos  * Copyright (c) 2006, Dan Williams <dcbw (at) redhat.com> and Red Hat, Inc.
      4      1.1  christos  *
      5  1.1.1.3  christos  * This software may be distributed under the terms of the BSD license.
      6  1.1.1.3  christos  * See README for more details.
      7      1.1  christos  */
      8      1.1  christos 
      9      1.1  christos #ifndef DBUS_DICT_HELPERS_H
     10      1.1  christos #define DBUS_DICT_HELPERS_H
     11      1.1  christos 
     12  1.1.1.2  christos #include "wpabuf.h"
     13  1.1.1.2  christos 
     14      1.1  christos /*
     15      1.1  christos  * Adding a dict to a DBusMessage
     16      1.1  christos  */
     17      1.1  christos 
     18      1.1  christos dbus_bool_t wpa_dbus_dict_open_write(DBusMessageIter *iter,
     19      1.1  christos 				     DBusMessageIter *iter_dict);
     20      1.1  christos 
     21      1.1  christos dbus_bool_t wpa_dbus_dict_close_write(DBusMessageIter *iter,
     22      1.1  christos 				      DBusMessageIter *iter_dict);
     23      1.1  christos 
     24      1.1  christos const char * wpa_dbus_type_as_string(const int type);
     25      1.1  christos 
     26      1.1  christos dbus_bool_t wpa_dbus_dict_append_string(DBusMessageIter *iter_dict,
     27      1.1  christos 					const char *key, const char *value);
     28      1.1  christos 
     29      1.1  christos dbus_bool_t wpa_dbus_dict_append_bool(DBusMessageIter *iter_dict,
     30      1.1  christos 				      const char *key,
     31      1.1  christos 				      const dbus_bool_t value);
     32      1.1  christos 
     33      1.1  christos dbus_bool_t wpa_dbus_dict_append_int16(DBusMessageIter *iter_dict,
     34      1.1  christos 				       const char *key,
     35      1.1  christos 				       const dbus_int16_t value);
     36      1.1  christos 
     37      1.1  christos dbus_bool_t wpa_dbus_dict_append_uint16(DBusMessageIter *iter_dict,
     38      1.1  christos 					const char *key,
     39      1.1  christos 					const dbus_uint16_t value);
     40      1.1  christos 
     41      1.1  christos dbus_bool_t wpa_dbus_dict_append_int32(DBusMessageIter *iter_dict,
     42      1.1  christos 				       const char *key,
     43      1.1  christos 				       const dbus_int32_t value);
     44      1.1  christos 
     45      1.1  christos dbus_bool_t wpa_dbus_dict_append_uint32(DBusMessageIter *iter_dict,
     46      1.1  christos 					const char *key,
     47      1.1  christos 					const dbus_uint32_t value);
     48      1.1  christos 
     49  1.1.1.6  christos dbus_bool_t wpa_dbus_dict_append_uint64(DBusMessageIter *iter_dict,
     50  1.1.1.6  christos 					const char *key,
     51  1.1.1.6  christos 					const dbus_uint64_t value);
     52  1.1.1.6  christos 
     53      1.1  christos dbus_bool_t wpa_dbus_dict_append_object_path(DBusMessageIter *iter_dict,
     54      1.1  christos 					     const char *key,
     55      1.1  christos 					     const char *value);
     56      1.1  christos 
     57      1.1  christos dbus_bool_t wpa_dbus_dict_append_byte_array(DBusMessageIter *iter_dict,
     58      1.1  christos 					    const char *key,
     59      1.1  christos 					    const char *value,
     60      1.1  christos 					    const dbus_uint32_t value_len);
     61      1.1  christos 
     62  1.1.1.6  christos dbus_bool_t wpa_dbus_dict_append_double(DBusMessageIter *iter_dict,
     63  1.1.1.6  christos 					const char *key,
     64  1.1.1.6  christos 					const double value);
     65  1.1.1.6  christos 
     66  1.1.1.2  christos /* Manual construction and addition of array elements */
     67  1.1.1.2  christos dbus_bool_t wpa_dbus_dict_begin_array(DBusMessageIter *iter_dict,
     68  1.1.1.4  christos 				      const char *key, const char *type,
     69  1.1.1.4  christos 				      DBusMessageIter *iter_dict_entry,
     70  1.1.1.4  christos 				      DBusMessageIter *iter_dict_val,
     71  1.1.1.4  christos 				      DBusMessageIter *iter_array);
     72  1.1.1.2  christos 
     73      1.1  christos dbus_bool_t wpa_dbus_dict_begin_string_array(DBusMessageIter *iter_dict,
     74  1.1.1.4  christos 					     const char *key,
     75  1.1.1.4  christos 					     DBusMessageIter *iter_dict_entry,
     76  1.1.1.4  christos 					     DBusMessageIter *iter_dict_val,
     77  1.1.1.4  christos 					     DBusMessageIter *iter_array);
     78      1.1  christos 
     79      1.1  christos dbus_bool_t wpa_dbus_dict_string_array_add_element(DBusMessageIter *iter_array,
     80  1.1.1.4  christos 						   const char *elem);
     81      1.1  christos 
     82  1.1.1.2  christos dbus_bool_t wpa_dbus_dict_bin_array_add_element(DBusMessageIter *iter_array,
     83  1.1.1.2  christos 						const u8 *value,
     84  1.1.1.2  christos 						size_t value_len);
     85  1.1.1.2  christos 
     86  1.1.1.2  christos dbus_bool_t wpa_dbus_dict_end_array(DBusMessageIter *iter_dict,
     87  1.1.1.4  christos 				    DBusMessageIter *iter_dict_entry,
     88  1.1.1.4  christos 				    DBusMessageIter *iter_dict_val,
     89  1.1.1.4  christos 				    DBusMessageIter *iter_array);
     90  1.1.1.2  christos 
     91  1.1.1.2  christos static inline dbus_bool_t
     92  1.1.1.2  christos wpa_dbus_dict_end_string_array(DBusMessageIter *iter_dict,
     93  1.1.1.2  christos 			       DBusMessageIter *iter_dict_entry,
     94  1.1.1.2  christos 			       DBusMessageIter *iter_dict_val,
     95  1.1.1.2  christos 			       DBusMessageIter *iter_array)
     96  1.1.1.2  christos {
     97  1.1.1.2  christos 	return wpa_dbus_dict_end_array(iter_dict, iter_dict_entry,
     98  1.1.1.2  christos 				       iter_dict_val, iter_array);
     99  1.1.1.2  christos }
    100      1.1  christos 
    101      1.1  christos /* Convenience function to add a whole string list */
    102      1.1  christos dbus_bool_t wpa_dbus_dict_append_string_array(DBusMessageIter *iter_dict,
    103      1.1  christos 					      const char *key,
    104      1.1  christos 					      const char **items,
    105      1.1  christos 					      const dbus_uint32_t num_items);
    106      1.1  christos 
    107  1.1.1.2  christos dbus_bool_t wpa_dbus_dict_append_wpabuf_array(DBusMessageIter *iter_dict,
    108  1.1.1.2  christos 					      const char *key,
    109  1.1.1.2  christos 					      const struct wpabuf **items,
    110  1.1.1.2  christos 					      const dbus_uint32_t num_items);
    111  1.1.1.2  christos 
    112      1.1  christos /*
    113      1.1  christos  * Reading a dict from a DBusMessage
    114      1.1  christos  */
    115      1.1  christos 
    116  1.1.1.4  christos /*
    117  1.1.1.4  christos  * Used only in struct wpa_dbus_dict_entry::array_type internally to identify
    118  1.1.1.4  christos  * special binary array case.
    119  1.1.1.4  christos  */
    120  1.1.1.4  christos #define WPAS_DBUS_TYPE_BINARRAY ((int) '@')
    121  1.1.1.2  christos 
    122      1.1  christos struct wpa_dbus_dict_entry {
    123      1.1  christos 	int type;         /** the dbus type of the dict entry's value */
    124      1.1  christos 	int array_type;   /** the dbus type of the array elements if the dict
    125  1.1.1.2  christos 			      entry value contains an array, or the special
    126  1.1.1.2  christos 			      WPAS_DBUS_TYPE_BINARRAY */
    127      1.1  christos 	const char *key;  /** key of the dict entry */
    128      1.1  christos 
    129      1.1  christos 	/** Possible values of the property */
    130      1.1  christos 	union {
    131      1.1  christos 		char *str_value;
    132      1.1  christos 		char byte_value;
    133      1.1  christos 		dbus_bool_t bool_value;
    134      1.1  christos 		dbus_int16_t int16_value;
    135      1.1  christos 		dbus_uint16_t uint16_value;
    136      1.1  christos 		dbus_int32_t int32_value;
    137      1.1  christos 		dbus_uint32_t uint32_value;
    138      1.1  christos 		dbus_int64_t int64_value;
    139      1.1  christos 		dbus_uint64_t uint64_value;
    140      1.1  christos 		double double_value;
    141      1.1  christos 		char *bytearray_value;
    142  1.1.1.6  christos 		dbus_uint16_t *uint16array_value;
    143      1.1  christos 		char **strarray_value;
    144  1.1.1.2  christos 		struct wpabuf **binarray_value;
    145      1.1  christos 	};
    146      1.1  christos 	dbus_uint32_t array_len; /** length of the array if the dict entry's
    147      1.1  christos 				     value contains an array */
    148      1.1  christos };
    149      1.1  christos 
    150      1.1  christos dbus_bool_t wpa_dbus_dict_open_read(DBusMessageIter *iter,
    151  1.1.1.2  christos 				    DBusMessageIter *iter_dict,
    152  1.1.1.2  christos 				    DBusError *error);
    153      1.1  christos 
    154      1.1  christos dbus_bool_t wpa_dbus_dict_get_entry(DBusMessageIter *iter_dict,
    155      1.1  christos 				    struct wpa_dbus_dict_entry *entry);
    156      1.1  christos 
    157      1.1  christos dbus_bool_t wpa_dbus_dict_has_dict_entry(DBusMessageIter *iter_dict);
    158      1.1  christos 
    159      1.1  christos void wpa_dbus_dict_entry_clear(struct wpa_dbus_dict_entry *entry);
    160      1.1  christos 
    161      1.1  christos #endif  /* DBUS_DICT_HELPERS_H */
    162