• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "wpabuf.h"
19 
20 /*
21  * Adding a dict to a DBusMessage
22  */
23 
24 dbus_bool_t wpa_dbus_dict_open_write(DBusMessageIter *iter,
25 				     DBusMessageIter *iter_dict);
26 
27 dbus_bool_t wpa_dbus_dict_close_write(DBusMessageIter *iter,
28 				      DBusMessageIter *iter_dict);
29 
30 const char * wpa_dbus_type_as_string(const int type);
31 
32 dbus_bool_t wpa_dbus_dict_append_string(DBusMessageIter *iter_dict,
33 					const char *key, const char *value);
34 
35 dbus_bool_t wpa_dbus_dict_append_byte(DBusMessageIter *iter_dict,
36 				      const char *key, const char value);
37 
38 dbus_bool_t wpa_dbus_dict_append_bool(DBusMessageIter *iter_dict,
39 				      const char *key,
40 				      const dbus_bool_t value);
41 
42 dbus_bool_t wpa_dbus_dict_append_int16(DBusMessageIter *iter_dict,
43 				       const char *key,
44 				       const dbus_int16_t value);
45 
46 dbus_bool_t wpa_dbus_dict_append_uint16(DBusMessageIter *iter_dict,
47 					const char *key,
48 					const dbus_uint16_t value);
49 
50 dbus_bool_t wpa_dbus_dict_append_int32(DBusMessageIter *iter_dict,
51 				       const char *key,
52 				       const dbus_int32_t value);
53 
54 dbus_bool_t wpa_dbus_dict_append_uint32(DBusMessageIter *iter_dict,
55 					const char *key,
56 					const dbus_uint32_t value);
57 
58 dbus_bool_t wpa_dbus_dict_append_int64(DBusMessageIter *iter_dict,
59 				       const char *key,
60 				       const dbus_int64_t value);
61 
62 dbus_bool_t wpa_dbus_dict_append_uint64(DBusMessageIter *iter_dict,
63 					const char *key,
64 					const dbus_uint64_t value);
65 
66 dbus_bool_t wpa_dbus_dict_append_double(DBusMessageIter *iter_dict,
67 					const char *key,
68 					const double value);
69 
70 dbus_bool_t wpa_dbus_dict_append_object_path(DBusMessageIter *iter_dict,
71 					     const char *key,
72 					     const char *value);
73 
74 dbus_bool_t wpa_dbus_dict_append_byte_array(DBusMessageIter *iter_dict,
75 					    const char *key,
76 					    const char *value,
77 					    const dbus_uint32_t value_len);
78 
79 /* Manual construction and addition of array elements */
80 dbus_bool_t wpa_dbus_dict_begin_array(DBusMessageIter *iter_dict,
81                                       const char *key, const char *type,
82                                       DBusMessageIter *iter_dict_entry,
83                                       DBusMessageIter *iter_dict_val,
84                                       DBusMessageIter *iter_array);
85 
86 dbus_bool_t wpa_dbus_dict_begin_string_array(DBusMessageIter *iter_dict,
87                                              const char *key,
88                                              DBusMessageIter *iter_dict_entry,
89                                              DBusMessageIter *iter_dict_val,
90                                              DBusMessageIter *iter_array);
91 
92 dbus_bool_t wpa_dbus_dict_string_array_add_element(DBusMessageIter *iter_array,
93                                              const char *elem);
94 
95 dbus_bool_t wpa_dbus_dict_bin_array_add_element(DBusMessageIter *iter_array,
96 						const u8 *value,
97 						size_t value_len);
98 
99 dbus_bool_t wpa_dbus_dict_end_array(DBusMessageIter *iter_dict,
100                                     DBusMessageIter *iter_dict_entry,
101                                     DBusMessageIter *iter_dict_val,
102                                     DBusMessageIter *iter_array);
103 
104 static inline dbus_bool_t
wpa_dbus_dict_end_string_array(DBusMessageIter * iter_dict,DBusMessageIter * iter_dict_entry,DBusMessageIter * iter_dict_val,DBusMessageIter * iter_array)105 wpa_dbus_dict_end_string_array(DBusMessageIter *iter_dict,
106 			       DBusMessageIter *iter_dict_entry,
107 			       DBusMessageIter *iter_dict_val,
108 			       DBusMessageIter *iter_array)
109 {
110 	return wpa_dbus_dict_end_array(iter_dict, iter_dict_entry,
111 				       iter_dict_val, iter_array);
112 }
113 
114 /* Convenience function to add a whole string list */
115 dbus_bool_t wpa_dbus_dict_append_string_array(DBusMessageIter *iter_dict,
116 					      const char *key,
117 					      const char **items,
118 					      const dbus_uint32_t num_items);
119 
120 dbus_bool_t wpa_dbus_dict_append_wpabuf_array(DBusMessageIter *iter_dict,
121 					      const char *key,
122 					      const struct wpabuf **items,
123 					      const dbus_uint32_t num_items);
124 
125 /*
126  * Reading a dict from a DBusMessage
127  */
128 
129 #define WPAS_DBUS_TYPE_BINARRAY (DBUS_NUMBER_OF_TYPES + 100)
130 
131 struct wpa_dbus_dict_entry {
132 	int type;         /** the dbus type of the dict entry's value */
133 	int array_type;   /** the dbus type of the array elements if the dict
134 			      entry value contains an array, or the special
135 			      WPAS_DBUS_TYPE_BINARRAY */
136 	const char *key;  /** key of the dict entry */
137 
138 	/** Possible values of the property */
139 	union {
140 		char *str_value;
141 		char byte_value;
142 		dbus_bool_t bool_value;
143 		dbus_int16_t int16_value;
144 		dbus_uint16_t uint16_value;
145 		dbus_int32_t int32_value;
146 		dbus_uint32_t uint32_value;
147 		dbus_int64_t int64_value;
148 		dbus_uint64_t uint64_value;
149 		double double_value;
150 		char *bytearray_value;
151 		char **strarray_value;
152 		struct wpabuf **binarray_value;
153 	};
154 	dbus_uint32_t array_len; /** length of the array if the dict entry's
155 				     value contains an array */
156 };
157 
158 dbus_bool_t wpa_dbus_dict_open_read(DBusMessageIter *iter,
159 				    DBusMessageIter *iter_dict,
160 				    DBusError *error);
161 
162 dbus_bool_t wpa_dbus_dict_get_entry(DBusMessageIter *iter_dict,
163 				    struct wpa_dbus_dict_entry *entry);
164 
165 dbus_bool_t wpa_dbus_dict_has_dict_entry(DBusMessageIter *iter_dict);
166 
167 void wpa_dbus_dict_entry_clear(struct wpa_dbus_dict_entry *entry);
168 
169 #endif  /* DBUS_DICT_HELPERS_H */
170