notify.c 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. /*
  2. * wpa_supplicant - Event notifications
  3. * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License version 2 as
  7. * published by the Free Software Foundation.
  8. *
  9. * Alternatively, this software may be distributed under the terms of BSD
  10. * license.
  11. *
  12. * See README and COPYING for more details.
  13. */
  14. #include "utils/includes.h"
  15. #include "utils/common.h"
  16. #include "common/wpa_ctrl.h"
  17. #include "config.h"
  18. #include "wpa_supplicant_i.h"
  19. #include "wps_supplicant.h"
  20. #include "dbus/dbus.h"
  21. #include "dbus/dbus_new.h"
  22. #include "notify.h"
  23. int wpas_notify_supplicant_initialized(struct wpa_global *global)
  24. {
  25. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  26. if (global->params.dbus_ctrl_interface) {
  27. if (cbs) {
  28. global->dbus_new_ctrl_iface =
  29. cbs->dbus_ctrl_init(global);
  30. if (global->dbus_new_ctrl_iface == NULL)
  31. return -1;
  32. }
  33. global->dbus_ctrl_iface =
  34. wpa_supplicant_dbus_ctrl_iface_init(global);
  35. if (global->dbus_ctrl_iface == NULL)
  36. return -1;
  37. }
  38. return 0;
  39. }
  40. void wpas_notify_supplicant_deinitialized(struct wpa_global *global)
  41. {
  42. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  43. if (cbs && global->dbus_new_ctrl_iface)
  44. cbs->dbus_ctrl_deinit(global->dbus_new_ctrl_iface);
  45. if (global->dbus_ctrl_iface)
  46. wpa_supplicant_dbus_ctrl_iface_deinit(global->dbus_ctrl_iface);
  47. }
  48. int wpas_notify_iface_added(struct wpa_supplicant *wpa_s)
  49. {
  50. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  51. if (wpas_dbus_register_iface(wpa_s))
  52. return -1;
  53. if (cbs && cbs->register_interface(wpa_s))
  54. return -1;
  55. return 0;
  56. }
  57. void wpas_notify_iface_removed(struct wpa_supplicant *wpa_s)
  58. {
  59. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  60. /* unregister interface in old DBus ctrl iface */
  61. wpas_dbus_unregister_iface(wpa_s);
  62. /* unregister interface in new DBus ctrl iface */
  63. if (cbs)
  64. cbs->unregister_interface(wpa_s);
  65. }
  66. void wpas_notify_state_changed(struct wpa_supplicant *wpa_s,
  67. enum wpa_states new_state,
  68. enum wpa_states old_state)
  69. {
  70. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  71. /* notify the old DBus API */
  72. wpa_supplicant_dbus_notify_state_change(wpa_s, new_state,
  73. old_state);
  74. /* notify the new DBus API */
  75. if (cbs)
  76. cbs->signal_state_changed(wpa_s, new_state, old_state);
  77. }
  78. void wpas_notify_network_changed(struct wpa_supplicant *wpa_s)
  79. {
  80. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  81. if (cbs)
  82. cbs->signal_prop_changed(wpa_s,
  83. WPAS_DBUS_PROP_CURRENT_NETWORK);
  84. }
  85. void wpas_notify_ap_scan_changed(struct wpa_supplicant *wpa_s)
  86. {
  87. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  88. if (cbs)
  89. cbs->signal_prop_changed(wpa_s, WPAS_DBUS_PROP_AP_SCAN);
  90. }
  91. void wpas_notify_bssid_changed(struct wpa_supplicant *wpa_s)
  92. {
  93. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  94. if (cbs)
  95. cbs->signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_BSS);
  96. }
  97. void wpas_notify_network_enabled_changed(struct wpa_supplicant *wpa_s,
  98. struct wpa_ssid *ssid)
  99. {
  100. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  101. if (cbs)
  102. cbs->signal_network_enabled_changed(wpa_s, ssid);
  103. }
  104. void wpas_notify_network_selected(struct wpa_supplicant *wpa_s,
  105. struct wpa_ssid *ssid)
  106. {
  107. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  108. if (cbs)
  109. cbs->signal_network_selected(wpa_s, ssid->id);
  110. }
  111. void wpas_notify_scanning(struct wpa_supplicant *wpa_s)
  112. {
  113. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  114. /* notify the old DBus API */
  115. wpa_supplicant_dbus_notify_scanning(wpa_s);
  116. /* notify the new DBus API */
  117. if (cbs)
  118. cbs->signal_prop_changed(wpa_s, WPAS_DBUS_PROP_SCANNING);
  119. }
  120. void wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success)
  121. {
  122. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  123. if (cbs)
  124. cbs->signal_scan_done(wpa_s, success);
  125. }
  126. void wpas_notify_scan_results(struct wpa_supplicant *wpa_s)
  127. {
  128. /* notify the old DBus API */
  129. wpa_supplicant_dbus_notify_scan_results(wpa_s);
  130. wpas_wps_notify_scan_results(wpa_s);
  131. }
  132. void wpas_notify_wps_credential(struct wpa_supplicant *wpa_s,
  133. const struct wps_credential *cred)
  134. {
  135. #ifdef CONFIG_WPS
  136. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  137. #endif /* CONFIG_WPS */
  138. /* notify the old DBus API */
  139. wpa_supplicant_dbus_notify_wps_cred(wpa_s, cred);
  140. /* notify the new DBus API */
  141. #ifdef CONFIG_WPS
  142. if (cbs)
  143. cbs->signal_wps_credentials(wpa_s, cred);
  144. #endif /* CONFIG_WPS */
  145. }
  146. void wpas_notify_wps_event_m2d(struct wpa_supplicant *wpa_s,
  147. struct wps_event_m2d *m2d)
  148. {
  149. #ifdef CONFIG_WPS
  150. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  151. if (cbs)
  152. cbs->signal_wps_event_m2d(wpa_s, m2d);
  153. #endif /* CONFIG_WPS */
  154. }
  155. void wpas_notify_wps_event_fail(struct wpa_supplicant *wpa_s,
  156. struct wps_event_fail *fail)
  157. {
  158. #ifdef CONFIG_WPS
  159. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  160. if (cbs)
  161. cbs->signal_wps_event_fail(wpa_s, fail);
  162. #endif /* CONFIG_WPS */
  163. }
  164. void wpas_notify_wps_event_success(struct wpa_supplicant *wpa_s)
  165. {
  166. #ifdef CONFIG_WPS
  167. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  168. if (cbs)
  169. cbs->signal_wps_event_success(wpa_s);
  170. #endif /* CONFIG_WPS */
  171. }
  172. void wpas_notify_network_added(struct wpa_supplicant *wpa_s,
  173. struct wpa_ssid *ssid)
  174. {
  175. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  176. if (wpa_s->global->dbus_new_ctrl_iface && cbs)
  177. cbs->register_network(wpa_s, ssid);
  178. }
  179. void wpas_notify_network_removed(struct wpa_supplicant *wpa_s,
  180. struct wpa_ssid *ssid)
  181. {
  182. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  183. if (wpa_s->global->dbus_new_ctrl_iface && cbs)
  184. cbs->unregister_network(wpa_s, ssid->id);
  185. }
  186. void wpas_notify_bss_added(struct wpa_supplicant *wpa_s,
  187. u8 bssid[], unsigned int id)
  188. {
  189. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  190. if (cbs)
  191. cbs->register_bss(wpa_s, bssid, id);
  192. wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_ADDED "%u " MACSTR,
  193. id, MAC2STR(bssid));
  194. }
  195. void wpas_notify_bss_removed(struct wpa_supplicant *wpa_s,
  196. u8 bssid[], unsigned int id)
  197. {
  198. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  199. if (cbs)
  200. cbs->unregister_bss(wpa_s, bssid, id);
  201. wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_REMOVED "%u " MACSTR,
  202. id, MAC2STR(bssid));
  203. }
  204. void wpas_notify_blob_added(struct wpa_supplicant *wpa_s, const char *name)
  205. {
  206. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  207. if (cbs)
  208. cbs->signal_blob_added(wpa_s, name);
  209. }
  210. void wpas_notify_blob_removed(struct wpa_supplicant *wpa_s, const char *name)
  211. {
  212. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  213. if (cbs)
  214. cbs->signal_blob_removed(wpa_s, name);
  215. }
  216. void wpas_notify_debug_params_changed(struct wpa_global *global)
  217. {
  218. struct wpas_dbus_callbacks *cbs = wpas_dbus_get_callbacks();
  219. if (cbs)
  220. cbs->signal_debug_params_changed(global);
  221. }