From: Jaehyun Kim Date: Tue, 30 Jan 2024 08:50:15 +0000 (+0900) Subject: Support EUC-KR ssid in netlink scan X-Git-Tag: accepted/tizen/unified/20240327.064211~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=906bc79691a952963cc059413f531f24beb9a86e;p=platform%2Fcore%2Fconnectivity%2Fnet-config.git Support EUC-KR ssid in netlink scan Change-Id: Ia030e0b47219e6e44c500043cf1008e0f7d2adfa Signed-off-by: Jaehyun Kim --- diff --git a/src/wifi-netlink-scan.c b/src/wifi-netlink-scan.c index a02c9a7..9f4cfd6 100755 --- a/src/wifi-netlink-scan.c +++ b/src/wifi-netlink-scan.c @@ -72,6 +72,7 @@ void __netconfig_notify_netlink_scan_done(const char *interface_name) 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; @@ -79,7 +80,12 @@ void __netconfig_notify_netlink_scan_done(const char *interface_name) 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)); @@ -474,23 +480,21 @@ static void __netconfig_get_vsie(unsigned char *bss_element, int length, GSList } } -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; } @@ -505,6 +509,7 @@ static int __netconfig_netlink_scan_cb(struct nl_msg *msg, void *user_data) 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; @@ -536,7 +541,7 @@ static int __netconfig_netlink_scan_cb(struct nl_msg *msg, void *user_data) /** 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]) { @@ -578,7 +583,8 @@ static int __netconfig_netlink_scan_cb(struct nl_msg *msg, void *user_data) } 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]);