diff options
Diffstat (limited to 'gsupplicant/supplicant.c')
-rw-r--r-- | gsupplicant/supplicant.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index a2501b94..2a1021ff 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -2344,7 +2344,7 @@ int g_supplicant_interface_connect(GSupplicantInterface *interface, return -EINPROGRESS; } -static void interface_disconnect_result(const char *error, +static void network_remove_result(const char *error, DBusMessageIter *iter, void *user_data) { struct interface_data *data = user_data; @@ -2361,6 +2361,42 @@ static void interface_disconnect_result(const char *error, dbus_free(data); } +static void network_remove_params(DBusMessageIter *iter, void *user_data) +{ + struct interface_data *data = user_data; + const char *path = data->interface->network_path; + + SUPPLICANT_DBG("path %s", path); + + dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &path); +} + +static int network_remove(struct interface_data *data) +{ + GSupplicantInterface *interface = data->interface; + + SUPPLICANT_DBG(""); + + return supplicant_dbus_method_call(interface->path, + SUPPLICANT_INTERFACE ".Interface", "RemoveNetwork", + network_remove_params, network_remove_result, data); +} + +static void interface_disconnect_result(const char *error, + DBusMessageIter *iter, void *user_data) +{ + struct interface_data *data = user_data; + + SUPPLICANT_DBG(""); + + if (error != NULL && data->callback != NULL) { + data->callback(-EIO, data->interface, data->user_data); + return; + } + + network_remove(data); +} + int g_supplicant_interface_disconnect(GSupplicantInterface *interface, GSupplicantInterfaceCallback callback, void *user_data) |