Add a resolver flush method
authorSamuel Ortiz <sameo@linux.intel.com>
Fri, 23 Jul 2010 15:47:24 +0000 (17:47 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 26 Jul 2010 10:21:21 +0000 (12:21 +0200)
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.

include/resolver.h
src/resolver.c
src/service.c

index 3b274c9..ae77039 100644 (file)
@@ -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);
index 5caf7a8..f3faacd 100644 (file)
@@ -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)
 {
index d130958..038d1a0 100644 (file)
@@ -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,