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