return true;
}
+#if defined TIZEN_EXT
+static char *__connman_service_get_wpa_id_to_remove(struct connman_service *service)
+{
+ char *identifier;
+ char *ptr;
+
+ if (service->type != CONNMAN_SERVICE_TYPE_WIFI)
+ return NULL;
+
+ if (service->security != CONNMAN_SERVICE_SECURITY_SAE &&
+ service->security != CONNMAN_SERVICE_SECURITY_PSK)
+ return NULL;
+
+ identifier = g_strdup(service->identifier);
+ if (!identifier)
+ return NULL;
+
+ if (service->security == CONNMAN_SERVICE_SECURITY_SAE) {
+ ptr = strstr(identifier, "_sae");
+ if (!ptr) {
+ g_free(identifier);
+ return NULL;
+ }
+
+ memcpy(ptr, "_psk", strlen("_psk"));
+ } else if (service->security == CONNMAN_SERVICE_SECURITY_PSK) {
+ ptr = strstr(identifier, "_psk");
+ if (!ptr) {
+ g_free(identifier);
+ return NULL;
+ }
+
+ memcpy(ptr, "_sae", strlen("_sae"));
+ }
+
+ return identifier;
+}
+
+
+static void __connman_service_remove_wpa_service(struct connman_service *service)
+{
+ gchar *dir;
+ GList *list;
+ char *identifier = __connman_service_get_wpa_id_to_remove(service);
+
+ if (!identifier)
+ return;
+
+ dir = g_strdup_printf("%s/%s", STORAGEDIR, identifier);
+ if (!dir)
+ goto done;
+
+ if (g_file_test(dir, G_FILE_TEST_EXISTS) != TRUE)
+ goto done;
+
+ for (list = service_list; list; list = list->next) {
+ struct connman_service *dst_service = list->data;
+
+ if (dst_service->type != CONNMAN_SERVICE_TYPE_WIFI)
+ continue;
+
+ if (g_strcmp0(dst_service->identifier, identifier) == 0) {
+ __connman_service_remove(dst_service);
+ goto done;
+ }
+ }
+
+ __connman_storage_remove_service(identifier);
+
+done:
+ g_free(identifier);
+ g_free(dir);
+}
+#endif
+
static DBusMessage *remove_service(DBusConnection *conn,
DBusMessage *msg, void *user_data)
{
struct connman_service *service = user_data;
DBG("service %p", service);
-
+#if defined TIZEN_EXT
+ __connman_service_remove_wpa_service(service);
+#endif
if (!__connman_service_remove(service))
return __connman_error_not_supported(msg);
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);
+ g_key_file_free(keyfile);
+ 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);
+ g_key_file_free(keyfile);
+}
+#endif
+
static int service_register(struct connman_service *service)
{
#if defined TIZEN_EXT
#if defined TIZEN_EXT
int ret;
service_load(service);
+ service_load_wpa_passphrase(service);
if (TIZEN_INS_ENABLED) {
ret = service_ext_load(service);