diff options
author | Daniel Atallah <datallah@pidgin.im> | 2011-04-19 04:58:17 +0000 |
---|---|---|
committer | Daniel Atallah <datallah@pidgin.im> | 2011-04-19 04:58:17 +0000 |
commit | 707f59c48aafeac94d3d082aa271bcb9da908fb5 (patch) | |
tree | c47f9ab4cc0dc4a6cfb7726f815b6ae711cfbf4f /libpurple/proxy.c | |
parent | a839a67ed13936caa1b32828117f72bf5b0b7185 (diff) | |
download | pidgin-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.c | 27 |
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) |