summaryrefslogtreecommitdiff
path: root/libpurple/proxy.c
diff options
context:
space:
mode:
authorDaniel Atallah <datallah@pidgin.im>2011-04-19 04:58:17 +0000
committerDaniel Atallah <datallah@pidgin.im>2011-04-19 04:58:17 +0000
commit707f59c48aafeac94d3d082aa271bcb9da908fb5 (patch)
treec47f9ab4cc0dc4a6cfb7726f815b6ae711cfbf4f /libpurple/proxy.c
parenta839a67ed13936caa1b32828117f72bf5b0b7185 (diff)
downloadpidgin-707f59c48aafeac94d3d082aa271bcb9da908fb5.tar.gz
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
Diffstat (limited to 'libpurple/proxy.c')
-rw-r--r--libpurple/proxy.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/libpurple/proxy.c b/libpurple/proxy.c
index 0c1b0e3bcc..2ff562b41a 100644
--- a/libpurple/proxy.c
+++ b/libpurple/proxy.c
@@ -69,6 +69,7 @@ struct _PurpleProxyConnectData {
guchar *read_buffer;
gsize read_buf_len;
gsize read_len;
+ PurpleAccount *account;
};
static const char * const socks5errors[] = {
@@ -1367,7 +1368,8 @@ s4_canwrite(gpointer data, gint source, PurpleInputCondition cond)
proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
} else {
- connect_data->query_data = purple_dnsquery_a(connect_data->host,
+ connect_data->query_data = purple_dnsquery_a_account(
+ connect_data->account, connect_data->host,
connect_data->port, s4_host_resolved, connect_data);
if (connect_data->query_data == NULL) {
@@ -2282,6 +2284,7 @@ purple_proxy_connect(void *handle, PurpleAccount *account,
connect_data->host = g_strdup(host);
connect_data->port = port;
connect_data->gpi = purple_proxy_get_setup(account);
+ connect_data->account = account;
if ((purple_proxy_info_get_type(connect_data->gpi) != PURPLE_PROXY_NONE) &&
(purple_proxy_info_get_host(connect_data->gpi) == NULL ||
@@ -2313,7 +2316,7 @@ purple_proxy_connect(void *handle, PurpleAccount *account,
return NULL;
}
- connect_data->query_data = purple_dnsquery_a(connecthost,
+ connect_data->query_data = purple_dnsquery_a_account(account, connecthost,
connectport, connection_host_resolved, connect_data);
if (connect_data->query_data == NULL)
{
@@ -2349,6 +2352,7 @@ purple_proxy_connect_udp(void *handle, PurpleAccount *account,
connect_data->host = g_strdup(host);
connect_data->port = port;
connect_data->gpi = purple_proxy_get_setup(account);
+ connect_data->account = account;
if ((purple_proxy_info_get_type(connect_data->gpi) != PURPLE_PROXY_NONE) &&
(purple_proxy_info_get_host(connect_data->gpi) == NULL ||
@@ -2380,7 +2384,7 @@ purple_proxy_connect_udp(void *handle, PurpleAccount *account,
return NULL;
}
- connect_data->query_data = purple_dnsquery_a(connecthost,
+ connect_data->query_data = purple_dnsquery_a_account(account, connecthost,
connectport, connection_host_resolved, connect_data);
if (connect_data->query_data == NULL)
{
@@ -2402,6 +2406,19 @@ purple_proxy_connect_socks5(void *handle, PurpleProxyInfo *gpi,
PurpleProxyConnectFunction connect_cb,
gpointer data)
{
+ return purple_proxy_connect_socks5_account(NULL, handle, gpi,
+ host, port, connect_cb, data);
+}
+/*
+ * Combine some of this code with purple_proxy_connect()
+ */
+PurpleProxyConnectData *
+purple_proxy_connect_socks5_account(void *handle, PurpleAccount *account,
+ PurpleProxyInfo *gpi,
+ const char *host, int port,
+ PurpleProxyConnectFunction connect_cb,
+ gpointer data)
+{
PurpleProxyConnectData *connect_data;
g_return_val_if_fail(host != NULL, NULL);
@@ -2417,9 +2434,11 @@ purple_proxy_connect_socks5(void *handle, PurpleProxyInfo *gpi,
connect_data->host = g_strdup(host);
connect_data->port = port;
connect_data->gpi = gpi;
+ connect_data->account = account;
connect_data->query_data =
- purple_dnsquery_a(purple_proxy_info_get_host(gpi),
+ purple_dnsquery_a_account(account,
+ purple_proxy_info_get_host(gpi),
purple_proxy_info_get_port(gpi),
connection_host_resolved, connect_data);
if (connect_data->query_data == NULL)