1 /* 2 * WPA Supplicant / dbus-based control interface 3 * Copyright (c) 2006, Dan Williams <dcbw (at) redhat.com> and Red Hat, Inc. 4 * Copyright (c) 2009, Witold Sowa <witold.sowa (at) gmail.com> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * Alternatively, this software may be distributed under the terms of BSD 11 * license. 12 * 13 * See README and COPYING for more details. 14 */ 15 16 #ifndef WPA_DBUS_CTRL_H 17 #define WPA_DBUS_CTRL_H 18 19 #include <dbus/dbus.h> 20 21 typedef DBusMessage * (* WPADBusMethodHandler)(DBusMessage *message, 22 void *user_data); 23 typedef void (* WPADBusArgumentFreeFunction)(void *handler_arg); 24 25 typedef dbus_bool_t (* WPADBusPropertyAccessor)(DBusMessageIter *iter, 26 DBusError *error, 27 void *user_data); 28 29 struct wpa_dbus_object_desc { 30 DBusConnection *connection; 31 char *path; 32 33 /* list of methods, properties and signals registered with object */ 34 const struct wpa_dbus_method_desc *methods; 35 const struct wpa_dbus_signal_desc *signals; 36 const struct wpa_dbus_property_desc *properties; 37 38 /* property changed flags */ 39 u8 *prop_changed_flags; 40 41 /* argument for method handlers and properties 42 * getter and setter functions */ 43 void *user_data; 44 /* function used to free above argument */ 45 WPADBusArgumentFreeFunction user_data_free_func; 46 }; 47 48 enum dbus_arg_direction { ARG_IN, ARG_OUT }; 49 50 struct wpa_dbus_argument { 51 char *name; 52 char *type; 53 enum dbus_arg_direction dir; 54 }; 55 56 #define END_ARGS { NULL, NULL, ARG_IN } 57 58 /** 59 * struct wpa_dbus_method_desc - DBus method description 60 */ 61 struct wpa_dbus_method_desc { 62 /* method name */ 63 const char *dbus_method; 64 /* method interface */ 65 const char *dbus_interface; 66 /* method handling function */ 67 WPADBusMethodHandler method_handler; 68 /* array of arguments */ 69 struct wpa_dbus_argument args[4]; 70 }; 71 72 /** 73 * struct wpa_dbus_signal_desc - DBus signal description 74 */ 75 struct wpa_dbus_signal_desc { 76 /* signal name */ 77 const char *dbus_signal; 78 /* signal interface */ 79 const char *dbus_interface; 80 /* array of arguments */ 81 struct wpa_dbus_argument args[4]; 82 }; 83 84 /** 85 * struct wpa_dbus_property_desc - DBus property description 86 */ 87 struct wpa_dbus_property_desc { 88 /* property name */ 89 const char *dbus_property; 90 /* property interface */ 91 const char *dbus_interface; 92 /* property type signature in DBus type notation */ 93 const char *type; 94 /* property getter function */ 95 WPADBusPropertyAccessor getter; 96 /* property setter function */ 97 WPADBusPropertyAccessor setter; 98 }; 99 100 101 #define WPAS_DBUS_OBJECT_PATH_MAX 150 102 #define WPAS_DBUS_INTERFACE_MAX 150 103 #define WPAS_DBUS_METHOD_SIGNAL_PROP_MAX 50 104 #define WPAS_DBUS_AUTH_MODE_MAX 64 105 106 #define WPA_DBUS_INTROSPECTION_INTERFACE "org.freedesktop.DBus.Introspectable" 107 #define WPA_DBUS_INTROSPECTION_METHOD "Introspect" 108 #define WPA_DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties" 109 #define WPA_DBUS_PROPERTIES_GET "Get" 110 #define WPA_DBUS_PROPERTIES_SET "Set" 111 #define WPA_DBUS_PROPERTIES_GETALL "GetAll" 112 113 void free_dbus_object_desc(struct wpa_dbus_object_desc *obj_dsc); 114 115 int wpa_dbus_ctrl_iface_init(struct wpas_dbus_priv *iface, char *dbus_path, 116 char *dbus_service, 117 struct wpa_dbus_object_desc *obj_desc); 118 119 int wpa_dbus_register_object_per_iface( 120 struct wpas_dbus_priv *ctrl_iface, 121 const char *path, const char *ifname, 122 struct wpa_dbus_object_desc *obj_desc); 123 124 int wpa_dbus_unregister_object_per_iface( 125 struct wpas_dbus_priv *ctrl_iface, 126 const char *path); 127 128 dbus_bool_t wpa_dbus_get_object_properties(struct wpas_dbus_priv *iface, 129 const char *path, 130 const char *interface, 131 DBusMessageIter *iter); 132 133 134 void wpa_dbus_flush_all_changed_properties(DBusConnection *con); 135 136 void wpa_dbus_flush_object_changed_properties(DBusConnection *con, 137 const char *path); 138 139 void wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface, 140 const char *path, const char *interface, 141 const char *property); 142 143 DBusMessage * wpa_dbus_introspect(DBusMessage *message, 144 struct wpa_dbus_object_desc *obj_dsc); 145 146 char *wpas_dbus_new_decompose_object_path(const char *path, 147 int p2p_persistent_group, 148 char **network, 149 char **bssid); 150 151 DBusMessage *wpas_dbus_reply_new_from_error(DBusMessage *message, 152 DBusError *error, 153 const char *fallback_name, 154 const char *fallback_string); 155 156 #endif /* WPA_DBUS_CTRL_H */ 157