dbus_new_helpers.h revision 1f69aa52ea2e0a73ac502565df8c666ee49cab6a
1/*
2 * WPA Supplicant / dbus-based control interface
3 * Copyright (c) 2006, Dan Williams <dcbw@redhat.com> and Red Hat, Inc.
4 * Copyright (c) 2009, Witold Sowa <witold.sowa@gmail.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * Alternatively, this software may be distributed under the terms of BSD
11 * license.
12 *
13 * See README and COPYING for more details.
14 */
15
16#ifndef WPA_DBUS_CTRL_H
17#define WPA_DBUS_CTRL_H
18
19#include <dbus/dbus.h>
20
21typedef DBusMessage * (* WPADBusMethodHandler)(DBusMessage *message,
22					       void *user_data);
23typedef void (* WPADBusArgumentFreeFunction)(void *handler_arg);
24
25typedef dbus_bool_t (* WPADBusPropertyAccessor)(DBusMessageIter *iter,
26                                                DBusError *error,
27						void *user_data);
28
29struct wpa_dbus_object_desc {
30	DBusConnection *connection;
31	char *path;
32
33	/* list of methods, properties and signals registered with object */
34	const struct wpa_dbus_method_desc *methods;
35	const struct wpa_dbus_signal_desc *signals;
36	const struct wpa_dbus_property_desc *properties;
37
38	/* property changed flags */
39	u8 *prop_changed_flags;
40
41	/* argument for method handlers and properties
42	 * getter and setter functions */
43	void *user_data;
44	/* function used to free above argument */
45	WPADBusArgumentFreeFunction user_data_free_func;
46};
47
48enum dbus_arg_direction { ARG_IN, ARG_OUT };
49
50struct wpa_dbus_argument {
51	char *name;
52	char *type;
53	enum dbus_arg_direction dir;
54};
55
56#define END_ARGS { NULL, NULL, ARG_IN }
57
58/**
59 * struct wpa_dbus_method_desc - DBus method description
60 */
61struct wpa_dbus_method_desc {
62	/* method name */
63	const char *dbus_method;
64	/* method interface */
65	const char *dbus_interface;
66	/* method handling function */
67	WPADBusMethodHandler method_handler;
68	/* array of arguments */
69	struct wpa_dbus_argument args[4];
70};
71
72/**
73 * struct wpa_dbus_signal_desc - DBus signal description
74 */
75struct wpa_dbus_signal_desc {
76	/* signal name */
77	const char *dbus_signal;
78	/* signal interface */
79	const char *dbus_interface;
80	/* array of arguments */
81	struct wpa_dbus_argument args[4];
82};
83
84/**
85 * struct wpa_dbus_property_desc - DBus property description
86 */
87struct wpa_dbus_property_desc {
88	/* property name */
89	const char *dbus_property;
90	/* property interface */
91	const char *dbus_interface;
92	/* property type signature in DBus type notation */
93	const char *type;
94	/* property getter function */
95	WPADBusPropertyAccessor getter;
96	/* property setter function */
97	WPADBusPropertyAccessor setter;
98};
99
100
101#define WPAS_DBUS_OBJECT_PATH_MAX 150
102#define WPAS_DBUS_INTERFACE_MAX 150
103#define WPAS_DBUS_METHOD_SIGNAL_PROP_MAX 50
104#define WPAS_DBUS_AUTH_MODE_MAX 64
105
106#define WPA_DBUS_INTROSPECTION_INTERFACE "org.freedesktop.DBus.Introspectable"
107#define WPA_DBUS_INTROSPECTION_METHOD "Introspect"
108#define WPA_DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"
109#define WPA_DBUS_PROPERTIES_GET "Get"
110#define WPA_DBUS_PROPERTIES_SET "Set"
111#define WPA_DBUS_PROPERTIES_GETALL "GetAll"
112
113void free_dbus_object_desc(struct wpa_dbus_object_desc *obj_dsc);
114
115int wpa_dbus_ctrl_iface_init(struct wpas_dbus_priv *iface, char *dbus_path,
116			     char *dbus_service,
117			     struct wpa_dbus_object_desc *obj_desc);
118
119int wpa_dbus_register_object_per_iface(
120	struct wpas_dbus_priv *ctrl_iface,
121	const char *path, const char *ifname,
122	struct wpa_dbus_object_desc *obj_desc);
123
124int wpa_dbus_unregister_object_per_iface(
125	struct wpas_dbus_priv *ctrl_iface,
126	const char *path);
127
128dbus_bool_t wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface,
129					   const char *path,
130					   const char *interface,
131					   DBusMessageIter *iter);
132
133
134void wpa_dbus_flush_all_changed_properties(DBusConnection *con);
135
136void wpa_dbus_flush_object_changed_properties(DBusConnection *con,
137					      const char *path);
138
139void wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface,
140				    const char *path, const char *interface,
141				    const char *property);
142
143DBusMessage * wpa_dbus_introspect(DBusMessage *message,
144				  struct wpa_dbus_object_desc *obj_dsc);
145
146char *wpas_dbus_new_decompose_object_path(const char *path,
147					   int p2p_persistent_group,
148					   char **network,
149					   char **bssid);
150
151DBusMessage *wpas_dbus_reply_new_from_error(DBusMessage *message,
152					    DBusError *error,
153					    const char *fallback_name,
154					    const char *fallback_string);
155
156#endif /* WPA_DBUS_CTRL_H */
157