dbus_new_helpers.h revision 281806
1214501Srpaulo/*
2214501Srpaulo * WPA Supplicant / dbus-based control interface
3214501Srpaulo * Copyright (c) 2006, Dan Williams <dcbw@redhat.com> and Red Hat, Inc.
4214501Srpaulo * Copyright (c) 2009, Witold Sowa <witold.sowa@gmail.com>
5214501Srpaulo *
6252190Srpaulo * This software may be distributed under the terms of the BSD license.
7252190Srpaulo * See README for more details.
8214501Srpaulo */
9214501Srpaulo
10214501Srpaulo#ifndef WPA_DBUS_CTRL_H
11214501Srpaulo#define WPA_DBUS_CTRL_H
12214501Srpaulo
13214501Srpaulo#include <dbus/dbus.h>
14214501Srpaulo
15281806Srpaulotypedef DBusMessage * (*WPADBusMethodHandler)(DBusMessage *message,
16281806Srpaulo					      void *user_data);
17281806Srpaulotypedef void (*WPADBusArgumentFreeFunction)(void *handler_arg);
18281806Srpaulo
19281806Srpaulotypedef dbus_bool_t (*WPADBusPropertyAccessor)(DBusMessageIter *iter,
20281806Srpaulo					       DBusError *error,
21214501Srpaulo					       void *user_data);
22214501Srpaulo
23214501Srpaulostruct wpa_dbus_object_desc {
24214501Srpaulo	DBusConnection *connection;
25214501Srpaulo	char *path;
26214501Srpaulo
27214501Srpaulo	/* list of methods, properties and signals registered with object */
28214501Srpaulo	const struct wpa_dbus_method_desc *methods;
29214501Srpaulo	const struct wpa_dbus_signal_desc *signals;
30214501Srpaulo	const struct wpa_dbus_property_desc *properties;
31214501Srpaulo
32214501Srpaulo	/* property changed flags */
33214501Srpaulo	u8 *prop_changed_flags;
34214501Srpaulo
35214501Srpaulo	/* argument for method handlers and properties
36214501Srpaulo	 * getter and setter functions */
37214501Srpaulo	void *user_data;
38214501Srpaulo	/* function used to free above argument */
39214501Srpaulo	WPADBusArgumentFreeFunction user_data_free_func;
40214501Srpaulo};
41214501Srpaulo
42214501Srpauloenum dbus_arg_direction { ARG_IN, ARG_OUT };
43214501Srpaulo
44214501Srpaulostruct wpa_dbus_argument {
45214501Srpaulo	char *name;
46214501Srpaulo	char *type;
47214501Srpaulo	enum dbus_arg_direction dir;
48214501Srpaulo};
49214501Srpaulo
50214501Srpaulo#define END_ARGS { NULL, NULL, ARG_IN }
51214501Srpaulo
52214501Srpaulo/**
53214501Srpaulo * struct wpa_dbus_method_desc - DBus method description
54214501Srpaulo */
55214501Srpaulostruct wpa_dbus_method_desc {
56214501Srpaulo	/* method name */
57214501Srpaulo	const char *dbus_method;
58214501Srpaulo	/* method interface */
59214501Srpaulo	const char *dbus_interface;
60214501Srpaulo	/* method handling function */
61214501Srpaulo	WPADBusMethodHandler method_handler;
62214501Srpaulo	/* array of arguments */
63252190Srpaulo	struct wpa_dbus_argument args[4];
64214501Srpaulo};
65214501Srpaulo
66214501Srpaulo/**
67214501Srpaulo * struct wpa_dbus_signal_desc - DBus signal description
68214501Srpaulo */
69214501Srpaulostruct wpa_dbus_signal_desc {
70214501Srpaulo	/* signal name */
71214501Srpaulo	const char *dbus_signal;
72214501Srpaulo	/* signal interface */
73214501Srpaulo	const char *dbus_interface;
74214501Srpaulo	/* array of arguments */
75252190Srpaulo	struct wpa_dbus_argument args[4];
76214501Srpaulo};
77214501Srpaulo
78214501Srpaulo/**
79214501Srpaulo * struct wpa_dbus_property_desc - DBus property description
80214501Srpaulo */
81214501Srpaulostruct wpa_dbus_property_desc {
82214501Srpaulo	/* property name */
83214501Srpaulo	const char *dbus_property;
84214501Srpaulo	/* property interface */
85214501Srpaulo	const char *dbus_interface;
86214501Srpaulo	/* property type signature in DBus type notation */
87214501Srpaulo	const char *type;
88214501Srpaulo	/* property getter function */
89214501Srpaulo	WPADBusPropertyAccessor getter;
90214501Srpaulo	/* property setter function */
91214501Srpaulo	WPADBusPropertyAccessor setter;
92214501Srpaulo};
93214501Srpaulo
94214501Srpaulo
95214501Srpaulo#define WPAS_DBUS_OBJECT_PATH_MAX 150
96214501Srpaulo#define WPAS_DBUS_INTERFACE_MAX 150
97214501Srpaulo#define WPAS_DBUS_METHOD_SIGNAL_PROP_MAX 50
98252190Srpaulo#define WPAS_DBUS_AUTH_MODE_MAX 64
99214501Srpaulo
100214501Srpaulo#define WPA_DBUS_INTROSPECTION_INTERFACE "org.freedesktop.DBus.Introspectable"
101214501Srpaulo#define WPA_DBUS_INTROSPECTION_METHOD "Introspect"
102214501Srpaulo#define WPA_DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"
103214501Srpaulo#define WPA_DBUS_PROPERTIES_GET "Get"
104214501Srpaulo#define WPA_DBUS_PROPERTIES_SET "Set"
105214501Srpaulo#define WPA_DBUS_PROPERTIES_GETALL "GetAll"
106214501Srpaulo
107214501Srpaulovoid free_dbus_object_desc(struct wpa_dbus_object_desc *obj_dsc);
108214501Srpaulo
109214501Srpauloint wpa_dbus_ctrl_iface_init(struct wpas_dbus_priv *iface, char *dbus_path,
110214501Srpaulo			     char *dbus_service,
111214501Srpaulo			     struct wpa_dbus_object_desc *obj_desc);
112214501Srpaulo
113214501Srpauloint wpa_dbus_register_object_per_iface(
114214501Srpaulo	struct wpas_dbus_priv *ctrl_iface,
115214501Srpaulo	const char *path, const char *ifname,
116214501Srpaulo	struct wpa_dbus_object_desc *obj_desc);
117214501Srpaulo
118214501Srpauloint wpa_dbus_unregister_object_per_iface(
119214501Srpaulo	struct wpas_dbus_priv *ctrl_iface,
120214501Srpaulo	const char *path);
121214501Srpaulo
122252190Srpaulodbus_bool_t wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface,
123252190Srpaulo					   const char *path,
124252190Srpaulo					   const char *interface,
125252190Srpaulo					   DBusMessageIter *iter);
126214501Srpaulo
127214501Srpaulo
128214501Srpaulovoid wpa_dbus_flush_all_changed_properties(DBusConnection *con);
129214501Srpaulo
130214501Srpaulovoid wpa_dbus_flush_object_changed_properties(DBusConnection *con,
131214501Srpaulo					      const char *path);
132214501Srpaulo
133214501Srpaulovoid wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface,
134214501Srpaulo				    const char *path, const char *interface,
135214501Srpaulo				    const char *property);
136214501Srpaulo
137214501SrpauloDBusMessage * wpa_dbus_introspect(DBusMessage *message,
138214501Srpaulo				  struct wpa_dbus_object_desc *obj_dsc);
139214501Srpaulo
140281806Srpaulochar * wpas_dbus_new_decompose_object_path(const char *path, const char *sep,
141281806Srpaulo					   char **item);
142252190Srpaulo
143252190SrpauloDBusMessage *wpas_dbus_reply_new_from_error(DBusMessage *message,
144252190Srpaulo					    DBusError *error,
145252190Srpaulo					    const char *fallback_name,
146252190Srpaulo					    const char *fallback_string);
147252190Srpaulo
148214501Srpaulo#endif /* WPA_DBUS_CTRL_H */
149