/pidgin/main: 703722d83214: Update network.c for the dns code re...

Gary Kramlich <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 703722d83214ddf479c2e4192486ce40cdb6d1d1
Author:	 Gary Kramlich <[email protected]>
Date:	 2015-12-15 22:04 -0600
Branch:	 use-gresolver
URL: https://hg.pidgin.im/pidgin/main/rev/703722d83214

Description:

Update network.c for the dns code removal

diffstat:

 libpurple/network.c |  81 +++++++++++++++++++++++++++++++---------------------
 1 files changed, 48 insertions(+), 33 deletions(-)

diffs (129 lines):

diff --git a/libpurple/network.c b/libpurple/network.c
--- a/libpurple/network.c
+++ b/libpurple/network.c
@@ -21,6 +21,8 @@
 
 #include "internal.h"
 
+#include <gio/gio.h>
+
 #ifndef _WIN32
 #include <arpa/nameser.h>
 #include <resolv.h>
@@ -46,7 +48,6 @@
 #include "prefs.h"
 #include "stun.h"
 #include "upnp.h"
-#include "dnsquery.h"
 
 #ifdef USE_IDN
 #include <idna.h>
@@ -976,41 +977,40 @@ nm_dbus_name_owner_changed_cb(DBusGProxy
 
 #endif
 
-static void
-purple_network_ip_lookup_cb(GSList *hosts, gpointer data,
-	const char *error_message)
-{
-	const gchar **ip = (const gchar **) data;
+static GInetAddress *
+purple_network_ip_lookup(const gchar *hostname) {
+	GResolver *resolver = NULL;
+	GError *error = NULL;
+	GList *addresses =NULL, *l = NULL;
+	GInetAddress *address = NULL;
 
-	if (error_message) {
-		purple_debug_error("network", "lookup of IP address failed: %s\n",
-			error_message);
-		g_slist_free(hosts);
-		return;
+	resolver = g_resolver_get_default();
+	addresses = g_resolver_lookup_by_name(resolver, hostname, NULL, &error);
+
+	if(addresses == NULL) {
+		purple_debug_info("network", "lookup of IP address failed: %s\n", error->message);
+
+		g_error_free(error);
+
+		return NULL;
 	}
 
-	if (hosts && g_slist_next(hosts)) {
-		common_sockaddr_t *addr = g_slist_next(hosts)->data;
-		char dst[INET6_ADDRSTRLEN];
+	for(l = addresses; l; l = l->next) {
+		address = G_INET_ADDRESS(l->data);
 
-		if (addr->sa.sa_family == AF_INET6) {
-			inet_ntop(addr->sa.sa_family, &addr->in6.sin6_addr,
-				dst, sizeof(dst));
-		} else {
-			inet_ntop(addr->sa.sa_family, &addr->in.sin_addr,
-				dst, sizeof(dst));
+		if(!g_inet_address_get_is_loopback(address) && !g_inet_address_get_is_link_local(address)) {
+			break;
 		}
 
-		*ip = g_strdup(dst);
-		purple_debug_info("network", "set IP address: %s\n", *ip);
+		address = NULL;
 	}
 
-	while (hosts != NULL) {
-		hosts = g_slist_delete_link(hosts, hosts);
-		/* Free the address */
-		g_free(hosts->data);
-		hosts = g_slist_delete_link(hosts, hosts);
-	}
+	if(address != NULL)
+		g_object_ref(G_OBJECT(address));
+
+	g_resolver_free_addresses(addresses);
+
+	return address;
 }
 
 void
@@ -1018,9 +1018,17 @@ purple_network_set_stun_server(const gch
 {
 	if (stun_server && stun_server[0] != '\0') {
 		if (purple_network_is_available()) {
+			GInetAddress *address = NULL;
+
 			purple_debug_info("network", "running DNS query for STUN server\n");
-			purple_dnsquery_a(NULL, stun_server, 3478, purple_network_ip_lookup_cb,
-				&stun_ip);
+
+			address = purple_network_ip_lookup(stun_server);
+
+			if(address != NULL) {
+				stun_ip = g_inet_address_to_string(address);
+
+				g_object_unref(G_OBJECT(address));
+			}
 		} else {
 			purple_debug_info("network",
 				"network is unavailable, don't try to update STUN IP");
@@ -1036,10 +1044,17 @@ purple_network_set_turn_server(const gch
 {
 	if (turn_server && turn_server[0] != '\0') {
 		if (purple_network_is_available()) {
+			GInetAddress *address = NULL;
+
 			purple_debug_info("network", "running DNS query for TURN server\n");
-			purple_dnsquery_a(NULL, turn_server,
-				purple_prefs_get_int("/purple/network/turn_port"),
-				purple_network_ip_lookup_cb, &turn_ip);
+
+			address = purple_network_ip_lookup(turn_server);
+
+			if(address != NULL) {
+				turn_ip = g_inet_address_to_string(address);
+
+				g_object_unref(G_OBJECT(address));
+			}
 		} else {
 			purple_debug_info("network",
 				"network is unavailable, don't try to update TURN IP");

_______________________________________________
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.