summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Laakkonen <jussi.laakkonen@jolla.com>2022-02-25 12:57:59 +0200
committerDaniel Wagner <wagi@monom.org>2022-02-27 18:56:55 +0100
commit3d9b90e89f1ee44e3d8b1bcf52c9bd12f9078334 (patch)
treebd800b7995866ba40fe0c40f447976e68152b271
parentb73b043e255bb30364ef1a4f603bcc5ac0b979b0 (diff)
downloadconnman-3d9b90e89f1ee44e3d8b1bcf52c9bd12f9078334.tar.gz
agent: Add support to check for active pending requests
This adds a simple search to agent.c that can be used via agent-connman.c to check if there is a pending request for the service. Both current active pending request for the agent is checked as well as the list of the queries for the given user context.
-rw-r--r--include/agent.h1
-rw-r--r--src/agent-connman.c14
-rw-r--r--src/agent.c22
-rw-r--r--src/connman.h2
4 files changed, 39 insertions, 0 deletions
diff --git a/include/agent.h b/include/agent.h
index 6961f7a1..27020203 100644
--- a/include/agent.h
+++ b/include/agent.h
@@ -71,6 +71,7 @@ int connman_agent_queue_message(void *user_context,
DBusMessage *msg, int timeout,
agent_queue_cb callback, void *user_data,
void *agent_data);
+bool connman_agent_queue_search(void *user_context, void *agent_data);
void *connman_agent_get_info(const char *dbus_sender, const char **sender,
const char **path);
diff --git a/src/agent-connman.c b/src/agent-connman.c
index fca7cc1f..2bd33e04 100644
--- a/src/agent-connman.c
+++ b/src/agent-connman.c
@@ -865,3 +865,17 @@ int __connman_agent_request_peer_authorization(struct connman_peer *peer,
return -EINPROGRESS;
}
+
+bool __connman_agent_is_request_pending(struct connman_service *service,
+ const char *dbus_sender)
+{
+ void *agent;
+
+ /* Default agent will be returned if no dbus_sender */
+ agent = connman_agent_get_info(dbus_sender, NULL, NULL);
+
+ if (!service || !agent)
+ return false;
+
+ return connman_agent_queue_search(service, agent);
+}
diff --git a/src/agent.c b/src/agent.c
index d4f9add4..23517d9b 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -257,6 +257,28 @@ int connman_agent_queue_message(void *user_context,
return err;
}
+bool connman_agent_queue_search(void *user_context, void *agent_data)
+{
+ struct connman_agent *agent = agent_data;
+ struct connman_agent_request *queue_data;
+ GList *iter;
+
+ if (!agent || !user_context)
+ return false;
+
+ if (agent->pending && agent->pending->user_context == user_context)
+ return true;
+
+ for (iter = agent->queue; iter; iter = iter->next) {
+ queue_data = iter->data;
+
+ if (queue_data && queue_data->user_context == user_context)
+ return true;
+ }
+
+ return false;
+}
+
static void set_default_agent(void)
{
struct connman_agent *agent = NULL;
diff --git a/src/connman.h b/src/connman.h
index 909b53ae..33dbec69 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -126,6 +126,8 @@ int __connman_agent_request_peer_authorization(struct connman_peer *peer,
bool wps_requested,
const char *dbus_sender,
void *user_data);
+bool __connman_agent_is_request_pending(struct connman_service *service,
+ const char *dbus_sender);
#include <connman/log.h>