summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/resolver.h5
-rw-r--r--src/resolver.c11
2 files changed, 15 insertions, 1 deletions
diff --git a/include/resolver.h b/include/resolver.h
index 77a95cf0..5c023758 100644
--- a/include/resolver.h
+++ b/include/resolver.h
@@ -32,8 +32,13 @@ extern "C" {
* @short_description: Functions for registering resolver modules
*/
+#define CONNMAN_RESOLVER_PRIORITY_LOW -100
+#define CONNMAN_RESOLVER_PRIORITY_DEFAULT 0
+#define CONNMAN_RESOLVER_PRIORITY_HIGH 100
+
struct connman_resolver {
const char *name;
+ int priority;
};
extern int connman_resolver_register(struct connman_resolver *resolver);
diff --git a/src/resolver.c b/src/resolver.c
index 929fd2e5..a8132361 100644
--- a/src/resolver.c
+++ b/src/resolver.c
@@ -27,6 +27,14 @@
static GSList *resolver_list = NULL;
+static gint compare_priority(gconstpointer a, gconstpointer b)
+{
+ const struct connman_resolver *resolver1 = a;
+ const struct connman_resolver *resolver2 = b;
+
+ return resolver2->priority - resolver1->priority;
+}
+
/**
* connman_resolver_register:
* @resolver: resolver module
@@ -39,7 +47,8 @@ int connman_resolver_register(struct connman_resolver *resolver)
{
DBG("resolver %p name %s", resolver, resolver->name);
- resolver_list = g_slist_append(resolver_list, resolver);
+ resolver_list = g_slist_insert_sorted(resolver_list, resolver,
+ compare_priority);
return 0;
}