diff options
Diffstat (limited to 'plugins')
-rwxr-xr-x | plugins/wifi.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/plugins/wifi.c b/plugins/wifi.c index 6672f0dd..e44d16ed 100755 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -219,6 +219,8 @@ struct enc_method_call_data { static struct enc_method_call_data encrypt_request_data; +static GSupplicantSecurity network_security(const char *security); + static void encryption_request_reply(DBusPendingCall *call, void *user_data) { @@ -3365,6 +3367,11 @@ static void network_remove(struct connman_network *network) { struct connman_device *device = connman_network_get_device(network); struct wifi_data *wifi; +#if defined TIZEN_EXT + GSupplicantSSID *ssid; + const void *ssid_data; + const char *security; +#endif DBG("network %p", network); @@ -3385,6 +3392,34 @@ static void network_remove(struct connman_network *network) if (wifi->scan_pending_network == network) wifi->scan_pending_network = NULL; + + /* + * If this remove network is for the same network + * for which wpa_supplicant already has a profile + * then need to remove that profile. + */ + ssid = g_try_malloc0(sizeof(GSupplicantSSID)); + if (!ssid) + return; + + ssid_data = connman_network_get_blob(network, "WiFi.SSID", + &ssid->ssid_len); + ssid->ssid = g_try_malloc0(ssid->ssid_len); + + if (!ssid->ssid) { + g_free(ssid); + return; + } else { + memcpy(ssid->ssid, ssid_data, ssid->ssid_len); + } + + security = connman_network_get_string(network, "WiFi.Security"); + ssid->security = network_security(security); + + g_supplicant_interface_remove_network(wifi->interface, ssid); + + g_free(ssid->ssid); + g_free(ssid); #endif } |