if (bss_info) {
char *bssid = (char *)bss_info->bssid;
char *ssid = (char *)bss_info->ssid;
+ int ssid_len = bss_info->ssid_len;
GSList *vsie_list = bss_info->vsie_list;
int freq = (int)bss_info->freq;
int signal = (int)bss_info->signal;
int enc_type = (int)bss_info->encryption_type;
int pmf_required = (int)bss_info->pmf_required;
- g_variant_builder_add(builder, "{sv}", prop_ssid, g_variant_new_string(ssid));
+ builder1 = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+ for (int i = 0; i < ssid_len; i++)
+ g_variant_builder_add(builder1, "y", ssid[i]);
+ g_variant_builder_add(builder, "{sv}", prop_ssid, g_variant_builder_end(builder1));
+ g_variant_builder_unref(builder1);
+
g_variant_builder_add(builder, "{sv}", prop_bssid, g_variant_new_string(bssid));
g_variant_builder_add(builder, "{sv}", prop_freq, g_variant_new_int32(freq));
g_variant_builder_add(builder, "{sv}", prop_rssi, g_variant_new_int32(signal));
}
}
-static void __netconfig_found_ap(unsigned char *bss_element, int length, char *str)
+static void __netconfig_found_ap(unsigned char *bss_element, int length, char *str, int *ssid_len)
{
uint8_t len;
uint8_t *data;
int i;
+ *ssid_len = 0;
+
while (length >= 2 && length >= bss_element[1]) {
if (bss_element[0] == 0 && bss_element[1] <= 32) {
len = bss_element[1];
data = bss_element + 2;
for (i = 0; i < len; i++) {
- if (isprint(data[i]) && data[i] != ' ' && data[i] != '\\')
- snprintf(&str[i], 2, "%c", data[i]);
- else if (data[i] == ' ' && (i != 0 && i != len -1))
- snprintf(&str[i], 2, "%c", ' ');
- else
- snprintf(&str[i], 2, "%c", data[i]);
+ memcpy(&str[i], &data[i], 1);
+ (*ssid_len)++;
}
break;
}
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
char bssid[NETCONFIG_BSSID_LEN+1];
char ssid[NETCONFIG_SSID_LEN+1] = {0, };
+ int ssid_len;
wifi_security_type_e sec_type = WIFI_SECURITY_TYPE_NONE;
wifi_encryption_type_e enc_type = WIFI_ENCRYPTION_TYPE_NONE;
int wep_check = 0;
/** Extract BSSID and AP info. */
__netconfig_macaddress_str(bssid, nla_data(bss[NL80211_BSS_BSSID]));
- __netconfig_found_ap(nla_data(bss[NL80211_BSS_INFORMATION_ELEMENTS]), nla_len(bss[NL80211_BSS_INFORMATION_ELEMENTS]), ssid);
+ __netconfig_found_ap(nla_data(bss[NL80211_BSS_INFORMATION_ELEMENTS]), nla_len(bss[NL80211_BSS_INFORMATION_ELEMENTS]), ssid, &ssid_len);
__netconfig_get_vsie(nla_data(bss[NL80211_BSS_INFORMATION_ELEMENTS]), nla_len(bss[NL80211_BSS_INFORMATION_ELEMENTS]), &vsie);
if (bss[NL80211_BSS_CAPABILITY]) {
}
g_strlcpy(bss_info->bssid, bssid, strlen(bssid)+1);
- g_strlcpy(bss_info->ssid, ssid, strlen(ssid)+1);
+ g_strlcpy(bss_info->ssid, ssid, ssid_len+1);
+ bss_info->ssid_len = ssid_len;
bss_info->vsie_list = vsie;
bss_info->freq = nla_get_u32(bss[NL80211_BSS_FREQUENCY]);