Mercurial > pidgin
changeset 14183:c3c792958635
[gaim-migrate @ 16835]
Change the DNS query function to return a struct that will eventually
allow the query to be canceled. Also rename two of the DNS query things
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Fri, 18 Aug 2006 07:40:17 +0000 |
parents | ccb670ba3b4f |
children | bf7a02c6bb00 |
files | src/dnsquery.c src/dnsquery.h src/protocols/simple/simple.c src/proxy.c src/stun.c |
diffstat | 5 files changed, 41 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dnsquery.c Fri Aug 18 07:22:55 2006 +0000 +++ b/src/dnsquery.c Fri Aug 18 07:40:17 2006 +0000 @@ -35,6 +35,9 @@ * DNS query API **************************************************************************/ +struct _GaimDnsQueryData { +}; + #if defined(__unix__) || defined(__APPLE__) #define MAX_DNS_CHILDREN 4 @@ -46,7 +49,7 @@ typedef struct { char *host; int port; - GaimProxyDnsConnectFunction callback; + GaimDnsQueryConnectFunction callback; gpointer data; guint inpa; int fd_in, fd_out; @@ -65,7 +68,7 @@ typedef struct { dns_params_t params; - GaimProxyDnsConnectFunction callback; + GaimDnsQueryConnectFunction callback; gpointer data; } queued_dns_request_t; @@ -473,8 +476,8 @@ * End the functions for dealing with the DNS child processes. */ -int -gaim_gethostbyname_async(const char *hostname, int port, GaimProxyDnsConnectFunction callback, gpointer data) +GaimDnsQueryData * +gaim_dnsquery_a(const char *hostname, int port, GaimDnsQueryConnectFunction callback, gpointer data) { pending_dns_request_t *req = NULL; dns_params_t dns_params; @@ -521,14 +524,14 @@ gaim_debug_info("dns", "DNS query for '%s' queued\n", dns_params.hostname); - return 0; + return (GaimDnsQueryData *)1; } req = gaim_dns_new_resolverthread(show_debug); if (req == NULL) { gaim_debug_error("proxy", "oh dear, this is going to explode, I give up\n"); - return -1; + return NULL; } send_dns_request_to_child(req, &dns_params); } @@ -539,7 +542,7 @@ req->data = data; req->inpa = gaim_input_add(req->fd_out, GAIM_INPUT_READ, host_resolved, req); - return 0; + return (GaimDnsQueryData *)1; } #elif defined _WIN32 /* end __unix__ || __APPLE__ */ @@ -547,7 +550,7 @@ typedef struct _dns_tdata { char *hostname; int port; - GaimProxyDnsConnectFunction callback; + GaimDnsQueryConnectFunction callback; gpointer data; GSList *hosts; char *errmsg; @@ -621,9 +624,9 @@ return 0; } -int -gaim_gethostbyname_async(const char *hostname, int port, - GaimProxyDnsConnectFunction callback, gpointer data) +GaimDnsQueryData * +gaim_dnsquery_a(const char *hostname, int port, + GaimDnsQueryConnectFunction callback, gpointer data) { dns_tdata *td; struct sockaddr_in sin; @@ -636,7 +639,7 @@ hosts = g_slist_append(hosts, GINT_TO_POINTER(sizeof(sin))); hosts = g_slist_append(hosts, g_memdup(&sin, sizeof(sin))); callback(hosts, data, NULL); - return 0; + return (GaimDnsQueryData *)1; } gaim_debug_info("dns", "DNS Lookup for: %s\n", hostname); @@ -651,9 +654,9 @@ g_error_free(err); g_free(td->hostname); g_free(td); - return -1; + return NULL; } - return 0; + return (GaimDnsQueryData *)1; } #else /* not __unix__ or __APPLE__ or _WIN32 */ @@ -662,7 +665,7 @@ gpointer data; size_t addrlen; struct sockaddr *addr; - GaimProxyDnsConnectFunction callback; + GaimDnsQueryConnectFunction callback; } pending_dns_request_t; static gboolean host_resolved(gpointer data) @@ -676,9 +679,9 @@ return FALSE; } -int -gaim_gethostbyname_async(const char *hostname, int port, - GaimProxyDnsConnectFunction callback, gpointer data) +GaimDnsQueryData * +gaim_dnsquery_a(const char *hostname, int port, + GaimDnsQueryConnectFunction callback, gpointer data) { struct sockaddr_in sin; pending_dns_request_t *req; @@ -689,7 +692,7 @@ gaim_debug_error("dns", "gaim_gethostbyname(\"%s\", %d) failed: %d\n", hostname, port, h_errno); - return -1; + return NULL; } memset(&sin, 0, sizeof(struct sockaddr_in)); memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); @@ -704,7 +707,7 @@ req->data = data; req->callback = callback; gaim_timeout_add(10, host_resolved, req); - return 0; + return (GaimDnsQueryData *)1; } #endif /* not __unix__ or __APPLE__ or _WIN32 */
--- a/src/dnsquery.h Fri Aug 18 07:22:55 2006 +0000 +++ b/src/dnsquery.h Fri Aug 18 07:40:17 2006 +0000 @@ -28,11 +28,13 @@ #include <glib.h> #include "eventloop.h" +typedef struct _GaimDnsQueryData GaimDnsQueryData; + /** * The "hosts" parameter is a linked list containing pairs of * one size_t addrlen and one struct sockaddr *addr. */ -typedef void (*GaimProxyDnsConnectFunction)(GSList *hosts, gpointer data, const char *error_message); +typedef void (*GaimDnsQueryConnectFunction)(GSList *hosts, gpointer data, const char *error_message); #include "account.h" @@ -54,9 +56,11 @@ * @param callback Callback to call after resolving * @param data Extra data for the callback function * - * @return Zero indicates the connection is pending. Any other value indicates failure. + * @return NULL if there was an error, otherwise return a reference to + * a data structure that can be used to cancel the pending + * DNS query, if needed. */ -int gaim_gethostbyname_async(const char *hostname, int port, GaimProxyDnsConnectFunction callback, gpointer data); +GaimDnsQueryData *gaim_dnsquery_a(const char *hostname, int port, GaimDnsQueryConnectFunction callback, gpointer data); /*@}*/
--- a/src/protocols/simple/simple.c Fri Aug 18 07:22:55 2006 +0000 +++ b/src/protocols/simple/simple.c Fri Aug 18 07:40:17 2006 +0000 @@ -1622,7 +1622,7 @@ } else { /* UDP */ gaim_debug_info("simple", "using udp with server %s and port %d\n", hostname, port); - gaim_gethostbyname_async(hostname, port, simple_udp_host_resolved, sip); + gaim_dnsquery_a(hostname, port, simple_udp_host_resolved, sip); } }
--- a/src/proxy.c Fri Aug 18 07:22:55 2006 +0000 +++ b/src/proxy.c Fri Aug 18 07:40:17 2006 +0000 @@ -47,6 +47,7 @@ int fd; guint inpa; GaimProxyInfo *gpi; + GaimDnsQueryData *query_data; /** * This contains alternating length/char* values. The char* @@ -1695,8 +1696,9 @@ return NULL; } - if (gaim_gethostbyname_async(connecthost, - connectport, connection_host_resolved, connect_info) != 0) + connect_info->query_data = gaim_dnsquery_a(connecthost, + connectport, connection_host_resolved, connect_info); + if (connect_info->query_data == NULL) { gaim_proxy_connect_info_destroy(connect_info); return NULL; @@ -1728,8 +1730,11 @@ connect_info->port = port; connect_info->gpi = gpi; - if (gaim_gethostbyname_async(gaim_proxy_info_get_host(gpi), - gaim_proxy_info_get_port(gpi), connection_host_resolved, connect_info) != 0) + connect_info->query_data = + gaim_dnsquery_a(gaim_proxy_info_get_host(gpi), + gaim_proxy_info_get_port(gpi), + connection_host_resolved, connect_info); + if (connect_info->query_data == NULL) { gaim_proxy_connect_info_destroy(connect_info); return NULL;
--- a/src/stun.c Fri Aug 18 07:22:55 2006 +0000 +++ b/src/stun.c Fri Aug 18 07:40:17 2006 +0000 @@ -360,7 +360,7 @@ gaim_debug_info("stun", "got %d SRV responses, server: %s, port: %d\n", results, servername, port); - gaim_gethostbyname_async(servername, port, hbn_cb, NULL); + gaim_dnsquery_a(servername, port, hbn_cb, NULL); g_free(resp); }