dbus_new_helpers.h revision 1f69aa52ea2e0a73ac502565df8c666ee49cab6a
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPA Supplicant / dbus-based control interface 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2006, Dan Williams <dcbw@redhat.com> and Red Hat, Inc. 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2009, Witold Sowa <witold.sowa@gmail.com> 58d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 68d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This program is free software; you can redistribute it and/or modify 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * it under the terms of the GNU General Public License version 2 as 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * published by the Free Software Foundation. 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * license. 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * See README and COPYING for more details. 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPA_DBUS_CTRL_H 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_CTRL_H 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <dbus/dbus.h> 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef DBusMessage * (* WPADBusMethodHandler)(DBusMessage *message, 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *user_data); 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef void (* WPADBusArgumentFreeFunction)(void *handler_arg); 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 251f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidttypedef dbus_bool_t (* WPADBusPropertyAccessor)(DBusMessageIter *iter, 261f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt DBusError *error, 271f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt void *user_data); 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_object_desc { 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DBusConnection *connection; 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *path; 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* list of methods, properties and signals registered with object */ 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpa_dbus_method_desc *methods; 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpa_dbus_signal_desc *signals; 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpa_dbus_property_desc *properties; 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property changed flags */ 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *prop_changed_flags; 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* argument for method handlers and properties 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * getter and setter functions */ 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *user_data; 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* function used to free above argument */ 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPADBusArgumentFreeFunction user_data_free_func; 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum dbus_arg_direction { ARG_IN, ARG_OUT }; 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_argument { 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *name; 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *type; 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum dbus_arg_direction dir; 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define END_ARGS { NULL, NULL, ARG_IN } 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_dbus_method_desc - DBus method description 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_method_desc { 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* method name */ 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_method; 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* method interface */ 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_interface; 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* method handling function */ 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPADBusMethodHandler method_handler; 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* array of arguments */ 691f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt struct wpa_dbus_argument args[4]; 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_dbus_signal_desc - DBus signal description 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_signal_desc { 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* signal name */ 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_signal; 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* signal interface */ 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_interface; 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* array of arguments */ 811f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt struct wpa_dbus_argument args[4]; 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_dbus_property_desc - DBus property description 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_property_desc { 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property name */ 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_property; 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property interface */ 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_interface; 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property type signature in DBus type notation */ 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *type; 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property getter function */ 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPADBusPropertyAccessor getter; 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property setter function */ 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPADBusPropertyAccessor setter; 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPAS_DBUS_OBJECT_PATH_MAX 150 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPAS_DBUS_INTERFACE_MAX 150 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPAS_DBUS_METHOD_SIGNAL_PROP_MAX 50 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPAS_DBUS_AUTH_MODE_MAX 64 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_INTROSPECTION_INTERFACE "org.freedesktop.DBus.Introspectable" 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_INTROSPECTION_METHOD "Introspect" 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties" 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_PROPERTIES_GET "Get" 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_PROPERTIES_SET "Set" 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_PROPERTIES_GETALL "GetAll" 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid free_dbus_object_desc(struct wpa_dbus_object_desc *obj_dsc); 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_dbus_ctrl_iface_init(struct wpas_dbus_priv *iface, char *dbus_path, 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *dbus_service, 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_dbus_object_desc *obj_desc); 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_dbus_register_object_per_iface( 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpas_dbus_priv *ctrl_iface, 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *path, const char *ifname, 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_dbus_object_desc *obj_desc); 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_dbus_unregister_object_per_iface( 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpas_dbus_priv *ctrl_iface, 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *path); 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1281f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtdbus_bool_t wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface, 1291f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const char *path, 1301f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const char *interface, 1311f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt DBusMessageIter *iter); 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_dbus_flush_all_changed_properties(DBusConnection *con); 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_dbus_flush_object_changed_properties(DBusConnection *con, 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *path); 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface, 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *path, const char *interface, 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *property); 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtDBusMessage * wpa_dbus_introspect(DBusMessage *message, 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_dbus_object_desc *obj_dsc); 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 14675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenchar *wpas_dbus_new_decompose_object_path(const char *path, 14775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen int p2p_persistent_group, 14875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen char **network, 14975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen char **bssid); 15075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen 1511f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry ShmidtDBusMessage *wpas_dbus_reply_new_from_error(DBusMessage *message, 1521f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt DBusError *error, 1531f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const char *fallback_name, 1541f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const char *fallback_string); 1551f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPA_DBUS_CTRL_H */ 157