+
+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;
+}