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 * 604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * This software may be distributed under the terms of the BSD license. 704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * See README for more details. 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPA_DBUS_CTRL_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_CTRL_H 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <dbus/dbus.h> 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef DBusMessage * (* WPADBusMethodHandler)(DBusMessage *message, 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *user_data); 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef void (* WPADBusArgumentFreeFunction)(void *handler_arg); 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 191f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidttypedef dbus_bool_t (* WPADBusPropertyAccessor)(DBusMessageIter *iter, 201f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt DBusError *error, 211f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt void *user_data); 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_object_desc { 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt DBusConnection *connection; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *path; 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* list of methods, properties and signals registered with object */ 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpa_dbus_method_desc *methods; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpa_dbus_signal_desc *signals; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpa_dbus_property_desc *properties; 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property changed flags */ 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *prop_changed_flags; 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* argument for method handlers and properties 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * getter and setter functions */ 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *user_data; 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* function used to free above argument */ 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPADBusArgumentFreeFunction user_data_free_func; 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum dbus_arg_direction { ARG_IN, ARG_OUT }; 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_argument { 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *name; 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *type; 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum dbus_arg_direction dir; 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define END_ARGS { NULL, NULL, ARG_IN } 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_dbus_method_desc - DBus method description 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_method_desc { 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* method name */ 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_method; 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* method interface */ 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_interface; 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* method handling function */ 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPADBusMethodHandler method_handler; 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* array of arguments */ 631f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt struct wpa_dbus_argument args[4]; 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_dbus_signal_desc - DBus signal description 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_signal_desc { 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* signal name */ 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_signal; 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* signal interface */ 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_interface; 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* array of arguments */ 751f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt struct wpa_dbus_argument args[4]; 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_dbus_property_desc - DBus property description 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_dbus_property_desc { 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property name */ 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_property; 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property interface */ 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dbus_interface; 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property type signature in DBus type notation */ 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *type; 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property getter function */ 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPADBusPropertyAccessor getter; 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* property setter function */ 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPADBusPropertyAccessor setter; 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPAS_DBUS_OBJECT_PATH_MAX 150 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPAS_DBUS_INTERFACE_MAX 150 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPAS_DBUS_METHOD_SIGNAL_PROP_MAX 50 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPAS_DBUS_AUTH_MODE_MAX 64 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_INTROSPECTION_INTERFACE "org.freedesktop.DBus.Introspectable" 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_INTROSPECTION_METHOD "Introspect" 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties" 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_PROPERTIES_GET "Get" 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_PROPERTIES_SET "Set" 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DBUS_PROPERTIES_GETALL "GetAll" 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid free_dbus_object_desc(struct wpa_dbus_object_desc *obj_dsc); 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_dbus_ctrl_iface_init(struct wpas_dbus_priv *iface, char *dbus_path, 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *dbus_service, 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_dbus_object_desc *obj_desc); 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_dbus_register_object_per_iface( 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpas_dbus_priv *ctrl_iface, 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *path, const char *ifname, 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_dbus_object_desc *obj_desc); 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_dbus_unregister_object_per_iface( 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpas_dbus_priv *ctrl_iface, 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *path); 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1221f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtdbus_bool_t wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface, 1231f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const char *path, 1241f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const char *interface, 1251f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt DBusMessageIter *iter); 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_dbus_flush_all_changed_properties(DBusConnection *con); 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_dbus_flush_object_changed_properties(DBusConnection *con, 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *path); 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface, 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *path, const char *interface, 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *property); 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtDBusMessage * wpa_dbus_introspect(DBusMessage *message, 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_dbus_object_desc *obj_dsc); 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 14075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenchar *wpas_dbus_new_decompose_object_path(const char *path, 14175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen int p2p_persistent_group, 14275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen char **network, 14375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen char **bssid); 14475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen 1451f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry ShmidtDBusMessage *wpas_dbus_reply_new_from_error(DBusMessage *message, 1461f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt DBusError *error, 1471f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const char *fallback_name, 1481f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const char *fallback_string); 1491f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPA_DBUS_CTRL_H */ 151