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