Support EUC-KR ssid in netlink scan 47/305247/1 accepted/tizen/7.0/unified/20240202.171257
authorJaehyun Kim <jeik01.kim@samsung.com>
Tue, 30 Jan 2024 08:50:15 +0000 (17:50 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Tue, 30 Jan 2024 08:52:08 +0000 (17:52 +0900)
Change-Id: Ia030e0b47219e6e44c500043cf1008e0f7d2adfa
Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
src/wifi-netlink-scan.c

index a02c9a7..9f4cfd6 100755 (executable)
@@ -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]);