From 337a03ba69b4eaf885aab58e3a997607083976b6 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 28 Nov 2009 17:27:02 +0100 Subject: [PATCH] Disable DNS proxy handling when in offline mode --- plugins/dnsproxy.c | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/plugins/dnsproxy.c b/plugins/dnsproxy.c index ff7ce8a..77fcdeb 100644 --- a/plugins/dnsproxy.c +++ b/plugins/dnsproxy.c @@ -33,6 +33,7 @@ #define CONNMAN_API_SUBJECT_TO_CHANGE #include #include +#include #include #include @@ -79,6 +80,7 @@ struct server_data { char *server; GIOChannel *channel; guint watch; + gboolean enabled; }; struct request_data { @@ -267,6 +269,9 @@ static struct server_data *create_server(const char *interface, data->domain = g_strdup(domain); data->server = g_strdup(server); + /* Enable new servers by default */ + data->enabled = TRUE; + return data; } @@ -332,6 +337,24 @@ static struct connman_resolver dnsproxy_resolver = { .remove = dnsproxy_remove, }; +static void dnsproxy_offline_mode(connman_bool_t enabled) +{ + GSList *list; + + DBG("enabled %d", enabled); + + for (list = server_list; list; list = list->next) { + struct server_data *data = list->data; + + data->enabled = enabled ? FALSE : TRUE; + } +} + +static struct connman_notifier dnsproxy_notifier = { + .name = "dnsproxy", + .offline_mode = dnsproxy_offline_mode, +}; + static int parse_request(unsigned char *buf, int len, char *name, unsigned int size) { @@ -542,7 +565,11 @@ static gboolean listener_event(GIOChannel *channel, GIOCondition condition, for (list = server_list; list; list = list->next) { struct server_data *data = list->data; - DBG("server %s domain %s", data->server, data->domain); + DBG("server %s domain %s enabled %d", + data->server, data->domain, data->enabled); + + if (data->enabled == FALSE) + continue; sk = g_io_channel_unix_get_fd(data->channel); @@ -671,16 +698,30 @@ static int dnsproxy_init(void) err = connman_resolver_register(&dnsproxy_resolver); if (err < 0) - destroy_listener(); + goto destroy; + + err = connman_notifier_register(&dnsproxy_notifier); + if (err < 0) + goto unregister; + + return 0; + +unregister: + connman_resolver_unregister(&dnsproxy_resolver); + +destroy: + destroy_listener(); return err; } static void dnsproxy_exit(void) { - destroy_listener(); + connman_notifier_unregister(&dnsproxy_notifier); connman_resolver_unregister(&dnsproxy_resolver); + + destroy_listener(); } CONNMAN_PLUGIN_DEFINE(dnsproxy, "DNS proxy resolver plugin", VERSION, -- 2.7.4