mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 21:22:37 +01:00
agent: Add reason parameter to Cancel
Add a parameter the UI can use to show user an explanation of why a password prompt is disappearing.
This commit is contained in:
parent
e30a2093ce
commit
99f99e0bc0
40
src/agent.c
40
src/agent.c
@ -83,11 +83,41 @@ static void send_request(struct agent *agent, const char *request)
|
|||||||
l_dbus_send(dbus_get_bus(), message);
|
l_dbus_send(dbus_get_bus(), message);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void send_cancel_request(void *user_data)
|
static void send_cancel_request(void *user_data, int reason)
|
||||||
{
|
{
|
||||||
struct agent *agent = user_data;
|
struct agent *agent = user_data;
|
||||||
|
struct l_dbus_message *message;
|
||||||
|
const char *reasonstr;
|
||||||
|
|
||||||
send_request(agent, "Cancel");
|
switch (reason) {
|
||||||
|
case -ECANCELED:
|
||||||
|
reasonstr = "user-canceled";
|
||||||
|
break;
|
||||||
|
case -ETIMEDOUT:
|
||||||
|
reasonstr = "timed-out";
|
||||||
|
break;
|
||||||
|
case -ERANGE:
|
||||||
|
reasonstr = "out-of-range";
|
||||||
|
break;
|
||||||
|
case -ESHUTDOWN:
|
||||||
|
reasonstr = "shutdown";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reasonstr = "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
l_debug("send a Cancel(%s) to %s %s", reasonstr,
|
||||||
|
agent->owner, agent->path);
|
||||||
|
|
||||||
|
message = l_dbus_message_new_method_call(dbus_get_bus(),
|
||||||
|
agent->owner,
|
||||||
|
agent->path,
|
||||||
|
IWD_AGENT_INTERFACE,
|
||||||
|
"Cancel");
|
||||||
|
|
||||||
|
l_dbus_message_set_arguments(message, "s", reasonstr);
|
||||||
|
|
||||||
|
l_dbus_send(dbus_get_bus(), message);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void agent_request_free(void *user_data)
|
static void agent_request_free(void *user_data)
|
||||||
@ -177,7 +207,7 @@ static void request_timeout(struct l_timeout *timeout, void *user_data)
|
|||||||
|
|
||||||
l_dbus_cancel(dbus_get_bus(), agent->pending_id);
|
l_dbus_cancel(dbus_get_bus(), agent->pending_id);
|
||||||
|
|
||||||
send_cancel_request(agent);
|
send_cancel_request(agent, -ETIMEDOUT);
|
||||||
|
|
||||||
agent_finalize_pending(agent, NULL);
|
agent_finalize_pending(agent, NULL);
|
||||||
|
|
||||||
@ -301,7 +331,7 @@ static bool find_request(const void *a, const void *b)
|
|||||||
return request->id == id;
|
return request->id == id;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool agent_request_cancel(unsigned int req_id)
|
bool agent_request_cancel(unsigned int req_id, int reason)
|
||||||
{
|
{
|
||||||
struct agent_request *request;
|
struct agent_request *request;
|
||||||
|
|
||||||
@ -314,7 +344,7 @@ bool agent_request_cancel(unsigned int req_id)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!request->message)
|
if (!request->message)
|
||||||
send_cancel_request(default_agent);
|
send_cancel_request(default_agent, reason);
|
||||||
|
|
||||||
agent_request_free(request);
|
agent_request_free(request);
|
||||||
|
|
||||||
|
@ -40,4 +40,4 @@ unsigned int agent_request_passphrase(const char *path,
|
|||||||
agent_request_passphrase_func_t callback,
|
agent_request_passphrase_func_t callback,
|
||||||
struct l_dbus_message *message,
|
struct l_dbus_message *message,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
bool agent_request_cancel(unsigned int req_id);
|
bool agent_request_cancel(unsigned int req_id, int reason);
|
||||||
|
@ -645,11 +645,11 @@ bool network_register(struct network *network, const char *path)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void network_unregister(struct network *network)
|
static void network_unregister(struct network *network, int reason)
|
||||||
{
|
{
|
||||||
struct l_dbus *dbus = dbus_get_bus();
|
struct l_dbus *dbus = dbus_get_bus();
|
||||||
|
|
||||||
agent_request_cancel(network->agent_request);
|
agent_request_cancel(network->agent_request, reason);
|
||||||
network_settings_close(network);
|
network_settings_close(network);
|
||||||
|
|
||||||
l_dbus_unregister_object(dbus, network->object_path);
|
l_dbus_unregister_object(dbus, network->object_path);
|
||||||
@ -658,10 +658,10 @@ static void network_unregister(struct network *network)
|
|||||||
network->object_path = NULL;
|
network->object_path = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void network_remove(struct network *network)
|
void network_remove(struct network *network, int reason)
|
||||||
{
|
{
|
||||||
if (network->object_path)
|
if (network->object_path)
|
||||||
network_unregister(network);
|
network_unregister(network, reason);
|
||||||
|
|
||||||
l_queue_destroy(network->bss_list, NULL);
|
l_queue_destroy(network->bss_list, NULL);
|
||||||
l_free(network->psk);
|
l_free(network->psk);
|
||||||
|
@ -54,7 +54,7 @@ void network_bss_list_clear(struct network *network);
|
|||||||
|
|
||||||
bool network_register(struct network *network, const char *path);
|
bool network_register(struct network *network, const char *path);
|
||||||
|
|
||||||
void network_remove(struct network *network);
|
void network_remove(struct network *network, int reason);
|
||||||
|
|
||||||
void network_init();
|
void network_init();
|
||||||
void network_exit();
|
void network_exit();
|
||||||
|
@ -325,7 +325,7 @@ static void network_free(void *data)
|
|||||||
{
|
{
|
||||||
struct network *network = data;
|
struct network *network = data;
|
||||||
|
|
||||||
network_remove(network);
|
network_remove(network, -ESHUTDOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *device_get_path(struct device *device)
|
const char *device_get_path(struct device *device)
|
||||||
@ -1176,7 +1176,7 @@ static bool network_remove_if_lost(const void *key, void *data, void *user_data)
|
|||||||
|
|
||||||
l_debug("No remaining BSSs for SSID: %s -- Removing network",
|
l_debug("No remaining BSSs for SSID: %s -- Removing network",
|
||||||
network_get_ssid(network));
|
network_get_ssid(network));
|
||||||
network_remove(network);
|
network_remove(network, -ERANGE);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1253,7 +1253,7 @@ static void process_bss(struct device *device, struct scan_bss *bss)
|
|||||||
security);
|
security);
|
||||||
|
|
||||||
if (!network_register(network, path)) {
|
if (!network_register(network, path)) {
|
||||||
network_remove(network);
|
network_remove(network, -EINVAL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user