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