]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
dbus: Add getter for WPS properties
authorSven Neumann <s.neumann@raumfeld.com>
Sat, 3 Nov 2012 16:37:20 +0000 (18:37 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 3 Nov 2012 16:38:51 +0000 (18:38 +0200)
Add "WPS" property to the DBus interface that allows to
identify the active WPS method of a BSS.

Signed-hostap: Sven Neumann <s.neumann@raumfeld.com>

wpa_supplicant/dbus/dbus_new.c
wpa_supplicant/dbus/dbus_new.h
wpa_supplicant/dbus/dbus_new_handlers.c
wpa_supplicant/dbus/dbus_new_handlers.h
wpa_supplicant/notify.c

index 9e00e228226299289b87e05867bafac6f2c72812..8bc6618ab6115a354e5fb5a4d52aae695e760966 100644 (file)
@@ -2236,6 +2236,10 @@ static const struct wpa_dbus_property_desc wpas_dbus_bss_properties[] = {
          wpas_dbus_getter_bss_rsn,
          NULL
        },
+       { "WPS", WPAS_DBUS_NEW_IFACE_BSS, "a{sv}",
+         wpas_dbus_getter_bss_wps,
+         NULL
+       },
        { "IEs", WPAS_DBUS_NEW_IFACE_BSS, "ay",
          wpas_dbus_getter_bss_ies,
          NULL
index 44cde42dafee0609b861023e9ee48c46ab056a1d..363a7e5d33c15a2cae8a5428b2a71617521f77d2 100644 (file)
@@ -39,6 +39,7 @@ enum wpas_dbus_bss_prop {
        WPAS_DBUS_BSS_PROP_RATES,
        WPAS_DBUS_BSS_PROP_WPA,
        WPAS_DBUS_BSS_PROP_RSN,
+       WPAS_DBUS_BSS_PROP_WPS,
        WPAS_DBUS_BSS_PROP_IES,
 };
 
index 00378beabb12ed3a6755f069309b159c10aac002..062024fbbe6d5feb3601f6a91c99ac4f4b232ae1 100644 (file)
@@ -3403,6 +3403,63 @@ dbus_bool_t wpas_dbus_getter_bss_rsn(DBusMessageIter *iter, DBusError *error,
 }
 
 
+/**
+ * wpas_dbus_getter_bss_wps - Return the WPS options of a BSS
+ * @iter: Pointer to incoming dbus message iter
+ * @error: Location to store error on failure
+ * @user_data: Function specific data
+ * Returns: TRUE on success, FALSE on failure
+ *
+ * Getter for "WPS" property.
+ */
+dbus_bool_t wpas_dbus_getter_bss_wps(DBusMessageIter *iter, DBusError *error,
+                                    void *user_data)
+{
+       struct bss_handler_args *args = user_data;
+       struct wpa_bss *res;
+#ifdef CONFIG_WPS
+       struct wpabuf *wps_ie;
+#endif /* CONFIG_WPS */
+       DBusMessageIter iter_dict, variant_iter;
+       const char *type = "";
+
+       res = get_bss_helper(args, error, __func__);
+       if (!res)
+               return FALSE;
+
+       if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT,
+                                             "a{sv}", &variant_iter))
+               goto nomem;
+
+       if (!wpa_dbus_dict_open_write(&variant_iter, &iter_dict))
+               goto nomem;
+
+#ifdef CONFIG_WPS
+       wps_ie = wpa_bss_get_vendor_ie_multi(res, WPS_IE_VENDOR_TYPE);
+       if (wps_ie) {
+               if (wps_is_selected_pbc_registrar(wps_ie))
+                       type = "pbc";
+               else if (wps_is_selected_pin_registrar(wps_ie))
+                       type = "pin";
+       }
+#endif /* CONFIG_WPS */
+
+       if (!wpa_dbus_dict_append_string(&iter_dict, "Type", type))
+               goto nomem;
+
+       if (!wpa_dbus_dict_close_write(&variant_iter, &iter_dict))
+               goto nomem;
+       if (!dbus_message_iter_close_container(iter, &variant_iter))
+               goto nomem;
+
+       return TRUE;
+
+nomem:
+       dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, "no memory");
+       return FALSE;
+}
+
+
 /**
  * wpas_dbus_getter_bss_ies - Return all IEs of a BSS
  * @iter: Pointer to incoming dbus message iter
index ea0944ed0a66498e2a19c171d0d2af40cce9ae2d..aa565508f8e95aff2208656ce15b89c1dabf8d80 100644 (file)
@@ -242,6 +242,9 @@ dbus_bool_t wpas_dbus_getter_bss_wpa(DBusMessageIter *iter, DBusError *error,
 dbus_bool_t wpas_dbus_getter_bss_rsn(DBusMessageIter *iter, DBusError *error,
                                     void *user_data);
 
+dbus_bool_t wpas_dbus_getter_bss_wps(DBusMessageIter *iter, DBusError *error,
+                                    void *user_data);
+
 dbus_bool_t wpas_dbus_getter_bss_ies(DBusMessageIter *iter, DBusError *error,
                                     void *user_data);
 
index 0ede0d0fba1cab8c9aaab880c36d3f210c73d45f..9251f62e27eae50c889b41a85ad1378b118bff4b 100644 (file)
@@ -323,6 +323,9 @@ void wpas_notify_bss_rsnie_changed(struct wpa_supplicant *wpa_s,
 void wpas_notify_bss_wps_changed(struct wpa_supplicant *wpa_s,
                                 unsigned int id)
 {
+#ifdef CONFIG_WPS
+       wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPS, id);
+#endif /* CONFIG_WPS */
 }