--- a/libpurple/protocols/simple/simple.c Fri Dec 18 18:26:12 2015 -0600
+++ b/libpurple/protocols/simple/simple.c Fri Dec 18 19:18:18 2015 -0600
@@ -29,7 +29,6 @@
#include "conversation.h"
@@ -41,7 +40,6 @@
static PurpleProtocol *my_protocol = NULL;
@@ -1801,29 +1799,41 @@
-static void simple_udp_host_resolved(GSList *hosts, gpointer data, const char *error_message) {
+simple_udp_host_resolved(GObject *sender, GAsyncResult *result, gpointer data) { + GList *addresses = NULL; + GInetAddress *inet_address = NULL; + GSocketAddress *socket_address = NULL; struct simple_account_data *sip = (struct simple_account_data*) data;
- sip->query_data = NULL;
+ addresses = g_resolver_lookup_by_name_finish(g_resolver_get_default(), result, &error); + gchar *msg = g_strdup_printf(_("Unable to resolve hostname : %s"), - if (!hosts || !hosts->data) {
purple_connection_error(sip->gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
- _("Unable to resolve hostname"));
- addr_size = GPOINTER_TO_INT(hosts->data);
- hosts = g_slist_remove(hosts, hosts->data);
- memcpy(&(sip->serveraddr), hosts->data, addr_size);
- hosts = g_slist_remove(hosts, hosts->data);
- hosts = g_slist_remove(hosts, hosts->data);
- hosts = g_slist_remove(hosts, hosts->data);
+ inet_address = G_INET_ADDRESS(addresses->data); + socket_address = g_inet_socket_address_new(inet_address, sip->realport); + g_object_unref(G_OBJECT(inet_address)); + g_socket_address_to_native(socket_address, + g_socket_address_get_native_size(socket_address), + g_object_unref(G_OBJECT(socket_address)); + g_resolver_free_addresses(addresses); /* create socket for incoming connections */
sip->listen_data = purple_network_listen_range(5060, 5160, AF_UNSPEC, SOCK_DGRAM, TRUE,
@@ -1865,33 +1875,44 @@
-static void srvresolved(PurpleSrvResponse *resp, int results, gpointer data) {
+srvresolved(GObject *sender, GAsyncResult *result, gpointer data) { struct simple_account_data *sip;
- sip->srv_query_data = NULL;
- port = purple_account_get_int(sip->account, "port", 0);
- /* find the host to connect to */
- hostname = g_strdup(resp->hostname);
+ targets = g_resolver_lookup_service_finish(g_resolver_get_default(), result, &error); + purple_debug_info("simple", + "srv lookup failed, continuing with configured settings : %s", if(!purple_account_get_bool(sip->account, "useproxy", FALSE)) {
hostname = g_strdup(sip->servername);
hostname = g_strdup(purple_account_get_string(sip->account, "proxy", sip->servername));
+ port = purple_account_get_int(sip->account, "port", 0); + GSrvTarget *target = (GSrvTarget *)targets->data; + hostname = g_strdup(g_srv_target_get_hostname(target)); + port = g_srv_target_get_port(target); + g_resolver_free_targets(targets); sip->realhostname = hostname;
- if(!sip->realport) sip->realport = 5060;
@@ -1907,13 +1928,11 @@
purple_debug_info("simple", "using udp with server %s and port %d\n", hostname, port);
- sip->query_data = purple_dnsquery_a(sip->account, hostname,
- port, simple_udp_host_resolved, sip);
- if (sip->query_data == NULL) {
- purple_connection_error(sip->gc,
- PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
- _("Unable to resolve hostname"));
+ g_resolver_lookup_by_name_async(g_resolver_get_default(), + simple_udp_host_resolved, @@ -1975,8 +1994,13 @@
hosttoconnect = purple_account_get_string(account, "proxy", sip->servername);
- sip->srv_query_data = purple_srv_resolve(account, "sip",
- sip->udp ? "udp" : "tcp", hosttoconnect, srvresolved, sip);
+ g_resolver_lookup_service_async(g_resolver_get_default(), + sip->udp ? "udp" : "tcp", static void simple_close(PurpleConnection *gc)
@@ -2008,11 +2032,9 @@
purple_timeout_remove(sip->resendtimeout);
if (sip->registertimeout)
purple_timeout_remove(sip->registertimeout);
- if (sip->query_data != NULL)
- purple_dnsquery_destroy(sip->query_data);
- if (sip->srv_query_data != NULL)
- purple_srv_txt_query_destroy(sip->srv_query_data);
+ g_cancellable_cancel(sip->cancellable); + g_object_unref(G_OBJECT(sip->cancellable)); if (sip->listen_data != NULL)
purple_network_listen_cancel(sip->listen_data);
--- a/libpurple/protocols/simple/simple.h Fri Dec 18 18:26:12 2015 -0600
+++ b/libpurple/protocols/simple/simple.h Fri Dec 18 19:18:18 2015 -0600
@@ -24,12 +24,11 @@
#include "circularbuffer.h"
@@ -99,8 +98,7 @@
- PurpleDnsQueryData *query_data;
- PurpleSrvTxtQueryData *srv_query_data;
+ GCancellable *cancellable; PurpleNetworkListenData *listen_data;