Mercurial > pidgin
changeset 11429:835dbb1b3337
[gaim-migrate @ 13666]
use async dns
committer: Tailor Script <tailor@pidgin.im>
author | Thomas Butter <tbutter> |
---|---|
date | Fri, 02 Sep 2005 19:48:26 +0000 |
parents | c39a48818f66 |
children | 4b7087777411 |
files | src/stun.c |
diffstat | 1 files changed, 29 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/stun.c Fri Sep 02 19:47:18 2005 +0000 +++ b/src/stun.c Fri Sep 02 19:48:26 2005 +0000 @@ -41,6 +41,7 @@ #include "debug.h" #include "account.h" #include "dnssrv.h" +#include "proxy.h" #include "stun.h" #include "prefs.h" @@ -173,23 +174,12 @@ } } -static void do_test1(struct srv_response *resp, int results, gpointer sdata) { - char *servername = (char*)sdata; +static void hbn_cb(GSList *hosts, gpointer edata, const char *error_message) { static struct stun_header data; - int port = 3478; int ret; - struct hostent *host; - - if(results) { - servername = resp[0].hostname; - port = resp[0].port; - } - gaim_debug_info("stun", "got %d SRV responses, server: %s, port: %d\n", results, servername, port); - host = gethostbyname(servername); - if(!host->h_addr_list) { - return; - } + if(!hosts) return; + if(!hosts->data) return; if((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { nattype.status = 0; @@ -209,11 +199,18 @@ return; } incb = gaim_input_add(fd, GAIM_INPUT_READ, reply_cb, NULL); - - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - memcpy(&addr.sin_addr.s_addr,*(host->h_addr_list),4); + ret = GPOINTER_TO_INT(hosts->data); + hosts = g_slist_remove(hosts, hosts->data); + memcpy(&addr, hosts->data, sizeof(struct sockaddr_in)); + g_free(hosts->data); + hosts = g_slist_remove(hosts, hosts->data); + while(hosts) { + hosts = g_slist_remove(hosts, hosts->data); + g_free(hosts->data); + hosts = g_slist_remove(hosts, hosts->data); + } + data.type = htons(0x0001); data.len = 0; data.transid[0] = rand(); @@ -230,11 +227,24 @@ packet = &data; packetsize = sizeof(struct stun_header); timeout = gaim_timeout_add(500, (GSourceFunc)timeoutfunc, NULL); +} + +static void do_test1(struct srv_response *resp, int results, gpointer sdata) { + char *servername = (char*)sdata; + int port = 3478; + + if(results) { + servername = resp[0].hostname; + port = resp[0].port; + } + gaim_debug_info("stun", "got %d SRV responses, server: %s, port: %d\n", results, servername, port); + + gaim_gethostbyname_async(servername, port, hbn_cb, NULL); g_free(resp); } struct stun_nattype *gaim_stun_discover(StunCallback cb) { - const char *servername = gaim_prefs_get_string("/core/network/stun_server"); + char *servername = (char*)gaim_prefs_get_string("/core/network/stun_server"); gaim_debug_info("stun", "using server %s\n", servername); if(nattype.status == 1) { /* currently discovering */