]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Propagate scan failures over D-Bus
authorquiche@chromium.org <quiche@chromium.org>
Wed, 9 Apr 2014 22:10:29 +0000 (15:10 -0700)
committerJouni Malinen <j@w1.fi>
Sun, 13 Apr 2014 20:43:04 +0000 (23:43 +0300)
If we receive a scan request via D-Bus and wpa_supplicant_scan_trigger
fails, return the failure to the caller over D-Bus.

Signed-hostap: mukesh agrawal <quiche@chromium.org>

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

index 7aee9236e79f6d67a05a45c1fd5ef5e4e7f9a0a7..1aec9bea8be3be2dea5bfe5325893e88a37e8922 100644 (file)
@@ -83,7 +83,7 @@ enum wpas_dbus_bss_prop {
 #define        WPAS_DBUS_NEW_IFACE_P2P_GROUPMEMBER \
        WPAS_DBUS_NEW_INTERFACE ".GroupMember"
 
-/* Errors */
+/* Top-level Errors */
 #define WPAS_DBUS_ERROR_UNKNOWN_ERROR \
        WPAS_DBUS_NEW_INTERFACE ".UnknownError"
 #define WPAS_DBUS_ERROR_INVALID_ARGS \
@@ -120,6 +120,9 @@ enum wpas_dbus_bss_prop {
 #define WPAS_DBUS_ERROR_SUBSCRIPTION_EPERM \
        WPAS_DBUS_NEW_INTERFACE ".SubscriptionNotYou"
 
+/* Interface-level errors */
+#define WPAS_DBUS_ERROR_IFACE_SCAN_ERROR \
+       WPAS_DBUS_NEW_IFACE_INTERFACE ".ScanError"
 
 void wpas_dbus_subscribe_noc(struct wpas_dbus_priv *priv);
 void wpas_dbus_unsubscribe_noc(struct wpas_dbus_priv *priv);
index ffa59b2a90869e2eb4347916248efcca7bb92e1c..33a1ba94dde4fc3fcb1fe3f88e7154f53d1056d5 100644 (file)
@@ -116,6 +116,27 @@ DBusMessage * wpas_dbus_error_invalid_args(DBusMessage *message,
 }
 
 
+/**
+ * wpas_dbus_error_scan_error - Return a new ScanError error message
+ * @message: Pointer to incoming dbus message this error refers to
+ * @error: Optional string to be used as the error message
+ * Returns: a dbus error message
+ *
+ * Convenience function to create and return a scan error
+ */
+DBusMessage * wpas_dbus_error_scan_error(DBusMessage *message,
+                                        const char *error)
+{
+       DBusMessage *reply;
+
+       reply = dbus_message_new_error(message,
+                                      WPAS_DBUS_ERROR_IFACE_SCAN_ERROR,
+                                      error);
+
+       return reply;
+}
+
+
 static const char *dont_quote[] = {
        "key_mgmt", "proto", "pairwise", "auth_alg", "group", "eap",
        "opensc_engine_path", "pkcs11_engine_path", "pkcs11_module_path",
@@ -1330,7 +1351,10 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message,
                                "passive scan");
                        goto out;
                } else if (params.freqs && params.freqs[0]) {
-                       wpa_supplicant_trigger_scan(wpa_s, &params);
+                       if (wpa_supplicant_trigger_scan(wpa_s, &params)) {
+                               reply = wpas_dbus_error_scan_error(
+                                       message, "Scan request rejected");
+                       }
                } else {
                        wpa_s->scan_req = MANUAL_SCAN_REQ;
                        wpa_supplicant_req_scan(wpa_s, 0, 0);
@@ -1343,7 +1367,10 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message,
 #ifdef CONFIG_AUTOSCAN
                autoscan_deinit(wpa_s);
 #endif /* CONFIG_AUTOSCAN */
-               wpa_supplicant_trigger_scan(wpa_s, &params);
+               if (wpa_supplicant_trigger_scan(wpa_s, &params)) {
+                       reply = wpas_dbus_error_scan_error(
+                               message, "Scan request rejected");
+               }
        } else {
                wpa_printf(MSG_DEBUG, "wpas_dbus_handler_scan[dbus]: "
                           "Unknown scan type: %s", type);