Support roaming from WPA2 to WPA3 02/309402/1 tizen
authorJaehyun Kim <jeik01.kim@samsung.com>
Tue, 9 Apr 2024 11:51:22 +0000 (20:51 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Tue, 9 Apr 2024 11:51:22 +0000 (20:51 +0900)
When the AP is switched from WPA2 to WPA3,
it will automatically reconnect if it is the same SSID.

Change-Id: I7d56d56dffe70e1b6513e1d8eadca7daea1714f1
Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
src/service.c

index bf5c11b..dbd36f3 100755 (executable)
@@ -10562,6 +10562,63 @@ static struct connman_service *service_get(const char *identifier)
        return service;
 }
 
+#if defined TIZEN_EXT
+static void service_load_wpa_passphrase(struct connman_service *service)
+{
+       char *identifier;
+       char *ptr;
+       GKeyFile *keyfile;
+       bool favorite;
+       bool autoconnect;
+       char *passphrase;
+
+       if (service->security != CONNMAN_SERVICE_SECURITY_SAE)
+               return;
+
+       if (service->passphrase)
+               return;
+
+       if (!service->identifier)
+               return;
+
+       identifier = g_strdup(service->identifier);
+       if (!identifier)
+               return;
+
+       ptr = strstr(identifier, "_sae");
+       if (!ptr) {
+               g_free(identifier);
+               return;
+       }
+
+       memcpy(ptr, "_psk", strlen("_psk"));
+
+       keyfile = connman_storage_load_service(identifier);
+       if (!keyfile) {
+               g_free(identifier);
+               return;
+       }
+
+       favorite = g_key_file_get_boolean(keyfile, identifier, "Favorite", NULL);
+       autoconnect = g_key_file_get_boolean(keyfile, identifier, "AutoConnect", NULL);
+
+       if (!favorite || !autoconnect) {
+               g_free(identifier);
+               return;
+       }
+
+       passphrase = g_key_file_get_string(keyfile, identifier, "Passphrase", NULL);
+       if (passphrase) {
+               service->passphrase = g_strdup(passphrase);
+               service->favorite = favorite;
+               service->autoconnect = autoconnect;
+       }
+
+       g_free(identifier);
+       g_free(passphrase);
+}
+#endif
+
 static int service_register(struct connman_service *service)
 {
 #if defined TIZEN_EXT
@@ -10580,6 +10637,7 @@ static int service_register(struct connman_service *service)
 #if defined TIZEN_EXT
        int ret;
        service_load(service);
+       service_load_wpa_passphrase(service);
 
        if (TIZEN_INS_ENABLED) {
                ret = service_ext_load(service);