From patchwork Fri Apr 20 11:23:24 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [3/7] Adding AutoScan interface method to set or unset autoscan parameters Date: Fri, 20 Apr 2012 01:23:24 -0000 From: Tomasz Bursztyka X-Patchwork-Id: 154023 Message-Id: <1334921008-6654-4-git-send-email-tomasz.bursztyka@linux.intel.com> To: hostap@lists.shmoo.com Signed-hostap: Tomasz Bursztyka --- wpa_supplicant/dbus/dbus_new.c | 9 ++++++ wpa_supplicant/dbus/dbus_new_handlers.c | 44 +++++++++++++++++++++++++++++++ wpa_supplicant/dbus/dbus_new_handlers.h | 5 +++ 3 files changed, 58 insertions(+), 0 deletions(-) diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index a871f41..8ee3340 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -2488,6 +2488,15 @@ static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = { END_ARGS } }, +#ifdef CONFIG_AUTOSCAN + { "AutoScan", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) &wpas_dbus_handler_autoscan, + { + { "arg", "s", ARG_IN }, + END_ARGS + } + }, +#endif /* CONFIG_AUTOSCAN */ { NULL, NULL, NULL, { END_ARGS } } }; diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index 8f4a5af..5770105 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -1810,6 +1810,50 @@ DBusMessage * wpas_dbus_handler_flush_bss(DBusMessage *message, return NULL; } +#ifdef CONFIG_AUTOSCAN +/** + * wpas_dbus_handler_autoscan - Set autoscan parameters for the interface + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL + * + * Handler function for "AutoScan" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_autoscan(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + DBusMessage *reply = NULL; + enum wpa_states state = wpa_s->wpa_state; + char *arg; + + dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &arg, + DBUS_TYPE_INVALID); + + if (wpa_s->conf->autoscan != NULL) { + os_free(wpa_s->conf->autoscan); + wpa_s->conf->autoscan = NULL; + } + + if (arg != NULL && os_strlen(arg) > 0) { + wpa_s->conf->autoscan = os_strdup(arg); + if (wpa_s->conf->autoscan == NULL) { + reply = dbus_message_new_error(message, + DBUS_ERROR_NO_MEMORY, + NULL); + } + + if (state == WPA_DISCONNECTED || state == WPA_INACTIVE) + autoscan_init(wpa_s); + } else if (os_strlen(arg) == 0) + autoscan_deinit(wpa_s); + else + reply = dbus_message_new_error(message, + DBUS_ERROR_INVALID_ARGS, + NULL); + + return reply; +} +#endif /* CONFIG_AUTOSCAN */ /** * wpas_dbus_getter_capabilities - Return interface capabilities diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h index b46658f..9c48e3f 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.h +++ b/wpa_supplicant/dbus/dbus_new_handlers.h @@ -124,6 +124,11 @@ DBusMessage * wpas_dbus_handler_remove_blob(DBusMessage *message, DBusMessage * wpas_dbus_handler_flush_bss(DBusMessage *message, struct wpa_supplicant *wpa_s); +#ifdef CONFIG_AUTOSCAN +DBusMessage * wpas_dbus_handler_autoscan(DBusMessage *message, + struct wpa_supplicant *wpa_s); +#endif /* CONFIG_AUTOSCAN */ + dbus_bool_t wpas_dbus_getter_capabilities(DBusMessageIter *iter, DBusError *error, void *user_data);