dbus_new_helpers.h revision 214501
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 DBusMessage * (* WPADBusPropertyAccessor)(DBusMessage *message,
26						  const void *user_data);
27
28struct wpa_dbus_object_desc {
29	DBusConnection *connection;
30	char *path;
31
32	/* list of methods, properties and signals registered with object */
33	const struct wpa_dbus_method_desc *methods;
34	const struct wpa_dbus_signal_desc *signals;
35	const struct wpa_dbus_property_desc *properties;
36
37	/* property changed flags */
38	u8 *prop_changed_flags;
39
40	/* argument for method handlers and properties
41	 * getter and setter functions */
42	void *user_data;
43	/* function used to free above argument */
44	WPADBusArgumentFreeFunction user_data_free_func;
45};
46
47enum dbus_prop_access { R, W, RW };
48
49enum dbus_arg_direction { ARG_IN, ARG_OUT };
50
51struct wpa_dbus_argument {
52	char *name;
53	char *type;
54	enum dbus_arg_direction dir;
55};
56
57#define END_ARGS { NULL, NULL, ARG_IN }
58
59/**
60 * struct wpa_dbus_method_desc - DBus method description
61 */
62struct wpa_dbus_method_desc {
63	/* method name */
64	const char *dbus_method;
65	/* method interface */
66	const char *dbus_interface;
67	/* method handling function */
68	WPADBusMethodHandler method_handler;
69	/* array of arguments */
70	struct wpa_dbus_argument args[3];
71};
72
73/**
74 * struct wpa_dbus_signal_desc - DBus signal description
75 */
76struct wpa_dbus_signal_desc {
77	/* signal name */
78	const char *dbus_signal;
79	/* signal interface */
80	const char *dbus_interface;
81	/* array of arguments */
82	struct wpa_dbus_argument args[3];
83};
84
85/**
86 * struct wpa_dbus_property_desc - DBus property description
87 */
88struct wpa_dbus_property_desc {
89	/* property name */
90	const char *dbus_property;
91	/* property interface */
92	const char *dbus_interface;
93	/* property type signature in DBus type notation */
94	const char *type;
95	/* property getter function */
96	WPADBusPropertyAccessor getter;
97	/* property setter function */
98	WPADBusPropertyAccessor setter;
99	/* property access permissions */
100	enum dbus_prop_access access;
101};
102
103
104#define WPAS_DBUS_OBJECT_PATH_MAX 150
105#define WPAS_DBUS_INTERFACE_MAX 150
106#define WPAS_DBUS_METHOD_SIGNAL_PROP_MAX 50
107
108#define WPA_DBUS_INTROSPECTION_INTERFACE "org.freedesktop.DBus.Introspectable"
109#define WPA_DBUS_INTROSPECTION_METHOD "Introspect"
110#define WPA_DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"
111#define WPA_DBUS_PROPERTIES_GET "Get"
112#define WPA_DBUS_PROPERTIES_SET "Set"
113#define WPA_DBUS_PROPERTIES_GETALL "GetAll"
114
115void free_dbus_object_desc(struct wpa_dbus_object_desc *obj_dsc);
116
117int wpa_dbus_ctrl_iface_init(struct wpas_dbus_priv *iface, char *dbus_path,
118			     char *dbus_service,
119			     struct wpa_dbus_object_desc *obj_desc);
120
121int wpa_dbus_register_object_per_iface(
122	struct wpas_dbus_priv *ctrl_iface,
123	const char *path, const char *ifname,
124	struct wpa_dbus_object_desc *obj_desc);
125
126int wpa_dbus_unregister_object_per_iface(
127	struct wpas_dbus_priv *ctrl_iface,
128	const char *path);
129
130void wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface,
131				    const char *path, const char *interface,
132				    DBusMessageIter *dict_iter);
133
134
135void wpa_dbus_flush_all_changed_properties(DBusConnection *con);
136
137void wpa_dbus_flush_object_changed_properties(DBusConnection *con,
138					      const char *path);
139
140void wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface,
141				    const char *path, const char *interface,
142				    const char *property);
143
144DBusMessage * wpa_dbus_introspect(DBusMessage *message,
145				  struct wpa_dbus_object_desc *obj_dsc);
146
147#endif /* WPA_DBUS_CTRL_H */
148