1/* 2 * WPA Supplicant / dbus-based control interface 3 * Copyright (c) 2006, Dan Williams <dcbw@redhat.com> and Red Hat, Inc. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 * 9 * Alternatively, this software may be distributed under the terms of BSD 10 * license. 11 * 12 * See README and COPYING for more details. 13 */ 14 15#ifndef DBUS_DICT_HELPERS_H 16#define DBUS_DICT_HELPERS_H 17 18/* 19 * Adding a dict to a DBusMessage 20 */ 21 22dbus_bool_t wpa_dbus_dict_open_write(DBusMessageIter *iter, 23 DBusMessageIter *iter_dict); 24 25dbus_bool_t wpa_dbus_dict_close_write(DBusMessageIter *iter, 26 DBusMessageIter *iter_dict); 27 28dbus_bool_t wpa_dbus_dict_append_string(DBusMessageIter *iter_dict, 29 const char *key, const char *value); 30 31dbus_bool_t wpa_dbus_dict_append_byte(DBusMessageIter *iter_dict, 32 const char *key, const char value); 33 34dbus_bool_t wpa_dbus_dict_append_bool(DBusMessageIter *iter_dict, 35 const char *key, 36 const dbus_bool_t value); 37 38dbus_bool_t wpa_dbus_dict_append_int16(DBusMessageIter *iter_dict, 39 const char *key, 40 const dbus_int16_t value); 41 42dbus_bool_t wpa_dbus_dict_append_uint16(DBusMessageIter *iter_dict, 43 const char *key, 44 const dbus_uint16_t value); 45 46dbus_bool_t wpa_dbus_dict_append_int32(DBusMessageIter *iter_dict, 47 const char *key, 48 const dbus_int32_t value); 49 50dbus_bool_t wpa_dbus_dict_append_uint32(DBusMessageIter *iter_dict, 51 const char *key, 52 const dbus_uint32_t value); 53 54dbus_bool_t wpa_dbus_dict_append_int64(DBusMessageIter *iter_dict, 55 const char *key, 56 const dbus_int64_t value); 57 58dbus_bool_t wpa_dbus_dict_append_uint64(DBusMessageIter *iter_dict, 59 const char *key, 60 const dbus_uint64_t value); 61 62dbus_bool_t wpa_dbus_dict_append_double(DBusMessageIter *iter_dict, 63 const char *key, 64 const double value); 65 66dbus_bool_t wpa_dbus_dict_append_object_path(DBusMessageIter *iter_dict, 67 const char *key, 68 const char *value); 69 70dbus_bool_t wpa_dbus_dict_append_byte_array(DBusMessageIter *iter_dict, 71 const char *key, 72 const char *value, 73 const dbus_uint32_t value_len); 74 75/* Manual construction and addition of string array elements */ 76dbus_bool_t wpa_dbus_dict_begin_string_array(DBusMessageIter *iter_dict, 77 const char *key, 78 DBusMessageIter *iter_dict_entry, 79 DBusMessageIter *iter_dict_val, 80 DBusMessageIter *iter_array); 81 82dbus_bool_t wpa_dbus_dict_string_array_add_element(DBusMessageIter *iter_array, 83 const char *elem); 84 85dbus_bool_t wpa_dbus_dict_end_string_array(DBusMessageIter *iter_dict, 86 DBusMessageIter *iter_dict_entry, 87 DBusMessageIter *iter_dict_val, 88 DBusMessageIter *iter_array); 89 90/* Convenience function to add a whole string list */ 91dbus_bool_t wpa_dbus_dict_append_string_array(DBusMessageIter *iter_dict, 92 const char *key, 93 const char **items, 94 const dbus_uint32_t num_items); 95 96/* 97 * Reading a dict from a DBusMessage 98 */ 99 100struct wpa_dbus_dict_entry { 101 int type; /** the dbus type of the dict entry's value */ 102 int array_type; /** the dbus type of the array elements if the dict 103 entry value contains an array */ 104 const char *key; /** key of the dict entry */ 105 106 /** Possible values of the property */ 107 union { 108 char *str_value; 109 char byte_value; 110 dbus_bool_t bool_value; 111 dbus_int16_t int16_value; 112 dbus_uint16_t uint16_value; 113 dbus_int32_t int32_value; 114 dbus_uint32_t uint32_value; 115 dbus_int64_t int64_value; 116 dbus_uint64_t uint64_value; 117 double double_value; 118 char *bytearray_value; 119 char **strarray_value; 120 }; 121 dbus_uint32_t array_len; /** length of the array if the dict entry's 122 value contains an array */ 123}; 124 125dbus_bool_t wpa_dbus_dict_open_read(DBusMessageIter *iter, 126 DBusMessageIter *iter_dict); 127 128dbus_bool_t wpa_dbus_dict_get_entry(DBusMessageIter *iter_dict, 129 struct wpa_dbus_dict_entry *entry); 130 131dbus_bool_t wpa_dbus_dict_has_dict_entry(DBusMessageIter *iter_dict); 132 133void wpa_dbus_dict_entry_clear(struct wpa_dbus_dict_entry *entry); 134 135#endif /* DBUS_DICT_HELPERS_H */ 136