dbus_dict_helpers.h revision 75ecf5267604f166b85a7ee2cf0d9cb682966680
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
24dbus_bool_t wpa_dbus_dict_open_write(DBusMessageIter *iter,
25				     DBusMessageIter *iter_dict);
26
27dbus_bool_t wpa_dbus_dict_close_write(DBusMessageIter *iter,
28				      DBusMessageIter *iter_dict);
29
30const char * wpa_dbus_type_as_string(const int type);
31
32dbus_bool_t wpa_dbus_dict_append_string(DBusMessageIter *iter_dict,
33					const char *key, const char *value);
34
35dbus_bool_t wpa_dbus_dict_append_byte(DBusMessageIter *iter_dict,
36				      const char *key, const char value);
37
38dbus_bool_t wpa_dbus_dict_append_bool(DBusMessageIter *iter_dict,
39				      const char *key,
40				      const dbus_bool_t value);
41
42dbus_bool_t wpa_dbus_dict_append_int16(DBusMessageIter *iter_dict,
43				       const char *key,
44				       const dbus_int16_t value);
45
46dbus_bool_t wpa_dbus_dict_append_uint16(DBusMessageIter *iter_dict,
47					const char *key,
48					const dbus_uint16_t value);
49
50dbus_bool_t wpa_dbus_dict_append_int32(DBusMessageIter *iter_dict,
51				       const char *key,
52				       const dbus_int32_t value);
53
54dbus_bool_t wpa_dbus_dict_append_uint32(DBusMessageIter *iter_dict,
55					const char *key,
56					const dbus_uint32_t value);
57
58dbus_bool_t wpa_dbus_dict_append_int64(DBusMessageIter *iter_dict,
59				       const char *key,
60				       const dbus_int64_t value);
61
62dbus_bool_t wpa_dbus_dict_append_uint64(DBusMessageIter *iter_dict,
63					const char *key,
64					const dbus_uint64_t value);
65
66dbus_bool_t wpa_dbus_dict_append_double(DBusMessageIter *iter_dict,
67					const char *key,
68					const double value);
69
70dbus_bool_t wpa_dbus_dict_append_object_path(DBusMessageIter *iter_dict,
71					     const char *key,
72					     const char *value);
73
74dbus_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 */
80dbus_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
86dbus_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
92dbus_bool_t wpa_dbus_dict_string_array_add_element(DBusMessageIter *iter_array,
93                                             const char *elem);
94
95dbus_bool_t wpa_dbus_dict_bin_array_add_element(DBusMessageIter *iter_array,
96						const u8 *value,
97						size_t value_len);
98
99dbus_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
104static inline dbus_bool_t
105wpa_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 */
115dbus_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
120dbus_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
131struct 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
158dbus_bool_t wpa_dbus_dict_open_read(DBusMessageIter *iter,
159				    DBusMessageIter *iter_dict);
160
161dbus_bool_t wpa_dbus_dict_get_entry(DBusMessageIter *iter_dict,
162				    struct wpa_dbus_dict_entry *entry);
163
164dbus_bool_t wpa_dbus_dict_has_dict_entry(DBusMessageIter *iter_dict);
165
166void wpa_dbus_dict_entry_clear(struct wpa_dbus_dict_entry *entry);
167
168#endif  /* DBUS_DICT_HELPERS_H */
169