Example #1
0
static void
do_test1(GObject *sender, GAsyncResult *res, gpointer data) {
	GList *services = NULL;
	GError *error = NULL;
	GResolver *resolver;
	const char *servername = data;
	int port = 3478;

	services = g_resolver_lookup_service_finish(G_RESOLVER(sender),
			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", "connecting to %s:%d\n", servername, port);

	resolver = g_resolver_get_default();
	g_resolver_lookup_by_name_async(resolver,
	                                servername,
	                                NULL,
	                                hbn_cb,
	                                GINT_TO_POINTER(port));
	g_object_unref(resolver);

	g_resolver_free_targets(services);
}
Example #2
0
static void
lookup_service_free (GUnixResolverRequest *req)
{
  g_free (req->u.service.service);
  if (req->u.service.targets)
    g_resolver_free_targets (req->u.service.targets);
}
static void dns_srv_response(GObject *resolver,
                             GAsyncResult *result,
                             gpointer data)
{
    GError *error  = NULL;
    GList *targets = g_resolver_lookup_service_finish(G_RESOLVER(resolver),
                     result,
                     &error);
    struct sipe_dns_query *query = data;

    if (targets) {
        GSrvTarget *target = targets->data;
        query->callback(query->extradata,
                        g_srv_target_get_hostname(target),
                        g_srv_target_get_port(target));
        g_resolver_free_targets(targets);
    } else {
        SIPE_DEBUG_INFO("dns_srv_response: failed: %s",
                        error ? error->message : "UNKNOWN");
        g_error_free(error);
        if (query->callback)
            query->callback(query->extradata, NULL, 0);
    }
    g_object_unref(query->cancel);
    g_free(query);
}