[connman] Enabled specific scan for Multiple APs. 56/144656/3 submit/tizen/20170821.070104 submit/tizen/20170822.002714
authorNiraj Kumar Goit <niraj.g@samsung.com>
Thu, 17 Aug 2017 09:56:46 +0000 (15:26 +0530)
committerNiraj Kumar Goit <niraj.g@samsung.com>
Fri, 18 Aug 2017 10:21:28 +0000 (10:21 +0000)
Change-Id: I2156778ed0bcc703e8823c7eccaf344ab21503c1
Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
gsupplicant/supplicant.c
plugins/wifi.c
src/technology.c

index 0d5ff3b..67a1843 100755 (executable)
@@ -4316,7 +4316,11 @@ static void interface_scan_params(DBusMessageIter *iter, void *user_data)
                supplicant_dbus_dict_append_basic(&dict, "Type",
                                        DBUS_TYPE_STRING, &type);
 
-               supplicant_dbus_dict_append_array(&dict, "SSIDs",
+#if defined TIZEN_EXT
+               SUPPLICANT_DBG("[specific_scan] num_ssids %d", data->scan_params->num_ssids);
+               if (data->scan_params->num_ssids != 0)
+#endif
+                       supplicant_dbus_dict_append_array(&dict, "SSIDs",
                                                DBUS_TYPE_STRING,
                                                append_ssids,
                                                data->scan_params);
index 7f99ace..ce53233 100755 (executable)
@@ -1862,7 +1862,7 @@ static int wifi_specific_scan(enum connman_service_type type,
        char *ssid = NULL;
        struct wifi_data *wifi = connman_device_get_data(device);
        GSupplicantScanParams *scan_params = NULL;
-       struct scan_ssid *scan_ssid;
+       struct scan_ssid *scan_ssid = NULL;
        bool scanning;
        int ret;
        int freq;
@@ -1887,18 +1887,22 @@ static int wifi_specific_scan(enum connman_service_type type,
        DBG("scan_type: %d", scan_type);
        if (scan_type == 1) { /* ssid based scan */
                scan_params = g_try_malloc0(sizeof(GSupplicantScanParams));
-               if (!scan_params)
-                       return -ENOMEM;
-
-               scan_ssid = g_try_new0(struct scan_ssid, 1);
-               if (!scan_ssid) {
-                       g_free(scan_params);
+               if (!scan_params) {
+                       DBG("Failed to allocate memory.");
                        return -ENOMEM;
                }
+
                for (list = specific_scan_list; list; list = list->next) {
                        ssid = (char *)list->data;
                        int ssid_len = strlen(ssid);
 
+                       scan_ssid = g_try_new0(struct scan_ssid, 1);
+                       if (!scan_ssid) {
+                               DBG("Failed to allocate memory.");
+                               g_supplicant_free_scan_params(scan_params);
+                               return -ENOMEM;
+                       }
+
                        memcpy(scan_ssid->ssid, ssid, (ssid_len + 1));
                        DBG("scan ssid %s len: %d", scan_ssid->ssid, ssid_len);
                        scan_ssid->ssid_len = ssid_len;
@@ -1910,19 +1914,27 @@ static int wifi_specific_scan(enum connman_service_type type,
        } else if (scan_type == 2) { /* frequency based scan */
 
                scan_params = g_try_malloc0(sizeof(GSupplicantScanParams));
-               if (!scan_params)
+               if (!scan_params) {
+                       DBG("Failed to allocate memory.");
                        return -ENOMEM;
+               }
 
-               scan_params->freqs = g_try_new0(uint16_t, 1);
+               guint num_freqs = g_slist_length(specific_scan_list);
+               DBG("num_freqs: %d", num_freqs);
+
+               scan_params->freqs = g_try_new0(uint16_t, num_freqs);
                if (!scan_params->freqs) {
+                       DBG("Failed to allocate memory.");
                        g_free(scan_params);
                        return -ENOMEM;
                }
+
                count = 0;
                for (list = specific_scan_list; list; list = list->next) {
                        freq = (int)list->data;
-                       DBG("freq: %d", freq);
+
                        scan_params->freqs[count] = freq;
+                       DBG("scan_params->freqs[%d]: %d", count, scan_params->freqs[count]);
                        count++;
                }
                scan_params->num_freqs = count;
index fb39d34..c1eb3ed 100755 (executable)
@@ -1240,7 +1240,10 @@ static DBusMessage *specific_scan(DBusConnection *conn, DBusMessage *msg, void *
        if (err < 0)
                reply_scan_pending(technology, err);
 
-       g_slist_free_full(specific_scan_list, g_free);
+       if (scan_type == 1) {
+               g_slist_free_full(specific_scan_list, g_free);
+               scan_type = 0;
+       }
        return NULL;
 }
 
@@ -1287,9 +1290,9 @@ static const GDBusMethodTable technology_methods[] = {
                        GDBUS_ARGS({ "name", "s" }, { "value", "v" }),
                        NULL, set_property) },
        { GDBUS_ASYNC_METHOD("Scan", NULL, NULL, scan) },
+#if defined TIZEN_EXT
        { GDBUS_ASYNC_METHOD("SpecificScan", GDBUS_ARGS({ "specificscan", "a{sv}" }),
                        NULL, specific_scan) },
-#if defined TIZEN_EXT
        { GDBUS_METHOD("GetScanState", NULL, GDBUS_ARGS({ "scan_state", "a{sv}" }),
                        get_scan_state) },
 #endif