dbus_dict_helpers.h revision 281806
1234285Sdim/* 2234285Sdim * WPA Supplicant / dbus-based control interface 3234285Sdim * Copyright (c) 2006, Dan Williams <dcbw@redhat.com> and Red Hat, Inc. 4234285Sdim * 5234285Sdim * This software may be distributed under the terms of the BSD license. 6234285Sdim * See README for more details. 7234285Sdim */ 8234285Sdim 9234285Sdim#ifndef DBUS_DICT_HELPERS_H 10234285Sdim#define DBUS_DICT_HELPERS_H 11234285Sdim 12234285Sdim#include "wpabuf.h" 13234285Sdim 14234285Sdim/* 15234285Sdim * Adding a dict to a DBusMessage 16234285Sdim */ 17234285Sdim 18249423Sdimdbus_bool_t wpa_dbus_dict_open_write(DBusMessageIter *iter, 19234285Sdim DBusMessageIter *iter_dict); 20234285Sdim 21234285Sdimdbus_bool_t wpa_dbus_dict_close_write(DBusMessageIter *iter, 22249423Sdim DBusMessageIter *iter_dict); 23249423Sdim 24234285Sdimconst char * wpa_dbus_type_as_string(const int type); 25234285Sdim 26234285Sdimdbus_bool_t wpa_dbus_dict_append_string(DBusMessageIter *iter_dict, 27234285Sdim const char *key, const char *value); 28234285Sdim 29234285Sdimdbus_bool_t wpa_dbus_dict_append_byte(DBusMessageIter *iter_dict, 30234285Sdim const char *key, const char value); 31234285Sdim 32234285Sdimdbus_bool_t wpa_dbus_dict_append_bool(DBusMessageIter *iter_dict, 33234285Sdim const char *key, 34234285Sdim const dbus_bool_t value); 35234285Sdim 36234285Sdimdbus_bool_t wpa_dbus_dict_append_int16(DBusMessageIter *iter_dict, 37234285Sdim const char *key, 38234285Sdim const dbus_int16_t value); 39234285Sdim 40234285Sdimdbus_bool_t wpa_dbus_dict_append_uint16(DBusMessageIter *iter_dict, 41234285Sdim const char *key, 42234285Sdim const dbus_uint16_t value); 43234285Sdim 44234285Sdimdbus_bool_t wpa_dbus_dict_append_int32(DBusMessageIter *iter_dict, 45234285Sdim const char *key, 46234285Sdim const dbus_int32_t value); 47234285Sdim 48234285Sdimdbus_bool_t wpa_dbus_dict_append_uint32(DBusMessageIter *iter_dict, 49234285Sdim const char *key, 50234285Sdim const dbus_uint32_t value); 51234285Sdim 52234285Sdimdbus_bool_t wpa_dbus_dict_append_int64(DBusMessageIter *iter_dict, 53234285Sdim const char *key, 54234285Sdim const dbus_int64_t value); 55234285Sdim 56234285Sdimdbus_bool_t wpa_dbus_dict_append_uint64(DBusMessageIter *iter_dict, 57234285Sdim const char *key, 58234285Sdim const dbus_uint64_t value); 59239462Sdim 60239462Sdimdbus_bool_t wpa_dbus_dict_append_double(DBusMessageIter *iter_dict, 61234285Sdim const char *key, 62234285Sdim const double value); 63234285Sdim 64234285Sdimdbus_bool_t wpa_dbus_dict_append_object_path(DBusMessageIter *iter_dict, 65234285Sdim const char *key, 66234285Sdim const char *value); 67234285Sdim 68234285Sdimdbus_bool_t wpa_dbus_dict_append_byte_array(DBusMessageIter *iter_dict, 69234285Sdim const char *key, 70234285Sdim const char *value, 71234285Sdim const dbus_uint32_t value_len); 72234285Sdim 73234285Sdim/* Manual construction and addition of array elements */ 74234285Sdimdbus_bool_t wpa_dbus_dict_begin_array(DBusMessageIter *iter_dict, 75234285Sdim const char *key, const char *type, 76234285Sdim DBusMessageIter *iter_dict_entry, 77234285Sdim DBusMessageIter *iter_dict_val, 78234285Sdim DBusMessageIter *iter_array); 79234285Sdim 80234285Sdimdbus_bool_t wpa_dbus_dict_begin_string_array(DBusMessageIter *iter_dict, 81234285Sdim const char *key, 82234285Sdim DBusMessageIter *iter_dict_entry, 83234285Sdim DBusMessageIter *iter_dict_val, 84234285Sdim DBusMessageIter *iter_array); 85234285Sdim 86234285Sdimdbus_bool_t wpa_dbus_dict_string_array_add_element(DBusMessageIter *iter_array, 87234285Sdim const char *elem); 88234285Sdim 89234285Sdimdbus_bool_t wpa_dbus_dict_bin_array_add_element(DBusMessageIter *iter_array, 90234285Sdim const u8 *value, 91234285Sdim size_t value_len); 92234285Sdim 93234285Sdimdbus_bool_t wpa_dbus_dict_end_array(DBusMessageIter *iter_dict, 94234285Sdim DBusMessageIter *iter_dict_entry, 95234285Sdim DBusMessageIter *iter_dict_val, 96234285Sdim DBusMessageIter *iter_array); 97234285Sdim 98234285Sdimstatic inline dbus_bool_t 99234285Sdimwpa_dbus_dict_end_string_array(DBusMessageIter *iter_dict, 100234285Sdim DBusMessageIter *iter_dict_entry, 101234285Sdim DBusMessageIter *iter_dict_val, 102234285Sdim DBusMessageIter *iter_array) 103234285Sdim{ 104234285Sdim return wpa_dbus_dict_end_array(iter_dict, iter_dict_entry, 105234285Sdim iter_dict_val, iter_array); 106234285Sdim} 107234285Sdim 108234285Sdim/* Convenience function to add a whole string list */ 109234285Sdimdbus_bool_t wpa_dbus_dict_append_string_array(DBusMessageIter *iter_dict, 110234285Sdim const char *key, 111234285Sdim const char **items, 112234285Sdim const dbus_uint32_t num_items); 113234285Sdim 114234285Sdimdbus_bool_t wpa_dbus_dict_append_wpabuf_array(DBusMessageIter *iter_dict, 115234285Sdim const char *key, 116234285Sdim const struct wpabuf **items, 117234285Sdim const dbus_uint32_t num_items); 118234285Sdim 119234285Sdim/* 120234285Sdim * Reading a dict from a DBusMessage 121234285Sdim */ 122234285Sdim 123234285Sdim/* 124234285Sdim * Used only in struct wpa_dbus_dict_entry::array_type internally to identify 125234285Sdim * special binary array case. 126234285Sdim */ 127234285Sdim#define WPAS_DBUS_TYPE_BINARRAY ((int) '@') 128234285Sdim 129234285Sdimstruct wpa_dbus_dict_entry { 130234285Sdim int type; /** the dbus type of the dict entry's value */ 131234285Sdim int array_type; /** the dbus type of the array elements if the dict 132234285Sdim entry value contains an array, or the special 133234285Sdim WPAS_DBUS_TYPE_BINARRAY */ 134234285Sdim const char *key; /** key of the dict entry */ 135234285Sdim 136234285Sdim /** Possible values of the property */ 137234285Sdim union { 138234285Sdim char *str_value; 139234285Sdim char byte_value; 140234285Sdim dbus_bool_t bool_value; 141234285Sdim dbus_int16_t int16_value; 142234285Sdim dbus_uint16_t uint16_value; 143234285Sdim dbus_int32_t int32_value; 144234285Sdim dbus_uint32_t uint32_value; 145234285Sdim dbus_int64_t int64_value; 146234285Sdim dbus_uint64_t uint64_value; 147234285Sdim double double_value; 148234285Sdim char *bytearray_value; 149234285Sdim char **strarray_value; 150234285Sdim struct wpabuf **binarray_value; 151234285Sdim }; 152234285Sdim dbus_uint32_t array_len; /** length of the array if the dict entry's 153234285Sdim value contains an array */ 154234285Sdim}; 155234285Sdim 156234285Sdimdbus_bool_t wpa_dbus_dict_open_read(DBusMessageIter *iter, 157234285Sdim DBusMessageIter *iter_dict, 158234285Sdim DBusError *error); 159234285Sdim 160234285Sdimdbus_bool_t wpa_dbus_dict_get_entry(DBusMessageIter *iter_dict, 161234285Sdim struct wpa_dbus_dict_entry *entry); 162234285Sdim 163234285Sdimdbus_bool_t wpa_dbus_dict_has_dict_entry(DBusMessageIter *iter_dict); 164234285Sdim 165234285Sdimvoid wpa_dbus_dict_entry_clear(struct wpa_dbus_dict_entry *entry); 166234285Sdim 167234285Sdim#endif /* DBUS_DICT_HELPERS_H */ 168234285Sdim