talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 0257b732c63d28f205e397a639b87f075b1e5a54
parent 5ff93b4877c019777f08921feecae38e6c7fbd62
Author: Colin Leroy <colin@colino.net>
Date:   Fri,  2 May 2014 10:04:17 +0200

Fix libravatar depending on auto_configure_service in a synchronous manner.

Diffstat:
Msrc/gtk/gtkutils.c | 40++++++++++++++++++++++++++++++++++++++++
Msrc/gtk/gtkutils.h | 1+
Msrc/plugins/libravatar/libravatar_federation.c | 4++--
3 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/src/gtk/gtkutils.c b/src/gtk/gtkutils.c @@ -1984,4 +1984,44 @@ void auto_configure_service(AutoConfigureData *data) data->cancel, resolve_done, data); } } + +gboolean auto_configure_service_sync(const gchar *service, const gchar *domain, gchar **srvhost, guint16 *srvport) +{ + GResolver *resolver; + GList *answers, *cur; + GError *error = NULL; + gboolean result = FALSE; + + cm_return_val_if_fail(service != NULL, FALSE); + cm_return_val_if_fail(domain != NULL, FALSE); + + resolver = g_resolver_get_default(); + if (resolver == NULL) + return FALSE; + + answers = g_resolver_lookup_service(resolver, service, "tcp", domain, NULL, &error); + + *srvhost = NULL; + *srvport = 0; + + if (answers) { + for (cur = g_srv_target_list_sort(answers); cur; cur = cur->next) { + GSrvTarget *target = (GSrvTarget *)cur->data; + const gchar *hostname = g_srv_target_get_hostname(target); + guint16 port = g_srv_target_get_port(target); + if (hostname && strcmp(hostname,"") && port > 0) { + result = TRUE; + *srvhost = g_strdup(hostname); + *srvport = port; + break; + } + } + g_resolver_free_targets(answers); + } else if (error) { + g_error_free(error); + } + + g_object_unref(resolver); + return result; +} #endif \ No newline at end of file diff --git a/src/gtk/gtkutils.h b/src/gtk/gtkutils.h @@ -231,6 +231,7 @@ typedef struct _AutoConfigureData { } AutoConfigureData; void auto_configure_service(AutoConfigureData *data); +gboolean auto_configure_service_sync(const gchar *service, const gchar *domain, gchar **srvhost, guint16 *srvport); #endif diff --git a/src/plugins/libravatar/libravatar_federation.c b/src/plugins/libravatar/libravatar_federation.c @@ -111,14 +111,14 @@ gchar *federated_url_for_address(const gchar *address) } /* not cached, try secure service first */ - if (auto_configure_service("avatars-sec", domain, &host, &port)) { + if (auto_configure_service_sync("avatars-sec", domain, &host, &port)) { if (port != 443) { url = g_strdup_printf("https://%s:%d/avatar", host, port); } else { url = g_strdup_printf("https://%s/avatar", host); } } else { /* try standard one if no secure service available */ - if (auto_configure_service("avatars", domain, &host, &port)) { + if (auto_configure_service_sync("avatars", domain, &host, &port)) { if (port != 80) { url = g_strdup_printf("http://%s:%d/avatar", host, port); } else {