summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2010-07-23 17:47:24 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2010-07-26 12:21:21 +0200
commita7410b7b879e3875096f33452506fa521e0b3917 (patch)
tree123479487c65c9a30146e82b5cfc6f9df8476e19
parent06cf2e1b5bd7368b6dbcd7708c066a892a1c2114 (diff)
downloadconnman-a7410b7b879e3875096f33452506fa521e0b3917.tar.gz
connman-a7410b7b879e3875096f33452506fa521e0b3917.tar.bz2
connman-a7410b7b879e3875096f33452506fa521e0b3917.zip
Add a resolver flush method
The flush method sends any pending resolving requests. A resolver can queue requests to some pending list when e.g. it knows ConnMan is offline.
-rw-r--r--include/resolver.h3
-rw-r--r--src/resolver.c21
-rw-r--r--src/service.c2
3 files changed, 26 insertions, 0 deletions
diff --git a/include/resolver.h b/include/resolver.h
index 3b274c9f..ae77039e 100644
--- a/include/resolver.h
+++ b/include/resolver.h
@@ -41,6 +41,8 @@ int connman_resolver_remove_all(const char *interface);
int connman_resolver_append_public_server(const char *server);
int connman_resolver_remove_public_server(const char *server);
+void connman_resolver_flush(void);
+
#define CONNMAN_RESOLVER_PRIORITY_LOW -100
#define CONNMAN_RESOLVER_PRIORITY_DEFAULT 0
#define CONNMAN_RESOLVER_PRIORITY_HIGH 100
@@ -52,6 +54,7 @@ struct connman_resolver {
const char *server);
int (*remove) (const char *interface, const char *domain,
const char *server);
+ void (*flush) (void);
};
int connman_resolver_register(struct connman_resolver *resolver);
diff --git a/src/resolver.c b/src/resolver.c
index 5caf7a85..f3faacdf 100644
--- a/src/resolver.c
+++ b/src/resolver.c
@@ -291,6 +291,27 @@ int connman_resolver_remove_public_server(const char *server)
return connman_resolver_remove(NULL, NULL, server);
}
+/**
+ * connman_resolver_flush:
+ *
+ * Flush pending resolver requests
+ */
+void connman_resolver_flush(void)
+{
+ GSList *list;
+
+ for (list = resolver_list; list; list = list->next) {
+ struct connman_resolver *resolver = list->data;
+
+ if (resolver->flush == NULL)
+ continue;
+
+ resolver->flush();
+ }
+
+ return;
+}
+
static int selftest_append(const char *interface, const char *domain,
const char *server)
{
diff --git a/src/service.c b/src/service.c
index d1309587..038d1a08 100644
--- a/src/service.c
+++ b/src/service.c
@@ -340,6 +340,8 @@ static void update_nameservers(struct connman_service *service)
service->nameservers[i]);
} else if (service->nameserver != NULL)
connman_resolver_append(ifname, NULL, service->nameserver);
+
+ connman_resolver_flush();
}
void __connman_service_append_nameserver(struct connman_service *service,