/pidgin/main: dafefd7bb115: This should do it for the libpurple ...

Gary Kramlich <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: dafefd7bb1155f912c6315201d18f375fcc19ed4
Author:	 Gary Kramlich <[email protected]>
Date:	 2015-12-16 01:09 -0600
Branch:	 use-gresolver
URL: https://hg.pidgin.im/pidgin/main/rev/dafefd7bb115

Description:

This should do it for the libpurple dns stuff

diffstat:

 libpurple/stun.c |  92 ++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 57 insertions(+), 35 deletions(-)

diffs (157 lines):

diff --git a/libpurple/stun.c b/libpurple/stun.c
--- a/libpurple/stun.c
+++ b/libpurple/stun.c
@@ -29,6 +29,8 @@
 #include <sys/ioctl.h>
 #endif
 
+#include <gio/gio.h>
+
 /* Solaris */
 #if defined (__SVR4) && defined (__sun)
 #include <sys/sockio.h>
@@ -36,8 +38,6 @@
 
 #include "debug.h"
 #include "account.h"
-#include "dnsquery.h"
-#include "dnssrv.h"
 #include "network.h"
 #include "proxy.h"
 #include "stun.h"
@@ -283,10 +283,15 @@ static void reply_cb(gpointer data, gint
 }
 
 
-static void hbn_listen_cb(int fd, gpointer data) {
-	GSList *hosts = data;
+static void
+hbn_listen_cb(int fd, gpointer data) {
+	GList *addresses = data;
+	GInetAddress *address = NULL;
+	GSocketAddress *socket_address = NULL;
 	struct stun_conn *sc;
 	static struct stun_header hdr_data;
+#warning wrong
+	gint port = 12345;
 
 	if(fd < 0) {
 		nattype.status = PURPLE_STUN_STATUS_UNKNOWN;
@@ -304,15 +309,13 @@ static void hbn_listen_cb(int fd, gpoint
 
 	sc->incb = purple_input_add(fd, PURPLE_INPUT_READ, reply_cb, sc);
 
-	hosts = g_slist_delete_link(hosts, hosts);
-	memcpy(&(sc->addr), hosts->data, sizeof(struct sockaddr_in));
-	g_free(hosts->data);
-	hosts = g_slist_delete_link(hosts, hosts);
-	while (hosts) {
-		hosts = g_slist_delete_link(hosts, hosts);
-		g_free(hosts->data);
-		hosts = g_slist_delete_link(hosts, hosts);
-	}
+	address = G_INET_ADDRESS(addresses->data);
+	socket_address = g_inet_socket_address_new(address, port);
+
+	g_socket_address_to_native(socket_address, &(sc->addr), g_socket_address_get_native_size(socket_address), NULL);
+	g_object_unref(G_OBJECT(address));
+	g_object_unref(G_OBJECT(socket_address));
+	g_resolver_free_addresses(addresses);
 
 	hdr_data.type = htons(MSGTYPE_BINDINGREQUEST);
 	hdr_data.len = 0;
@@ -336,44 +339,57 @@ static void hbn_listen_cb(int fd, gpoint
 	sc->timeout = purple_timeout_add(500, (GSourceFunc) timeoutfunc, sc);
 }
 
-static void hbn_cb(GSList *hosts, gpointer data, const char *error_message) {
+static void
+hbn_cb(GObject *sender, GAsyncResult *res, gpointer data) {
+	GList *addresses = NULL;
+	GError *error = NULL;
 
-	if(!hosts || !hosts->data) {
+	addresses = g_resolver_lookup_by_name_finish(g_resolver_get_default(), res, &error);
+	if(error != NULL) {
 		nattype.status = PURPLE_STUN_STATUS_UNDISCOVERED;
 		nattype.lookup_time = time(NULL);
+
 		do_callbacks();
+
 		return;
 	}
 
-	if (!purple_network_listen_range(12108, 12208, AF_UNSPEC, SOCK_DGRAM, TRUE, hbn_listen_cb, hosts)) {
-		while (hosts) {
-			hosts = g_slist_delete_link(hosts, hosts);
-			g_free(hosts->data);
-			hosts = g_slist_delete_link(hosts, hosts);
-		}
-
+	if (!purple_network_listen_range(12108, 12208, AF_UNSPEC, SOCK_DGRAM, TRUE, hbn_listen_cb, addresses)) {
 		nattype.status = PURPLE_STUN_STATUS_UNKNOWN;
 		nattype.lookup_time = time(NULL);
+
 		do_callbacks();
+
 		return;
 	}
-
-
 }
 
-static void do_test1(PurpleSrvResponse *resp, int results, gpointer sdata) {
-	const char *servername = sdata;
+static void
+do_test1(GObject *sender, GAsyncResult *res, gpointer data) {
+	GList *services = NULL;
+	GError *error = NULL;
+	const char *servername = data;
 	int port = 3478;
 
-	if(results) {
-		servername = resp[0].hostname;
-		port = resp[0].port;
+	services = g_resolver_lookup_service_finish(g_resolver_get_default(), res, &error);
+	if(error != NULL) {
+		purple_debug_info("stun", "Failed to look up srv record : %s\n", error->message);
+
+		g_error_free(error);
+	} else {
+		servername = g_srv_target_get_hostname((GSrvTarget *)services->data);
+		port = g_srv_target_get_port((GSrvTarget *)services->data);
 	}
-	purple_debug_info("stun", "got %d SRV responses, server: %s, port: %d\n",
-		results, servername, port);
 
-	purple_dnsquery_a(NULL, servername, port, hbn_cb, NULL);
-	g_free(resp);
+	purple_debug_info("stun", "connecting to %s:%d\n", servername, port);
+
+	g_resolver_lookup_by_name_async(g_resolver_get_default(),
+	                                servername,
+	                                NULL,
+	                                hbn_cb,
+	                                GINT_TO_POINTER(port));
+
+	g_resolver_free_targets(services);
 }
 
 static gboolean call_callback(gpointer data) {
@@ -431,8 +447,14 @@ PurpleStunNatDiscovery *purple_stun_disc
 	nattype.servername = g_strdup(servername);
 
 	callbacks = g_slist_append(callbacks, cb);
-	purple_srv_resolve(NULL, "stun", "udp", servername, do_test1,
-		(gpointer) servername);
+
+	g_resolver_lookup_service_async(g_resolver_get_default(),
+	                                "stun",
+	                                "udp",
+	                                servername,
+	                                NULL,
+	                                do_test1,
+	                                (gpointer)servername);
 
 	return &nattype;
 }

_______________________________________________
Commits mailing list
[email protected]
https://pidgin.im/cgi-bin/mailman/listinfo/commits
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.