dbus: Add boolean AllowRoam option to Scan() method options dictionary

To disallow roaming when a scan request's results are read, callers
of the D-Bus Scan() method may add a new "AllowRoam" boolean key
to the scan options dictionary and set that key's value to FALSE.

Signed-hostap: Dan Williams <dcbw@redhat.com>
This commit is contained in:
Dan Williams 2013-10-22 16:09:46 +03:00 committed by Jouni Malinen
parent c6f5dec9c1
commit 538922a628

View File

@ -1236,6 +1236,23 @@ static int wpas_dbus_get_scan_channels(DBusMessage *message,
} }
static int wpas_dbus_get_scan_allow_roam(DBusMessage *message,
DBusMessageIter *var,
dbus_bool_t *allow,
DBusMessage **reply)
{
if (dbus_message_iter_get_arg_type(var) != DBUS_TYPE_BOOLEAN) {
wpa_printf(MSG_DEBUG, "wpas_dbus_handler_scan[dbus]: "
"Type must be a boolean");
*reply = wpas_dbus_error_invalid_args(
message, "Wrong Type value type. Boolean required");
return -1;
}
dbus_message_iter_get_basic(var, allow);
return 0;
}
/** /**
* wpas_dbus_handler_scan - Request a wireless scan on an interface * wpas_dbus_handler_scan - Request a wireless scan on an interface
* @message: Pointer to incoming dbus message * @message: Pointer to incoming dbus message
@ -1254,6 +1271,7 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message,
char *key = NULL, *type = NULL; char *key = NULL, *type = NULL;
struct wpa_driver_scan_params params; struct wpa_driver_scan_params params;
size_t i; size_t i;
dbus_bool_t allow_roam = 1;
os_memset(&params, 0, sizeof(params)); os_memset(&params, 0, sizeof(params));
@ -1284,6 +1302,12 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message,
if (wpas_dbus_get_scan_channels(message, &variant_iter, if (wpas_dbus_get_scan_channels(message, &variant_iter,
&params, &reply) < 0) &params, &reply) < 0)
goto out; goto out;
} else if (os_strcmp(key, "AllowRoam") == 0) {
if (wpas_dbus_get_scan_allow_roam(message,
&variant_iter,
&allow_roam,
&reply) < 0)
goto out;
} else { } else {
wpa_printf(MSG_DEBUG, "wpas_dbus_handler_scan[dbus]: " wpa_printf(MSG_DEBUG, "wpas_dbus_handler_scan[dbus]: "
"Unknown argument %s", key); "Unknown argument %s", key);
@ -1332,6 +1356,9 @@ DBusMessage * wpas_dbus_handler_scan(DBusMessage *message,
goto out; goto out;
} }
if (!allow_roam)
wpa_s->scan_res_handler = scan_only_handler;
out: out:
for (i = 0; i < WPAS_MAX_SCAN_SSIDS; i++) for (i = 0; i < WPAS_MAX_SCAN_SSIDS; i++)
os_free((u8 *) params.ssids[i].ssid); os_free((u8 *) params.ssids[i].ssid);