typedef void (* WPADBusArgumentFreeFunction)(void *handler_arg);
typedef DBusMessage * (* WPADBusPropertyAccessor)(DBusMessage *message,
- void *user_data);
+ const void *user_data);
struct wpa_dbus_object_desc {
DBusConnection *connection;
+ char *path;
/* list of methods, properties and signals registered with object */
- struct wpa_dbus_method_desc *methods;
- struct wpa_dbus_signal_desc *signals;
- struct wpa_dbus_property_desc *properties;
+ const struct wpa_dbus_method_desc *methods;
+ const struct wpa_dbus_signal_desc *signals;
+ const struct wpa_dbus_property_desc *properties;
+
+ /* property changed flags */
+ u8 *prop_changed_flags;
/* argument for method handlers and properties
* getter and setter functions */
#define END_ARGS { NULL, NULL, ARG_IN }
-#ifdef CONFIG_CTRL_IFACE_DBUS_NEW
+/**
+ * struct wpa_dbus_method_desc - DBus method description
+ */
+struct wpa_dbus_method_desc {
+ /* method name */
+ const char *dbus_method;
+ /* method interface */
+ const char *dbus_interface;
+ /* method handling function */
+ WPADBusMethodHandler method_handler;
+ /* array of arguments */
+ struct wpa_dbus_argument args[3];
+};
-#ifndef SIGPOLL
-#ifdef SIGIO
-/*
- * If we do not have SIGPOLL, try to use SIGIO instead. This is needed for
- * FreeBSD.
+/**
+ * struct wpa_dbus_signal_desc - DBus signal description
+ */
+struct wpa_dbus_signal_desc {
+ /* signal name */
+ const char *dbus_signal;
+ /* signal interface */
+ const char *dbus_interface;
+ /* array of arguments */
+ struct wpa_dbus_argument args[3];
+};
+
+/**
+ * struct wpa_dbus_property_desc - DBus property description
*/
-#define SIGPOLL SIGIO
-#endif
-#endif
+struct wpa_dbus_property_desc {
+ /* property name */
+ const char *dbus_property;
+ /* property interface */
+ const char *dbus_interface;
+ /* property type signature in DBus type notation */
+ const char *type;
+ /* property getter function */
+ WPADBusPropertyAccessor getter;
+ /* property setter function */
+ WPADBusPropertyAccessor setter;
+ /* property access permissions */
+ enum dbus_prop_access access;
+};
+
#define WPAS_DBUS_OBJECT_PATH_MAX 150
#define WPAS_DBUS_INTERFACE_MAX 150
struct wpas_dbus_priv *ctrl_iface,
const char *path);
-int wpa_dbus_method_register(struct wpa_dbus_object_desc *obj_dsc,
- const char *dbus_interface,
- const char *dbus_method,
- WPADBusMethodHandler method_handler,
- const struct wpa_dbus_argument args[]);
-
-int wpa_dbus_signal_register(struct wpa_dbus_object_desc *obj_dsc,
- const char *dbus_interface,
- const char *dbus_signal,
- const struct wpa_dbus_argument args[]);
-
-int wpa_dbus_property_register(
- struct wpa_dbus_object_desc *obj_dsc,
- const char *dbus_interface, const char *dbus_property,
- const char *type,
- WPADBusPropertyAccessor getter,
- WPADBusPropertyAccessor setter,
- enum dbus_prop_access _access);
-
-void wpa_dbus_signal_property_changed(struct wpas_dbus_priv *iface,
- WPADBusPropertyAccessor property_getter,
- void *getter_arg,
- const char *path,
- const char *interface_name,
- const char *property_name);
-
-
-#else /* CONFIG_CTRL_IFACE_DBUS_NEW */
-
-static inline void wpa_dbus_signal_property_changed(
- struct wpas_dbus_priv *iface,
- WPADBusPropertyAccessor property_getter, void *getter_arg,
- const char *path, const char *interface_name,
- const char *property_name)
-{
-}
-
-#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
+void wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface,
+ const char *path, const char *interface,
+ DBusMessageIter *dict_iter);
+
+
+void wpa_dbus_flush_all_changed_properties(DBusConnection *con);
+
+void wpa_dbus_flush_object_changed_properties(DBusConnection *con,
+ const char *path);
+
+void wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface,
+ const char *path, const char *interface,
+ const char *property);
+
+DBusMessage * wpa_dbus_introspect(DBusMessage *message,
+ struct wpa_dbus_object_desc *obj_dsc);
#endif /* WPA_DBUS_CTRL_H */