*
* Connection Manager
*
- * Copyright (C) 2007-2008 Intel Corporation. All rights reserved.
+ * Copyright (C) 2007-2009 Intel Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
#include <config.h>
#endif
+#include <errno.h>
+#include <unistd.h>
#include <stdlib.h>
+#define CONNMAN_API_SUBJECT_TO_CHANGE
#include <connman/plugin.h>
-#include <connman/driver.h>
+#include <connman/resolver.h>
#include <connman/log.h>
-static int resolvconf_probe(struct connman_element *element)
+#include <glib.h>
+
+static int resolvconf_append(const char *interface, const char *domain,
+ const char *server)
{
- const char *nameserver = NULL;
- struct connman_element *internet;
- gchar *cmd;
+ char *cmd;
int err;
- DBG("element %p name %s", element, element->name);
-
- connman_element_get_value(element,
- CONNMAN_PROPERTY_TYPE_IPV4_NAMESERVER, &nameserver);
+ DBG("interface %s server %s", interface, server);
- if (nameserver == NULL)
- return -EINVAL;
+ if (access(RESOLVCONF, X_OK) < 0)
+ return -errno;
- cmd = g_strdup_printf("echo \"nameserver %s\" | resolvconf -a %s",
- nameserver, element->netdev.name);
+ cmd = g_strdup_printf("echo \"nameserver %s\" | %s -a %s",
+ server, RESOLVCONF, interface);
DBG("%s", cmd);
g_free(cmd);
- internet = connman_element_create();
-
- internet->type = CONNMAN_ELEMENT_TYPE_INTERNET;
-
- connman_element_set_data(element, internet);
-
- connman_element_register(internet, element);
-
- return 0;
+ return err;
}
-static void resolvconf_remove(struct connman_element *element)
+static int resolvconf_remove(const char *interface, const char *domain,
+ const char *server)
{
- struct connman_element *internet = connman_element_get_data(element);
- gchar *cmd;
+ char *cmd;
int err;
- DBG("element %p name %s", element, element->name);
+ DBG("interface %s server %s", interface, server);
- DBG("element %p name %s", element, element->name);
-
- connman_element_set_data(element, NULL);
-
- connman_element_unregister(internet);
-
- connman_element_unref(internet);
-
- cmd = g_strdup_printf("resolvconf -d %s", element->netdev.name);
+ cmd = g_strdup_printf("%s -d %s", RESOLVCONF, interface);
DBG("%s", cmd);
err = system(cmd);
g_free(cmd);
+
+ return err;
}
-static struct connman_driver resolvconf_driver = {
+static struct connman_resolver resolvconf_resolver = {
.name = "resolvconf",
- .type = CONNMAN_ELEMENT_TYPE_RESOLVER,
- .probe = resolvconf_probe,
+ .priority = CONNMAN_RESOLVER_PRIORITY_DEFAULT,
+ .append = resolvconf_append,
.remove = resolvconf_remove,
};
static int resolvconf_init(void)
{
- return connman_driver_register(&resolvconf_driver);
+ return connman_resolver_register(&resolvconf_resolver);
}
static void resolvconf_exit(void)
{
- connman_driver_unregister(&resolvconf_driver);
+ connman_resolver_unregister(&resolvconf_resolver);
}
-CONNMAN_PLUGIN_DEFINE("resolvconf", "Name resolver plugin", VERSION,
- resolvconf_init, resolvconf_exit)
+CONNMAN_PLUGIN_DEFINE(resolvconf, "Name resolver plugin", VERSION,
+ CONNMAN_PLUGIN_PRIORITY_DEFAULT, resolvconf_init, resolvconf_exit)