---
 gsupplicant/gsupplicant.h |    5 ++++
 gsupplicant/supplicant.c  |   58 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 0 deletions(-)

diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h
index 03df6ca..1bb8a4e 100644
--- a/gsupplicant/gsupplicant.h
+++ b/gsupplicant/gsupplicant.h
@@ -175,6 +175,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 5db1fcd..848b922 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -2237,6 +2237,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)
 {
@@ -2679,6 +2686,57 @@ 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;
+       }
+
+       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;
-- 
1.7.8.5

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to