return -EALREADY;
DBG("scan_type: %d", scan_type);
- if (scan_type == 1) { /* ssid based scan */
+ if (scan_type == CONNMAN_MULTI_SCAN_SSID) { /* ssid based scan */
scan_params = g_try_malloc0(sizeof(GSupplicantScanParams));
if (!scan_params) {
DBG("Failed to allocate memory.");
}
scan_params->num_ssids = count;
- } else if (scan_type == 2) { /* frequency based scan */
+ } else if (scan_type == CONNMAN_MULTI_SCAN_FREQ) { /* frequency based scan */
scan_params = g_try_malloc0(sizeof(GSupplicantScanParams));
if (!scan_params) {
}
scan_params->num_freqs = count;
+ } else if (scan_type == CONNMAN_MULTI_SCAN_SSID_FREQ) { /* SSID & Frequency mixed scan */
+ int freq_count, ap_count;
+ scan_params = g_try_malloc0(sizeof(GSupplicantScanParams));
+ if (!scan_params) {
+ DBG("Failed to allocate memory.");
+ return -ENOMEM;
+ }
+
+ guint size = g_slist_length(specific_scan_list);
+
+ scan_params->freqs = g_try_new0(uint16_t, size/2);
+ if (!scan_params->freqs) {
+ DBG("Failed to allocate memory.");
+ g_free(scan_params);
+ return -ENOMEM;
+ }
+
+ ap_count = freq_count = 0;
+ for (list = specific_scan_list; list; list = list->next) {
+ if (((connman_multi_scan_ap_s *)list->data)->flag == true) { /** ssid */
+ ssid = ((connman_multi_scan_ap_s *)list->data)->str;
+ 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;
+ scan_params->ssids = g_slist_prepend(scan_params->ssids, scan_ssid);
+ ap_count++;
+
+ } else { /* freq */
+ freq = atoi(((connman_multi_scan_ap_s *)list->data)->str);
+ scan_params->freqs[freq_count] = freq;
+ DBG("scan_params->freqs[%d]: %d", freq_count, scan_params->freqs[freq_count]);
+ freq_count++;
+ }
+ }
+ scan_params->num_ssids = ap_count;
+ scan_params->num_freqs = freq_count;
} else {
DBG("Invalid scan");
return -EINVAL;
#include <string.h>
#if defined TIZEN_EXT
#include <stdio.h>
+#include <stdlib.h>
#endif
#include <gdbus.h>
GSList *specific_scan_list = NULL;
int scan_type = 0;
const char *name = NULL;
- unsigned int freq = 0;
+ const char *freq = NULL;
DBusMessageIter iter, dict;
int err;
return __connman_error_invalid_arguments(msg);
}
- scan_type = 1; /* SSID based scan */
+ scan_type = CONNMAN_MULTI_SCAN_SSID; /* SSID based scan */
dbus_message_iter_get_basic(&value2, &name);
DBG("name %s", name);
specific_scan_list = g_slist_append(specific_scan_list, g_strdup(name));
} else if (g_str_equal(key, "Frequency")) {
- if (type != DBUS_TYPE_UINT16) {
+ if (type != DBUS_TYPE_STRING) {
+ g_slist_free_full(specific_scan_list, g_free);
+ return __connman_error_invalid_arguments(msg);
+ }
+
+ scan_type = CONNMAN_MULTI_SCAN_FREQ; /* Frequency based scan */
+ dbus_message_iter_get_basic(&value2, &freq);
+ DBG("freq %s", freq);
+ specific_scan_list = g_slist_append(specific_scan_list, GINT_TO_POINTER(atoi(freq)));
+ } else if (g_str_equal(key, "SSID_Mixed")) {
+ if (type != DBUS_TYPE_STRING) {
+ g_slist_free_full(specific_scan_list, g_free);
+ return __connman_error_invalid_arguments(msg);
+ }
+
+ scan_type = CONNMAN_MULTI_SCAN_SSID_FREQ; /* SSID & Frequency mixed scan */
+ dbus_message_iter_get_basic(&value2, &name);
+
+ connman_multi_scan_ap_s *ap = (connman_multi_scan_ap_s*)g_try_malloc0(sizeof(connman_multi_scan_ap_s));
+ if (ap) {
+ g_strlcpy(ap->str, name, strlen(name) + 1);
+ ap->flag = true;
+ specific_scan_list = g_slist_append(specific_scan_list, ap);
+ } else
+ DBG("Failed to allocate memory");
+
+ } else if (g_str_equal(key, "Frequency_Mixed")) {
+ if (type != DBUS_TYPE_STRING) {
g_slist_free_full(specific_scan_list, g_free);
return __connman_error_invalid_arguments(msg);
}
- scan_type = 2; /* Frequency based scan */
+ scan_type = CONNMAN_MULTI_SCAN_SSID_FREQ; /* SSID & Frequency mixed scan */
dbus_message_iter_get_basic(&value2, &freq);
- DBG("freq %d", freq);
- specific_scan_list = g_slist_append(specific_scan_list, GINT_TO_POINTER(freq));
+
+ connman_multi_scan_ap_s *ap = (connman_multi_scan_ap_s*)g_try_malloc0(sizeof(connman_multi_scan_ap_s));
+ if (ap) {
+ g_strlcpy(ap->str, freq, strlen(freq) + 1);
+ ap->flag = false;
+ specific_scan_list = g_slist_append(specific_scan_list, ap);
+ } else
+ DBG("Failed to allocate memory");
}
dbus_message_iter_next(&dict);
}
technology->scan_pending =
g_slist_prepend(technology->scan_pending, msg);
- if (scan_type == 1) {
+ if (scan_type == CONNMAN_MULTI_SCAN_SSID ||
+ scan_type == CONNMAN_MULTI_SCAN_SSID_FREQ) {
g_slist_free_full(specific_scan_list, g_free);
scan_type = 0;
}