From aff46402fdbd86925cee5de4d36546b8b289b99b Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Wed, 4 Jul 2012 17:24:40 +0300 Subject: [PATCH] gsupplicant: Add a function to handle autoscan method --- gsupplicant/gsupplicant.h | 5 ++++ gsupplicant/supplicant.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h index 23ccf19..4e0118d 100644 --- a/gsupplicant/gsupplicant.h +++ b/gsupplicant/gsupplicant.h @@ -191,6 +191,11 @@ int g_supplicant_interface_scan(GSupplicantInterface *interface, GSupplicantInterfaceCallback callback, void *user_data); +int g_supplicant_interface_autoscan(GSupplicantInterface *interface, + const char *autoscan_data, + GSupplicantInterfaceCallback callback, + void *user_data); + int g_supplicant_interface_connect(GSupplicantInterface *interface, GSupplicantSSID *ssid, GSupplicantInterfaceCallback callback, diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index 1c03556..dffc1d8 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -2432,6 +2432,13 @@ struct interface_scan_data { void *user_data; }; +struct interface_autoscan_data { + GSupplicantInterface *interface; + GSupplicantInterfaceCallback callback; + const char *autoscan_params; + void *user_data; +}; + static void interface_create_property(const char *key, DBusMessageIter *iter, void *user_data) { @@ -2875,6 +2882,58 @@ int g_supplicant_interface_scan(GSupplicantInterface *interface, return ret; } +static void interface_autoscan_result(const char *error, + DBusMessageIter *iter, void *user_data) +{ + struct interface_autoscan_data *data = user_data; + int err = 0; + + if (error != NULL) { + SUPPLICANT_DBG("error %s", error); + err = -EIO; + } + + if (data != NULL && data->callback != NULL) + data->callback(err, data->interface, data->user_data); + + dbus_free(data); +} + +static void interface_autoscan_params(DBusMessageIter *iter, void *user_data) +{ + struct interface_autoscan_data *data = user_data; + + dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, + &data->autoscan_params); +} + +int g_supplicant_interface_autoscan(GSupplicantInterface *interface, + const char *autoscan_data, + GSupplicantInterfaceCallback callback, + void *user_data) +{ + struct interface_autoscan_data *data; + int ret; + + data = dbus_malloc0(sizeof(*data)); + if (data == NULL) + return -ENOMEM; + + data->interface = interface; + data->callback = callback; + data->autoscan_params = autoscan_data; + data->user_data = user_data; + + ret = supplicant_dbus_method_call(interface->path, + SUPPLICANT_INTERFACE ".Interface", "AutoScan", + interface_autoscan_params, + interface_autoscan_result, data); + if (ret < 0) + dbus_free(data); + + return ret; +} + static int parse_supplicant_error(DBusMessageIter *iter) { int err = -ECANCELED; -- 2.7.4