summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaehyun Kim <jeik01.kim@samsung.com>2024-04-09 20:51:22 +0900
committerJaehyun Kim <jeik01.kim@samsung.com>2024-04-09 20:51:22 +0900
commit2e5102b42e9676a4c4bf0f7abd2fdcf49d3eacc1 (patch)
tree71708f2476d6cf57f9c40b60ed3e19a535499d63
parent3f10ee1199ce6255786fab4bc4c337c1ad476503 (diff)
downloadconnman-2e5102b42e9676a4c4bf0f7abd2fdcf49d3eacc1.tar.gz
connman-2e5102b42e9676a4c4bf0f7abd2fdcf49d3eacc1.tar.bz2
connman-2e5102b42e9676a4c4bf0f7abd2fdcf49d3eacc1.zip
Support roaming from WPA2 to WPA3
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>
-rwxr-xr-xsrc/service.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/service.c b/src/service.c
index bf5c11be..dbd36f33 100755
--- a/src/service.c
+++ b/src/service.c
@@ -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);