dbus_dict_helpers.h revision 214501
1214501Srpaulo/*
2214501Srpaulo * WPA Supplicant / dbus-based control interface
3214501Srpaulo * Copyright (c) 2006, Dan Williams <dcbw@redhat.com> and Red Hat, Inc.
4214501Srpaulo *
5214501Srpaulo * This program is free software; you can redistribute it and/or modify
6214501Srpaulo * it under the terms of the GNU General Public License version 2 as
7214501Srpaulo * published by the Free Software Foundation.
8214501Srpaulo *
9214501Srpaulo * Alternatively, this software may be distributed under the terms of BSD
10214501Srpaulo * license.
11214501Srpaulo *
12214501Srpaulo * See README and COPYING for more details.
13214501Srpaulo */
14214501Srpaulo
15214501Srpaulo#ifndef DBUS_DICT_HELPERS_H
16214501Srpaulo#define DBUS_DICT_HELPERS_H
17214501Srpaulo
18214501Srpaulo/*
19214501Srpaulo * Adding a dict to a DBusMessage
20214501Srpaulo */
21214501Srpaulo
22214501Srpaulodbus_bool_t wpa_dbus_dict_open_write(DBusMessageIter *iter,
23214501Srpaulo				     DBusMessageIter *iter_dict);
24214501Srpaulo
25214501Srpaulodbus_bool_t wpa_dbus_dict_close_write(DBusMessageIter *iter,
26214501Srpaulo				      DBusMessageIter *iter_dict);
27214501Srpaulo
28214501Srpauloconst char * wpa_dbus_type_as_string(const int type);
29214501Srpaulo
30214501Srpaulodbus_bool_t wpa_dbus_dict_append_string(DBusMessageIter *iter_dict,
31214501Srpaulo					const char *key, const char *value);
32214501Srpaulo
33214501Srpaulodbus_bool_t wpa_dbus_dict_append_byte(DBusMessageIter *iter_dict,
34214501Srpaulo				      const char *key, const char value);
35214501Srpaulo
36214501Srpaulodbus_bool_t wpa_dbus_dict_append_bool(DBusMessageIter *iter_dict,
37214501Srpaulo				      const char *key,
38214501Srpaulo				      const dbus_bool_t value);
39214501Srpaulo
40214501Srpaulodbus_bool_t wpa_dbus_dict_append_int16(DBusMessageIter *iter_dict,
41214501Srpaulo				       const char *key,
42214501Srpaulo				       const dbus_int16_t value);
43214501Srpaulo
44214501Srpaulodbus_bool_t wpa_dbus_dict_append_uint16(DBusMessageIter *iter_dict,
45214501Srpaulo					const char *key,
46214501Srpaulo					const dbus_uint16_t value);
47214501Srpaulo
48214501Srpaulodbus_bool_t wpa_dbus_dict_append_int32(DBusMessageIter *iter_dict,
49214501Srpaulo				       const char *key,
50214501Srpaulo				       const dbus_int32_t value);
51214501Srpaulo
52214501Srpaulodbus_bool_t wpa_dbus_dict_append_uint32(DBusMessageIter *iter_dict,
53214501Srpaulo					const char *key,
54214501Srpaulo					const dbus_uint32_t value);
55214501Srpaulo
56214501Srpaulodbus_bool_t wpa_dbus_dict_append_int64(DBusMessageIter *iter_dict,
57214501Srpaulo				       const char *key,
58214501Srpaulo				       const dbus_int64_t value);
59214501Srpaulo
60214501Srpaulodbus_bool_t wpa_dbus_dict_append_uint64(DBusMessageIter *iter_dict,
61214501Srpaulo					const char *key,
62214501Srpaulo					const dbus_uint64_t value);
63214501Srpaulo
64214501Srpaulodbus_bool_t wpa_dbus_dict_append_double(DBusMessageIter *iter_dict,
65214501Srpaulo					const char *key,
66214501Srpaulo					const double value);
67214501Srpaulo
68214501Srpaulodbus_bool_t wpa_dbus_dict_append_object_path(DBusMessageIter *iter_dict,
69214501Srpaulo					     const char *key,
70214501Srpaulo					     const char *value);
71214501Srpaulo
72214501Srpaulodbus_bool_t wpa_dbus_dict_append_byte_array(DBusMessageIter *iter_dict,
73214501Srpaulo					    const char *key,
74214501Srpaulo					    const char *value,
75214501Srpaulo					    const dbus_uint32_t value_len);
76214501Srpaulo
77214501Srpaulo/* Manual construction and addition of string array elements */
78214501Srpaulodbus_bool_t wpa_dbus_dict_begin_string_array(DBusMessageIter *iter_dict,
79214501Srpaulo                                             const char *key,
80214501Srpaulo                                             DBusMessageIter *iter_dict_entry,
81214501Srpaulo                                             DBusMessageIter *iter_dict_val,
82214501Srpaulo                                             DBusMessageIter *iter_array);
83214501Srpaulo
84214501Srpaulodbus_bool_t wpa_dbus_dict_string_array_add_element(DBusMessageIter *iter_array,
85214501Srpaulo                                             const char *elem);
86214501Srpaulo
87214501Srpaulodbus_bool_t wpa_dbus_dict_end_string_array(DBusMessageIter *iter_dict,
88214501Srpaulo                                           DBusMessageIter *iter_dict_entry,
89214501Srpaulo                                           DBusMessageIter *iter_dict_val,
90214501Srpaulo                                           DBusMessageIter *iter_array);
91214501Srpaulo
92214501Srpaulo/* Convenience function to add a whole string list */
93214501Srpaulodbus_bool_t wpa_dbus_dict_append_string_array(DBusMessageIter *iter_dict,
94214501Srpaulo					      const char *key,
95214501Srpaulo					      const char **items,
96214501Srpaulo					      const dbus_uint32_t num_items);
97214501Srpaulo
98214501Srpaulo/*
99214501Srpaulo * Reading a dict from a DBusMessage
100214501Srpaulo */
101214501Srpaulo
102214501Srpaulostruct wpa_dbus_dict_entry {
103214501Srpaulo	int type;         /** the dbus type of the dict entry's value */
104214501Srpaulo	int array_type;   /** the dbus type of the array elements if the dict
105214501Srpaulo			      entry value contains an array */
106214501Srpaulo	const char *key;  /** key of the dict entry */
107214501Srpaulo
108214501Srpaulo	/** Possible values of the property */
109214501Srpaulo	union {
110214501Srpaulo		char *str_value;
111214501Srpaulo		char byte_value;
112214501Srpaulo		dbus_bool_t bool_value;
113214501Srpaulo		dbus_int16_t int16_value;
114214501Srpaulo		dbus_uint16_t uint16_value;
115214501Srpaulo		dbus_int32_t int32_value;
116214501Srpaulo		dbus_uint32_t uint32_value;
117214501Srpaulo		dbus_int64_t int64_value;
118214501Srpaulo		dbus_uint64_t uint64_value;
119214501Srpaulo		double double_value;
120214501Srpaulo		char *bytearray_value;
121214501Srpaulo		char **strarray_value;
122214501Srpaulo	};
123214501Srpaulo	dbus_uint32_t array_len; /** length of the array if the dict entry's
124214501Srpaulo				     value contains an array */
125214501Srpaulo};
126214501Srpaulo
127214501Srpaulodbus_bool_t wpa_dbus_dict_open_read(DBusMessageIter *iter,
128214501Srpaulo				    DBusMessageIter *iter_dict);
129214501Srpaulo
130214501Srpaulodbus_bool_t wpa_dbus_dict_get_entry(DBusMessageIter *iter_dict,
131214501Srpaulo				    struct wpa_dbus_dict_entry *entry);
132214501Srpaulo
133214501Srpaulodbus_bool_t wpa_dbus_dict_has_dict_entry(DBusMessageIter *iter_dict);
134214501Srpaulo
135214501Srpaulovoid wpa_dbus_dict_entry_clear(struct wpa_dbus_dict_entry *entry);
136214501Srpaulo
137214501Srpaulo#endif  /* DBUS_DICT_HELPERS_H */
138