diff libpurple/dnsquery.c @ 31930:0eceb1304f53

Add new DNS-related API to perform lookups in the context of an account. Combined with the new "Tor/Privacy" proxy setting, this allows us to prevent DNS lookups when the user has selected a proxy that they may want to use to for privacy. Refs #11110
author Daniel Atallah <daniel.atallah@gmail.com>
date Tue, 19 Apr 2011 04:58:17 +0000
parents 68a1efda3654
children 92f3d821653f
line wrap: on
line diff
--- a/libpurple/dnsquery.c	Tue Apr 19 04:41:59 2011 +0000
+++ b/libpurple/dnsquery.c	Tue Apr 19 04:58:17 2011 +0000
@@ -54,6 +54,7 @@
 	PurpleDnsQueryConnectFunction callback;
 	gpointer data;
 	guint timeout;
+	PurpleAccount *account;
 
 #if defined(PURPLE_DNSQUERY_USE_FORK)
 	PurpleDnsQueryResolverProcess *resolver;
@@ -861,6 +862,7 @@
 initiate_resolving(gpointer data)
 {
 	PurpleDnsQueryData *query_data;
+	PurpleProxyType proxy_type;
 
 	query_data = data;
 	query_data->timeout = 0;
@@ -869,6 +871,14 @@
 		/* resolve_ip calls purple_dnsquery_resolved */
 		return FALSE;
 
+	proxy_type = purple_proxy_info_get_type(
+		purple_proxy_get_setup(query_data->account));
+	if (proxy_type == PURPLE_PROXY_TOR) {
+		purple_dnsquery_failed(query_data,
+			_("Aborting DNS lookup in Tor Proxy mode."));
+		return FALSE;
+	}
+
 	if (purple_dnsquery_ui_resolve(query_data))
 		/* The UI is handling the resolve; we're done */
 		return FALSE;
@@ -878,9 +888,8 @@
 	return FALSE;
 }
 
-
 PurpleDnsQueryData *
-purple_dnsquery_a(const char *hostname, int port,
+purple_dnsquery_a_account(PurpleAccount *account, const char *hostname, int port,
 				PurpleDnsQueryConnectFunction callback, gpointer data)
 {
 	PurpleDnsQueryData *query_data;
@@ -897,6 +906,7 @@
 	query_data->port = port;
 	query_data->callback = callback;
 	query_data->data = data;
+	query_data->account = account;
 
 	if (*query_data->hostname == '\0')
 	{
@@ -909,6 +919,12 @@
 	return query_data;
 }
 
+PurpleDnsQueryData *
+purple_dnsquery_a(const char *hostname, int port,
+				PurpleDnsQueryConnectFunction callback, gpointer data)
+{
+	return purple_dnsquery_a_account(NULL, hostname, port, callback, data);
+}
 
 void
 purple_dnsquery_destroy(PurpleDnsQueryData *query_data)