From: Niraj Kumar Goit Date: Thu, 17 Aug 2017 09:56:46 +0000 (+0530) Subject: [connman] Enabled specific scan for Multiple APs. X-Git-Tag: submit/tizen/20170821.070104^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9ac9e2bcccd2c3dcea3e9111701bb09f15db85ba;p=platform%2Fupstream%2Fconnman.git [connman] Enabled specific scan for Multiple APs. Change-Id: I2156778ed0bcc703e8823c7eccaf344ab21503c1 Signed-off-by: Niraj Kumar Goit --- diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index 0d5ff3b..67a1843 100755 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -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); diff --git a/plugins/wifi.c b/plugins/wifi.c index 7f99ace..ce53233 100755 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -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; diff --git a/src/technology.c b/src/technology.c index fb39d34..c1eb3ed 100755 --- a/src/technology.c +++ b/src/technology.c @@ -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