hostap/wpa_supplicant/dbus/dbus_new_helpers.h
Jouni Malinen 054dc3136f D-Bus: Clean up wpas_dbus_new_decompose_object_path()
None of the new D-Bus interface cases use the bssid_part in
decompose_object_path (while the old interface ones do). As such, this
is dead code and can be removed. In addition, the P2P addition here was
pretty ugly extension. Replace these with a cleaner way of passing the
separating string (e.g., "Networks") from the caller and returning the
requested item.

In addition, there is no need to allocate the returned item separately,
so use a single allocation and a pointer to that allocated memory. This
will make it easier for callers to have to free only a single
allocation. This is also fixing a memory leak in P2P invitation
persistent group case where the caller had missed the need to free the
returned values.

Signed-off-by: Jouni Malinen <j@w1.fi>
2015-01-02 22:50:26 +02:00

149 lines
4.1 KiB
C

/*
* WPA Supplicant / dbus-based control interface
* Copyright (c) 2006, Dan Williams <dcbw@redhat.com> and Red Hat, Inc.
* Copyright (c) 2009, Witold Sowa <witold.sowa@gmail.com>
*
* This software may be distributed under the terms of the BSD license.
* See README for more details.
*/
#ifndef WPA_DBUS_CTRL_H
#define WPA_DBUS_CTRL_H
#include <dbus/dbus.h>
typedef DBusMessage * (* WPADBusMethodHandler)(DBusMessage *message,
void *user_data);
typedef void (* WPADBusArgumentFreeFunction)(void *handler_arg);
typedef dbus_bool_t (* WPADBusPropertyAccessor)(DBusMessageIter *iter,
DBusError *error,
void *user_data);
struct wpa_dbus_object_desc {
DBusConnection *connection;
char *path;
/* list of methods, properties and signals registered with object */
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 */
void *user_data;
/* function used to free above argument */
WPADBusArgumentFreeFunction user_data_free_func;
};
enum dbus_arg_direction { ARG_IN, ARG_OUT };
struct wpa_dbus_argument {
char *name;
char *type;
enum dbus_arg_direction dir;
};
#define END_ARGS { NULL, NULL, ARG_IN }
/**
* 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[4];
};
/**
* 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[4];
};
/**
* struct wpa_dbus_property_desc - DBus property description
*/
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;
};
#define WPAS_DBUS_OBJECT_PATH_MAX 150
#define WPAS_DBUS_INTERFACE_MAX 150
#define WPAS_DBUS_METHOD_SIGNAL_PROP_MAX 50
#define WPAS_DBUS_AUTH_MODE_MAX 64
#define WPA_DBUS_INTROSPECTION_INTERFACE "org.freedesktop.DBus.Introspectable"
#define WPA_DBUS_INTROSPECTION_METHOD "Introspect"
#define WPA_DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"
#define WPA_DBUS_PROPERTIES_GET "Get"
#define WPA_DBUS_PROPERTIES_SET "Set"
#define WPA_DBUS_PROPERTIES_GETALL "GetAll"
void free_dbus_object_desc(struct wpa_dbus_object_desc *obj_dsc);
int wpa_dbus_ctrl_iface_init(struct wpas_dbus_priv *iface, char *dbus_path,
char *dbus_service,
struct wpa_dbus_object_desc *obj_desc);
int wpa_dbus_register_object_per_iface(
struct wpas_dbus_priv *ctrl_iface,
const char *path, const char *ifname,
struct wpa_dbus_object_desc *obj_desc);
int wpa_dbus_unregister_object_per_iface(
struct wpas_dbus_priv *ctrl_iface,
const char *path);
dbus_bool_t wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface,
const char *path,
const char *interface,
DBusMessageIter *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);
char * wpas_dbus_new_decompose_object_path(const char *path, const char *sep,
char **item);
DBusMessage *wpas_dbus_reply_new_from_error(DBusMessage *message,
DBusError *error,
const char *fallback_name,
const char *fallback_string);
#endif /* WPA_DBUS_CTRL_H */