1214501Srpaulo/* 2214501Srpaulo * WPA Supplicant / dbus-based control interface 3214501Srpaulo * Copyright (c) 2006, Dan Williams <dcbw@redhat.com> and Red Hat, Inc. 4214501Srpaulo * 5252190Srpaulo * This software may be distributed under the terms of the BSD license. 6252190Srpaulo * See README for more details. 7214501Srpaulo */ 8214501Srpaulo 9214501Srpaulo#ifndef DBUS_DICT_HELPERS_H 10214501Srpaulo#define DBUS_DICT_HELPERS_H 11214501Srpaulo 12252190Srpaulo#include "wpabuf.h" 13252190Srpaulo 14214501Srpaulo/* 15214501Srpaulo * Adding a dict to a DBusMessage 16214501Srpaulo */ 17214501Srpaulo 18214501Srpaulodbus_bool_t wpa_dbus_dict_open_write(DBusMessageIter *iter, 19214501Srpaulo DBusMessageIter *iter_dict); 20214501Srpaulo 21214501Srpaulodbus_bool_t wpa_dbus_dict_close_write(DBusMessageIter *iter, 22214501Srpaulo DBusMessageIter *iter_dict); 23214501Srpaulo 24214501Srpauloconst char * wpa_dbus_type_as_string(const int type); 25214501Srpaulo 26214501Srpaulodbus_bool_t wpa_dbus_dict_append_string(DBusMessageIter *iter_dict, 27214501Srpaulo const char *key, const char *value); 28214501Srpaulo 29214501Srpaulodbus_bool_t wpa_dbus_dict_append_byte(DBusMessageIter *iter_dict, 30214501Srpaulo const char *key, const char value); 31214501Srpaulo 32214501Srpaulodbus_bool_t wpa_dbus_dict_append_bool(DBusMessageIter *iter_dict, 33214501Srpaulo const char *key, 34214501Srpaulo const dbus_bool_t value); 35214501Srpaulo 36214501Srpaulodbus_bool_t wpa_dbus_dict_append_int16(DBusMessageIter *iter_dict, 37214501Srpaulo const char *key, 38214501Srpaulo const dbus_int16_t value); 39214501Srpaulo 40214501Srpaulodbus_bool_t wpa_dbus_dict_append_uint16(DBusMessageIter *iter_dict, 41214501Srpaulo const char *key, 42214501Srpaulo const dbus_uint16_t value); 43214501Srpaulo 44214501Srpaulodbus_bool_t wpa_dbus_dict_append_int32(DBusMessageIter *iter_dict, 45214501Srpaulo const char *key, 46214501Srpaulo const dbus_int32_t value); 47214501Srpaulo 48214501Srpaulodbus_bool_t wpa_dbus_dict_append_uint32(DBusMessageIter *iter_dict, 49214501Srpaulo const char *key, 50214501Srpaulo const dbus_uint32_t value); 51214501Srpaulo 52214501Srpaulodbus_bool_t wpa_dbus_dict_append_int64(DBusMessageIter *iter_dict, 53214501Srpaulo const char *key, 54214501Srpaulo const dbus_int64_t value); 55214501Srpaulo 56214501Srpaulodbus_bool_t wpa_dbus_dict_append_uint64(DBusMessageIter *iter_dict, 57214501Srpaulo const char *key, 58214501Srpaulo const dbus_uint64_t value); 59214501Srpaulo 60214501Srpaulodbus_bool_t wpa_dbus_dict_append_double(DBusMessageIter *iter_dict, 61214501Srpaulo const char *key, 62214501Srpaulo const double value); 63214501Srpaulo 64214501Srpaulodbus_bool_t wpa_dbus_dict_append_object_path(DBusMessageIter *iter_dict, 65214501Srpaulo const char *key, 66214501Srpaulo const char *value); 67214501Srpaulo 68214501Srpaulodbus_bool_t wpa_dbus_dict_append_byte_array(DBusMessageIter *iter_dict, 69214501Srpaulo const char *key, 70214501Srpaulo const char *value, 71214501Srpaulo const dbus_uint32_t value_len); 72214501Srpaulo 73252190Srpaulo/* Manual construction and addition of array elements */ 74252190Srpaulodbus_bool_t wpa_dbus_dict_begin_array(DBusMessageIter *iter_dict, 75281806Srpaulo const char *key, const char *type, 76281806Srpaulo DBusMessageIter *iter_dict_entry, 77281806Srpaulo DBusMessageIter *iter_dict_val, 78281806Srpaulo DBusMessageIter *iter_array); 79252190Srpaulo 80214501Srpaulodbus_bool_t wpa_dbus_dict_begin_string_array(DBusMessageIter *iter_dict, 81281806Srpaulo const char *key, 82281806Srpaulo DBusMessageIter *iter_dict_entry, 83281806Srpaulo DBusMessageIter *iter_dict_val, 84281806Srpaulo DBusMessageIter *iter_array); 85214501Srpaulo 86214501Srpaulodbus_bool_t wpa_dbus_dict_string_array_add_element(DBusMessageIter *iter_array, 87281806Srpaulo const char *elem); 88214501Srpaulo 89252190Srpaulodbus_bool_t wpa_dbus_dict_bin_array_add_element(DBusMessageIter *iter_array, 90252190Srpaulo const u8 *value, 91252190Srpaulo size_t value_len); 92214501Srpaulo 93252190Srpaulodbus_bool_t wpa_dbus_dict_end_array(DBusMessageIter *iter_dict, 94281806Srpaulo DBusMessageIter *iter_dict_entry, 95281806Srpaulo DBusMessageIter *iter_dict_val, 96281806Srpaulo DBusMessageIter *iter_array); 97252190Srpaulo 98252190Srpaulostatic inline dbus_bool_t 99252190Srpaulowpa_dbus_dict_end_string_array(DBusMessageIter *iter_dict, 100252190Srpaulo DBusMessageIter *iter_dict_entry, 101252190Srpaulo DBusMessageIter *iter_dict_val, 102252190Srpaulo DBusMessageIter *iter_array) 103252190Srpaulo{ 104252190Srpaulo return wpa_dbus_dict_end_array(iter_dict, iter_dict_entry, 105252190Srpaulo iter_dict_val, iter_array); 106252190Srpaulo} 107252190Srpaulo 108214501Srpaulo/* Convenience function to add a whole string list */ 109214501Srpaulodbus_bool_t wpa_dbus_dict_append_string_array(DBusMessageIter *iter_dict, 110214501Srpaulo const char *key, 111214501Srpaulo const char **items, 112214501Srpaulo const dbus_uint32_t num_items); 113214501Srpaulo 114252190Srpaulodbus_bool_t wpa_dbus_dict_append_wpabuf_array(DBusMessageIter *iter_dict, 115252190Srpaulo const char *key, 116252190Srpaulo const struct wpabuf **items, 117252190Srpaulo const dbus_uint32_t num_items); 118252190Srpaulo 119214501Srpaulo/* 120214501Srpaulo * Reading a dict from a DBusMessage 121214501Srpaulo */ 122214501Srpaulo 123281806Srpaulo/* 124281806Srpaulo * Used only in struct wpa_dbus_dict_entry::array_type internally to identify 125281806Srpaulo * special binary array case. 126281806Srpaulo */ 127281806Srpaulo#define WPAS_DBUS_TYPE_BINARRAY ((int) '@') 128252190Srpaulo 129214501Srpaulostruct wpa_dbus_dict_entry { 130214501Srpaulo int type; /** the dbus type of the dict entry's value */ 131214501Srpaulo int array_type; /** the dbus type of the array elements if the dict 132252190Srpaulo entry value contains an array, or the special 133252190Srpaulo WPAS_DBUS_TYPE_BINARRAY */ 134214501Srpaulo const char *key; /** key of the dict entry */ 135214501Srpaulo 136214501Srpaulo /** Possible values of the property */ 137214501Srpaulo union { 138214501Srpaulo char *str_value; 139214501Srpaulo char byte_value; 140214501Srpaulo dbus_bool_t bool_value; 141214501Srpaulo dbus_int16_t int16_value; 142214501Srpaulo dbus_uint16_t uint16_value; 143214501Srpaulo dbus_int32_t int32_value; 144214501Srpaulo dbus_uint32_t uint32_value; 145214501Srpaulo dbus_int64_t int64_value; 146214501Srpaulo dbus_uint64_t uint64_value; 147214501Srpaulo double double_value; 148214501Srpaulo char *bytearray_value; 149214501Srpaulo char **strarray_value; 150252190Srpaulo struct wpabuf **binarray_value; 151214501Srpaulo }; 152214501Srpaulo dbus_uint32_t array_len; /** length of the array if the dict entry's 153214501Srpaulo value contains an array */ 154214501Srpaulo}; 155214501Srpaulo 156214501Srpaulodbus_bool_t wpa_dbus_dict_open_read(DBusMessageIter *iter, 157252190Srpaulo DBusMessageIter *iter_dict, 158252190Srpaulo DBusError *error); 159214501Srpaulo 160214501Srpaulodbus_bool_t wpa_dbus_dict_get_entry(DBusMessageIter *iter_dict, 161214501Srpaulo struct wpa_dbus_dict_entry *entry); 162214501Srpaulo 163214501Srpaulodbus_bool_t wpa_dbus_dict_has_dict_entry(DBusMessageIter *iter_dict); 164214501Srpaulo 165214501Srpaulovoid wpa_dbus_dict_entry_clear(struct wpa_dbus_dict_entry *entry); 166214501Srpaulo 167214501Srpaulo#endif /* DBUS_DICT_HELPERS_H */ 168