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 
22 dbus_bool_t wpa_dbus_dict_open_write(DBusMessageIter *iter,
23 				     DBusMessageIter *iter_dict);
24 
25 dbus_bool_t wpa_dbus_dict_close_write(DBusMessageIter *iter,
26 				      DBusMessageIter *iter_dict);
27 
28 const char * wpa_dbus_type_as_string(const int type);
29 
30 dbus_bool_t wpa_dbus_dict_append_string(DBusMessageIter *iter_dict,
31 					const char *key, const char *value);
32 
33 dbus_bool_t wpa_dbus_dict_append_byte(DBusMessageIter *iter_dict,
34 				      const char *key, const char value);
35 
36 dbus_bool_t wpa_dbus_dict_append_bool(DBusMessageIter *iter_dict,
37 				      const char *key,
38 				      const dbus_bool_t value);
39 
40 dbus_bool_t wpa_dbus_dict_append_int16(DBusMessageIter *iter_dict,
41 				       const char *key,
42 				       const dbus_int16_t value);
43 
44 dbus_bool_t wpa_dbus_dict_append_uint16(DBusMessageIter *iter_dict,
45 					const char *key,
46 					const dbus_uint16_t value);
47 
48 dbus_bool_t wpa_dbus_dict_append_int32(DBusMessageIter *iter_dict,
49 				       const char *key,
50 				       const dbus_int32_t value);
51 
52 dbus_bool_t wpa_dbus_dict_append_uint32(DBusMessageIter *iter_dict,
53 					const char *key,
54 					const dbus_uint32_t value);
55 
56 dbus_bool_t wpa_dbus_dict_append_int64(DBusMessageIter *iter_dict,
57 				       const char *key,
58 				       const dbus_int64_t value);
59 
60 dbus_bool_t wpa_dbus_dict_append_uint64(DBusMessageIter *iter_dict,
61 					const char *key,
62 					const dbus_uint64_t value);
63 
64 dbus_bool_t wpa_dbus_dict_append_double(DBusMessageIter *iter_dict,
65 					const char *key,
66 					const double value);
67 
68 dbus_bool_t wpa_dbus_dict_append_object_path(DBusMessageIter *iter_dict,
69 					     const char *key,
70 					     const char *value);
71 
72 dbus_bool_t wpa_dbus_dict_append_byte_array(DBusMessageIter *iter_dict,
73 					    const char *key,
74 					    const char *value,
75 					    const dbus_uint32_t value_len);
76 
77 /* Manual construction and addition of string array elements */
78 dbus_bool_t wpa_dbus_dict_begin_string_array(DBusMessageIter *iter_dict,
79                                              const char *key,
80                                              DBusMessageIter *iter_dict_entry,
81                                              DBusMessageIter *iter_dict_val,
82                                              DBusMessageIter *iter_array);
83 
84 dbus_bool_t wpa_dbus_dict_string_array_add_element(DBusMessageIter *iter_array,
85                                              const char *elem);
86 
87 dbus_bool_t wpa_dbus_dict_end_string_array(DBusMessageIter *iter_dict,
88                                            DBusMessageIter *iter_dict_entry,
89                                            DBusMessageIter *iter_dict_val,
90                                            DBusMessageIter *iter_array);
91 
92 /* Convenience function to add a whole string list */
93 dbus_bool_t wpa_dbus_dict_append_string_array(DBusMessageIter *iter_dict,
94 					      const char *key,
95 					      const char **items,
96 					      const dbus_uint32_t num_items);
97 
98 /*
99  * Reading a dict from a DBusMessage
100  */
101 
102 struct wpa_dbus_dict_entry {
103 	int type;         /** the dbus type of the dict entry's value */
104 	int array_type;   /** the dbus type of the array elements if the dict
105 			      entry value contains an array */
106 	const char *key;  /** key of the dict entry */
107 
108 	/** Possible values of the property */
109 	union {
110 		char *str_value;
111 		char byte_value;
112 		dbus_bool_t bool_value;
113 		dbus_int16_t int16_value;
114 		dbus_uint16_t uint16_value;
115 		dbus_int32_t int32_value;
116 		dbus_uint32_t uint32_value;
117 		dbus_int64_t int64_value;
118 		dbus_uint64_t uint64_value;
119 		double double_value;
120 		char *bytearray_value;
121 		char **strarray_value;
122 	};
123 	dbus_uint32_t array_len; /** length of the array if the dict entry's
124 				     value contains an array */
125 };
126 
127 dbus_bool_t wpa_dbus_dict_open_read(DBusMessageIter *iter,
128 				    DBusMessageIter *iter_dict);
129 
130 dbus_bool_t wpa_dbus_dict_get_entry(DBusMessageIter *iter_dict,
131 				    struct wpa_dbus_dict_entry *entry);
132 
133 dbus_bool_t wpa_dbus_dict_has_dict_entry(DBusMessageIter *iter_dict);
134 
135 void wpa_dbus_dict_entry_clear(struct wpa_dbus_dict_entry *entry);
136 
137 #endif  /* DBUS_DICT_HELPERS_H */
138