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 19337817Scystruct wpa_dbus_property_desc; 20337817Scytypedef dbus_bool_t (*WPADBusPropertyAccessor)( 21337817Scy const struct wpa_dbus_property_desc *property_desc, 22337817Scy DBusMessageIter *iter, DBusError *error, void *user_data); 23337817Scy#define DECLARE_ACCESSOR(f) \ 24337817Scydbus_bool_t f(const struct wpa_dbus_property_desc *property_desc, \ 25337817Scy DBusMessageIter *iter, DBusError *error, void *user_data) 26214501Srpaulo 27214501Srpaulostruct wpa_dbus_object_desc { 28214501Srpaulo DBusConnection *connection; 29214501Srpaulo char *path; 30214501Srpaulo 31214501Srpaulo /* list of methods, properties and signals registered with object */ 32214501Srpaulo const struct wpa_dbus_method_desc *methods; 33214501Srpaulo const struct wpa_dbus_signal_desc *signals; 34214501Srpaulo const struct wpa_dbus_property_desc *properties; 35214501Srpaulo 36214501Srpaulo /* property changed flags */ 37214501Srpaulo u8 *prop_changed_flags; 38214501Srpaulo 39214501Srpaulo /* argument for method handlers and properties 40214501Srpaulo * getter and setter functions */ 41214501Srpaulo void *user_data; 42214501Srpaulo /* function used to free above argument */ 43214501Srpaulo WPADBusArgumentFreeFunction user_data_free_func; 44214501Srpaulo}; 45214501Srpaulo 46214501Srpauloenum dbus_arg_direction { ARG_IN, ARG_OUT }; 47214501Srpaulo 48214501Srpaulostruct wpa_dbus_argument { 49214501Srpaulo char *name; 50214501Srpaulo char *type; 51214501Srpaulo enum dbus_arg_direction dir; 52214501Srpaulo}; 53214501Srpaulo 54214501Srpaulo#define END_ARGS { NULL, NULL, ARG_IN } 55214501Srpaulo 56214501Srpaulo/** 57214501Srpaulo * struct wpa_dbus_method_desc - DBus method description 58214501Srpaulo */ 59214501Srpaulostruct wpa_dbus_method_desc { 60214501Srpaulo /* method name */ 61214501Srpaulo const char *dbus_method; 62214501Srpaulo /* method interface */ 63214501Srpaulo const char *dbus_interface; 64214501Srpaulo /* method handling function */ 65214501Srpaulo WPADBusMethodHandler method_handler; 66214501Srpaulo /* array of arguments */ 67252190Srpaulo struct wpa_dbus_argument args[4]; 68214501Srpaulo}; 69214501Srpaulo 70214501Srpaulo/** 71214501Srpaulo * struct wpa_dbus_signal_desc - DBus signal description 72214501Srpaulo */ 73214501Srpaulostruct wpa_dbus_signal_desc { 74214501Srpaulo /* signal name */ 75214501Srpaulo const char *dbus_signal; 76214501Srpaulo /* signal interface */ 77214501Srpaulo const char *dbus_interface; 78214501Srpaulo /* array of arguments */ 79252190Srpaulo struct wpa_dbus_argument args[4]; 80214501Srpaulo}; 81214501Srpaulo 82214501Srpaulo/** 83214501Srpaulo * struct wpa_dbus_property_desc - DBus property description 84214501Srpaulo */ 85214501Srpaulostruct wpa_dbus_property_desc { 86214501Srpaulo /* property name */ 87214501Srpaulo const char *dbus_property; 88214501Srpaulo /* property interface */ 89214501Srpaulo const char *dbus_interface; 90214501Srpaulo /* property type signature in DBus type notation */ 91214501Srpaulo const char *type; 92214501Srpaulo /* property getter function */ 93214501Srpaulo WPADBusPropertyAccessor getter; 94214501Srpaulo /* property setter function */ 95214501Srpaulo WPADBusPropertyAccessor setter; 96337817Scy /* other data */ 97337817Scy const char *data; 98214501Srpaulo}; 99214501Srpaulo 100214501Srpaulo 101214501Srpaulo#define WPAS_DBUS_OBJECT_PATH_MAX 150 102214501Srpaulo#define WPAS_DBUS_INTERFACE_MAX 150 103214501Srpaulo#define WPAS_DBUS_METHOD_SIGNAL_PROP_MAX 50 104252190Srpaulo#define WPAS_DBUS_AUTH_MODE_MAX 64 105214501Srpaulo 106214501Srpaulo#define WPA_DBUS_INTROSPECTION_INTERFACE "org.freedesktop.DBus.Introspectable" 107214501Srpaulo#define WPA_DBUS_INTROSPECTION_METHOD "Introspect" 108214501Srpaulo#define WPA_DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties" 109214501Srpaulo#define WPA_DBUS_PROPERTIES_GET "Get" 110214501Srpaulo#define WPA_DBUS_PROPERTIES_SET "Set" 111214501Srpaulo#define WPA_DBUS_PROPERTIES_GETALL "GetAll" 112214501Srpaulo 113214501Srpaulovoid free_dbus_object_desc(struct wpa_dbus_object_desc *obj_dsc); 114214501Srpaulo 115214501Srpauloint wpa_dbus_ctrl_iface_init(struct wpas_dbus_priv *iface, char *dbus_path, 116214501Srpaulo char *dbus_service, 117214501Srpaulo struct wpa_dbus_object_desc *obj_desc); 118214501Srpaulo 119214501Srpauloint wpa_dbus_register_object_per_iface( 120214501Srpaulo struct wpas_dbus_priv *ctrl_iface, 121214501Srpaulo const char *path, const char *ifname, 122214501Srpaulo struct wpa_dbus_object_desc *obj_desc); 123214501Srpaulo 124214501Srpauloint wpa_dbus_unregister_object_per_iface( 125214501Srpaulo struct wpas_dbus_priv *ctrl_iface, 126214501Srpaulo const char *path); 127214501Srpaulo 128252190Srpaulodbus_bool_t wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface, 129252190Srpaulo const char *path, 130252190Srpaulo const char *interface, 131252190Srpaulo DBusMessageIter *iter); 132214501Srpaulo 133214501Srpaulo 134214501Srpaulovoid wpa_dbus_flush_all_changed_properties(DBusConnection *con); 135214501Srpaulo 136214501Srpaulovoid wpa_dbus_flush_object_changed_properties(DBusConnection *con, 137214501Srpaulo const char *path); 138214501Srpaulo 139214501Srpaulovoid wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface, 140214501Srpaulo const char *path, const char *interface, 141214501Srpaulo const char *property); 142214501Srpaulo 143214501SrpauloDBusMessage * wpa_dbus_introspect(DBusMessage *message, 144214501Srpaulo struct wpa_dbus_object_desc *obj_dsc); 145214501Srpaulo 146281806Srpaulochar * wpas_dbus_new_decompose_object_path(const char *path, const char *sep, 147281806Srpaulo char **item); 148252190Srpaulo 149252190SrpauloDBusMessage *wpas_dbus_reply_new_from_error(DBusMessage *message, 150252190Srpaulo DBusError *error, 151252190Srpaulo const char *fallback_name, 152252190Srpaulo const char *fallback_string); 153252190Srpaulo 154214501Srpaulo#endif /* WPA_DBUS_CTRL_H */ 155