Пример #1
0
static void remove_entries(GSList *entries)
{
	GSList *list;

	for (list = entries; list; list = list->next) {
		struct entry_data *entry = list->data;

		entry_list = g_slist_remove(entry_list, entry);

		if (dnsproxy_enabled == TRUE) {
			__connman_dnsproxy_remove(entry->interface, entry->domain,
							entry->server);
		} else {
			__connman_resolvfile_remove(entry->interface, entry->domain,
							entry->server);
		}

		if (entry->timeout)
			g_source_remove(entry->timeout);
		g_free(entry->server);
		g_free(entry->domain);
		g_free(entry->interface);
		g_free(entry);
	}

	g_slist_free(entries);
}
Пример #2
0
int __connman_resolver_redo_servers(const char *interface)
{
	GSList *list;

	if (dnsproxy_enabled == FALSE)
		return 0;

	DBG("interface %s", interface);

	if (interface == NULL)
		return -EINVAL;

	for (list = entry_list; list; list = list->next) {
		struct entry_data *entry = list->data;

		if (entry->timeout == 0 ||
				g_strcmp0(entry->interface, interface) != 0)
			continue;

		/*
		 * This function must only check IPv6 server addresses so
		 * do not remove IPv4 name servers unnecessarily.
		 */
		if (entry->family != AF_INET6)
			continue;

		/*
		 * We remove the server, and then re-create so that it will
		 * use proper source addresses when sending DNS queries.
		 */
		__connman_dnsproxy_remove(entry->interface, entry->domain,
					entry->server);
		/*
		 * Remove also the resolver timer for the old server entry.
		 * A new timer will be set for the new server entry
		 * when the next Router Advertisement message arrives
		 * with RDNSS/DNSSL settings.
		 */
		g_source_remove(entry->timeout);
		entry->timeout = 0;

		__connman_dnsproxy_append(entry->interface, entry->domain,
					entry->server);
	}

	return 0;
}