summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2010-09-23 16:27:28 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2010-09-23 16:50:44 +0100
commit0f85e9ae246b1e7a9b7872bca14dbb92fe0d1910 (patch)
tree46dce99fd36646769cd31c08260724d76dc3f67b /lib
parent6aae5708e84425b101cf17f43baf9bb500dce943 (diff)
downloadtelepathy-salut-0f85e9ae246b1e7a9b7872bca14dbb92fe0d1910.tar.gz
Remove the GibberResolver and all its infrastructure
Salut never used it, and Gabble no longer uses it either, so let's bin it. Please use GResolver in new code.
Diffstat (limited to 'lib')
-rw-r--r--lib/gibber/Makefile.am18
-rw-r--r--lib/gibber/examples/Makefile.am9
-rw-r--r--lib/gibber/examples/test-resolv.c130
-rw-r--r--lib/gibber/gibber-resolver-asyncns.c415
-rw-r--r--lib/gibber/gibber-resolver-asyncns.h59
-rw-r--r--lib/gibber/gibber-resolver.c896
-rw-r--r--lib/gibber/gibber-resolver.h175
-rw-r--r--lib/gibber/tests/Makefile.am3
-rw-r--r--lib/gibber/tests/check-gibber-resolver.c91
-rw-r--r--lib/gibber/tests/check-gibber.h1
-rw-r--r--lib/gibber/tests/check-main.c1
-rw-r--r--lib/gibber/tests/test-resolver.c113
-rw-r--r--lib/gibber/tests/test-resolver.h59
13 files changed, 2 insertions, 1968 deletions
diff --git a/lib/gibber/Makefile.am b/lib/gibber/Makefile.am
index 9480fa93..f5fe5c75 100644
--- a/lib/gibber/Makefile.am
+++ b/lib/gibber/Makefile.am
@@ -34,8 +34,6 @@ HANDWRITTEN_SOURCES = \
gibber-xmpp-stanza.h \
gibber-xmpp-writer.c \
gibber-xmpp-writer.h \
- gibber-resolver.c \
- gibber-resolver.h \
gibber-transport.c \
gibber-transport.h \
gibber-fd-transport.c \
@@ -91,12 +89,6 @@ libgibber_la_SOURCES += \
gibber-ssl-transport.h
endif
-if HAVE_LIBASYNCNS
-libgibber_la_SOURCES += \
- gibber-resolver-asyncns.c \
- gibber-resolver-asyncns.h
-endif
-
# Coding style checks
check_c_sources = \
$(HANDWRITTEN_SOURCES)
@@ -134,20 +126,12 @@ if HAVE_LIBSSL
AM_CFLAGS += @LIBSSL_CFLAGS@
endif
-if HAVE_LIBASYNCNS
- AM_CFLAGS += @LIBASYNCNS_CFLAGS@
-endif
-
-AM_LDFLAGS = $(GCOV_LIBS) @GLIB_LIBS@ @LIBXML2_LIBS@ @RESOLV_LIBS@ @LIBSOUP_LIBS@
+AM_LDFLAGS = $(GCOV_LIBS) @GLIB_LIBS@ @LIBXML2_LIBS@ @LIBSOUP_LIBS@
if HAVE_LIBSSL
AM_LDFLAGS += @LIBSSL_LIBS@
endif
-if HAVE_LIBASYNCNS
- AM_LDFLAGS += @LIBASYNCNS_LIBS@
-endif
-
# rules for making the glib enum objects
%-enumtypes.h: %.h Makefile.in
$(AM_V_GEN)glib-mkenums \
diff --git a/lib/gibber/examples/Makefile.am b/lib/gibber/examples/Makefile.am
index 7e537d75..68255fbb 100644
--- a/lib/gibber/examples/Makefile.am
+++ b/lib/gibber/examples/Makefile.am
@@ -8,7 +8,7 @@ $(top_builddir)/lib/gibber/libgibber.la:
.PHONY: $(top_builddir)/lib/gibber/libgibber.la
noinst_PROGRAMS = \
- test_tcp test_ssl test_resolv
+ test_tcp test_ssl
test_tcp_SOURCES = \
test-tcp.c
@@ -24,13 +24,6 @@ test_ssl_LDADD = \
$(top_builddir)/lib/gibber/libgibber.la \
$(AM_LDFLAGS)
-test_resolv_SOURCES = \
- test-resolv.c
-
-test_resolv_LDADD = \
- $(top_builddir)/lib/gibber/libgibber.la \
- $(AM_LDFLAGS)
-
AM_CFLAGS = $(ERROR_CFLAGS) @GLIB_CFLAGS@ \
-I $(top_srcdir)/lib -I $(top_builddir)/lib \
-I $(top_srcdir)/src -I $(top_builddir)/src
diff --git a/lib/gibber/examples/test-resolv.c b/lib/gibber/examples/test-resolv.c
deleted file mode 100644
index bdaf99e9..00000000
--- a/lib/gibber/examples/test-resolv.c
+++ /dev/null
@@ -1,130 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <string.h>
-
-#include <glib.h>
-
-#include <gibber/gibber-resolver.h>
-
-GMainLoop *mainloop;
-const gchar *hostname;
-const gchar *servicename;
-
-gboolean done = FALSE;
-int to_resolve = 0;
-
-GibberResolver *resolver;
-
-static void
-resolver_addrinfo_cb (GibberResolver *resolver, GList *entries, GError *error,
- gpointer user_data, GObject *weak_object)
-{
- GList *e;
- GibberResolverSrvRecord *r = (GibberResolverSrvRecord *) user_data;
-
- printf ("-- %s %d:\n", r->hostname, r->port);
- if (error != NULL)
- {
- printf ("\tResolving failed: %s\n", error->message);
- goto out;
- }
-
- for (e = entries; e != NULL; e = e->next)
- {
- GibberResolverAddrInfo *addr = (GibberResolverAddrInfo *) e->data;
- gchar *hostname, *portname;
- gboolean ret;
-
- ret = gibber_resolver_sockaddr_to_str (
- (struct sockaddr *) &(addr->sockaddr), addr->sockaddr_len,
- &hostname, &portname, NULL);
-
- g_assert (ret == TRUE);
-
- printf ("\t %s %s\n", hostname, portname);
-
- g_free (hostname);
- g_free (portname);
- }
-
- gibber_resolver_addrinfo_list_free (entries);
-
-out:
- to_resolve--;
- if (to_resolve == 0)
- {
- done = TRUE;
- if (g_main_loop_is_running (mainloop))
- g_main_loop_quit (mainloop);
- }
-}
-
-static void
-resolver_srv_cb (GibberResolver *resolver, GList *srv_list, GError *error,
- gpointer user_data, GObject *weak_object)
-{
- GList *s;
-
- printf ("--Srv returned--\n");
- if (error != NULL)
- {
- printf ("An error occured: %s\n", error->message);
- goto failed;
- }
-
- if (srv_list == NULL)
- {
- printf ("No srv records\n");
- goto failed;
- }
-
- for (s = srv_list ; s != NULL; s = s->next)
- {
- GibberResolverSrvRecord *r = (GibberResolverSrvRecord *) s->data;
- printf ("\t* %s\t%d\tp: %d w: %d\n", r->hostname, r->port,
- r->priority, r->weight);
- }
-
- printf ("Resolving individual records\n");
-
- to_resolve = g_list_length (srv_list);
- for (s = srv_list ; s != NULL; s = g_list_delete_link (s, s))
- {
- GibberResolverSrvRecord *r = (GibberResolverSrvRecord *) s->data;
- gchar *portname = g_strdup_printf("%d", r->port);
-
- gibber_resolver_addrinfo (resolver,
- r->hostname, portname, AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP, 0,
- resolver_addrinfo_cb, r, (GDestroyNotify) gibber_resolver_srv_free,
- NULL);
- }
-
- return;
-
-failed:
- done = TRUE;
-}
-
-int
-main(int argc, char **argv) {
- g_type_init();
-
- g_assert (argc > 2);
-
- hostname = argv[1];
- servicename = argv[2];
-
- mainloop = g_main_loop_new(NULL, FALSE);
-
- resolver = gibber_resolver_get_resolver ();
-
- gibber_resolver_srv (resolver, hostname, servicename,
- GIBBER_RESOLVER_SERVICE_TYPE_TCP,
- resolver_srv_cb, NULL, NULL, NULL);
-
- if (!done)
- g_main_loop_run(mainloop);
-
- return 0;
-}
diff --git a/lib/gibber/gibber-resolver-asyncns.c b/lib/gibber/gibber-resolver-asyncns.c
deleted file mode 100644
index 3624d856..00000000
--- a/lib/gibber/gibber-resolver-asyncns.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- * gibber-resolver-asyncns.c - Source for GibberResolverAsyncns
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <resolv.h>
-
-#include <asyncns.h>
-
-#include "gibber-resolver-asyncns.h"
-
-G_DEFINE_TYPE(GibberResolverAsyncns, gibber_resolver_asyncns,
- GIBBER_TYPE_RESOLVER)
-
-/* private structure */
-typedef struct _GibberResolverAsyncnsPrivate GibberResolverAsyncnsPrivate;
-
-struct _GibberResolverAsyncnsPrivate
-{
- asyncns_t *asyncns;
- GIOChannel *asyncio;
- int asyncns_fd;
- guint watch_id;
-
- gboolean dispose_has_run;
-};
-
-typedef enum {
- GIBBER_RESOLVER_ASYNCNS_QUERY_TYPE_SRV,
- GIBBER_RESOLVER_ASYNCNS_QUERY_TYPE_GETADDRINFO,
- GIBBER_RESOLVER_ASYNCNS_QUERY_TYPE_GETNAMEINFO,
-} GibberResolverAsyncnsQueryType;
-
-typedef struct {
- GibberResolverAsyncnsQueryType type;
- guint jobid;
- asyncns_query_t *query;
-} GibberResolverAsyncnsQuery;
-
-static gboolean asyncns_resolv_srv (GibberResolver *resolver, guint id,
- const gchar *service_name, const char *service,
- GibberResolverServiceType type);
-
-static gboolean asyncns_resolv_addrinfo (GibberResolver *resolver, guint id,
- const gchar *hostname, const char *port, int address_family, int sock_type,
- int protocol, int flags);
-
-static gboolean asyncns_resolv_nameinfo (GibberResolver *resolver, guint id,
- const struct sockaddr *sa, socklen_t salen, gint flags);
-
-static void asyncns_resolv_cancel (GibberResolver *resolver, guint id);
-
-static gboolean asyncns_io_read_cb (GIOChannel *source,
- GIOCondition condition, gpointer data);
-
-#define GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), GIBBER_TYPE_RESOLVER_ASYNCNS, \
- GibberResolverAsyncnsPrivate))
-
-static void
-gibber_resolver_asyncns_init (GibberResolverAsyncns *obj)
-{
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (obj);
-
- priv->asyncns = asyncns_new (2);
- priv->asyncns_fd = asyncns_fd (priv->asyncns);
- priv->asyncio = g_io_channel_unix_new (priv->asyncns_fd);
- priv->watch_id = g_io_add_watch (priv->asyncio, G_IO_IN, asyncns_io_read_cb,
- obj);
-}
-
-static void gibber_resolver_asyncns_dispose (GObject *object);
-static void gibber_resolver_asyncns_finalize (GObject *object);
-
-static void
-gibber_resolver_asyncns_class_init (
- GibberResolverAsyncnsClass *gibber_resolver_asyncns_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (gibber_resolver_asyncns_class);
- GibberResolverClass *resolver_class = GIBBER_RESOLVER_CLASS
- (gibber_resolver_asyncns_class);
-
- g_type_class_add_private (gibber_resolver_asyncns_class,
- sizeof (GibberResolverAsyncnsPrivate));
-
- object_class->dispose = gibber_resolver_asyncns_dispose;
- object_class->finalize = gibber_resolver_asyncns_finalize;
-
- resolver_class->resolv_srv = asyncns_resolv_srv;
- resolver_class->resolv_addrinfo = asyncns_resolv_addrinfo;
- resolver_class->resolv_nameinfo = asyncns_resolv_nameinfo;
- resolver_class->resolv_cancel = asyncns_resolv_cancel;
-}
-
-void
-gibber_resolver_asyncns_dispose (GObject *object)
-{
- GibberResolverAsyncns *self = GIBBER_RESOLVER_ASYNCNS (object);
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- if (priv->watch_id != 0)
- g_source_remove (priv->watch_id);
- priv->watch_id = 0;
-
- if (priv->asyncio != NULL)
- g_io_channel_shutdown (priv->asyncio, FALSE, NULL);
- priv->asyncio = NULL;
-
- if (priv->asyncns != NULL)
- asyncns_free (priv->asyncns);
- priv->asyncns = NULL;
-
- /* release any references held by the object here */
- if (G_OBJECT_CLASS (gibber_resolver_asyncns_parent_class)->dispose)
- G_OBJECT_CLASS (gibber_resolver_asyncns_parent_class)->dispose (object);
-}
-
-void
-gibber_resolver_asyncns_finalize (GObject *object)
-{
- /* free any data held directly by the object here */
- G_OBJECT_CLASS (gibber_resolver_asyncns_parent_class)->finalize (object);
-}
-
-static void
-gibber_resolver_asyncns_query_add (GibberResolverAsyncns *resolver,
- GibberResolverAsyncnsQueryType type, guint jobid, asyncns_query_t *query)
-{
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (resolver);
- GibberResolverAsyncnsQuery *q = g_slice_new (GibberResolverAsyncnsQuery);
-
- q->type = type;
- q->jobid = jobid;
- q->query = query;
-
- asyncns_setuserdata (priv->asyncns, query, q);
- gibber_resolver_set_data (GIBBER_RESOLVER (resolver), jobid, q);
-}
-
-static void
-gibber_resolver_asyncns_query_free (GibberResolverAsyncns *resolver,
- GibberResolverAsyncnsQuery *query)
-{
- g_slice_free (GibberResolverAsyncnsQuery, query);
-}
-
-static void
-gibber_resolver_syncns_srv_done (GibberResolverAsyncns *self,
- asyncns_query_t *query, GibberResolverAsyncnsQuery *asyncquery)
-{
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (self);
- int ret;
- unsigned char *answer;
- GList *entries = NULL;
- GError *error = NULL;
-
- ret = asyncns_res_done (priv->asyncns, query, &answer);
-
- if (ret >= 0)
- {
- entries = gibber_resolver_res_query_to_list (answer, ret);
- if (entries == NULL)
- error = g_error_new (GIBBER_RESOLVER_ERROR,
- GIBBER_RESOLVER_ERROR_RESOLVE_FAILURE, "Invalid reply received");
- free (answer);
- }
- else
- {
- /* FIXME libasyncns actually returns -errno, but that's normally
- * unusefull... libasyncns should be fixed here.. */
- error = gibber_resolver_h_error_to_g_error (-ret);
- }
-
- gibber_resolver_srv_result (GIBBER_RESOLVER (self), asyncquery->jobid,
- entries, error);
-
- if (error != NULL)
- g_error_free (error);
-
- gibber_resolver_asyncns_query_free (self, asyncquery);
-}
-
-static void
-gibber_resolver_syncns_addrinfo_done (GibberResolverAsyncns *self,
- asyncns_query_t *query, GibberResolverAsyncnsQuery *asyncquery)
-{
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (self);
- int ret;
- struct addrinfo *addrs;
-
- ret = asyncns_getaddrinfo_done (priv->asyncns, query, &addrs);
- if (ret != 0)
- {
- GError *err = gibber_resolver_gai_error_to_g_error (ret);
- gibber_resolver_addrinfo_result (GIBBER_RESOLVER (self),
- asyncquery->jobid, NULL, err);
- g_error_free (err);
- }
- else
- {
- struct addrinfo *a;
- GList *entries = NULL;
-
- for (a = addrs; a != NULL; a = a->ai_next)
- {
- entries = g_list_append (entries,
- gibber_resolver_addrinfo_new (a->ai_family, a->ai_socktype,
- a->ai_protocol, a->ai_addr, a->ai_addrlen));
- }
- gibber_resolver_addrinfo_result (GIBBER_RESOLVER (self),
- asyncquery->jobid, entries, NULL);
- asyncns_freeaddrinfo (addrs);
- }
-
- gibber_resolver_asyncns_query_free (self, asyncquery);
-}
-
-static void
-gibber_resolver_syncns_nameinfo_done (GibberResolverAsyncns *self,
- asyncns_query_t *query, GibberResolverAsyncnsQuery *asyncquery)
-{
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (self);
- gchar host[NI_MAXHOST];
- gchar serv[NI_MAXSERV];
- int ret;
-
- ret = asyncns_getnameinfo_done (priv->asyncns, query,
- host, NI_MAXHOST, serv, NI_MAXSERV);
-
- if (ret == 0)
- {
- gibber_resolver_nameinfo_result (GIBBER_RESOLVER (self),
- asyncquery->jobid, g_strdup (host), g_strdup (serv), NULL);
- }
- else
- {
- GError *err = gibber_resolver_gai_error_to_g_error (ret);
- gibber_resolver_nameinfo_result (GIBBER_RESOLVER (self),
- asyncquery->jobid, NULL, NULL, err);
- g_error_free (err);
- }
-
- gibber_resolver_asyncns_query_free (self, asyncquery);
-}
-
-static gboolean
-asyncns_io_read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
-{
- GibberResolverAsyncns *self = GIBBER_RESOLVER_ASYNCNS (data);
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (self);
- asyncns_query_t *q;
-
- asyncns_wait (priv->asyncns, 0);
-
- while ((q = asyncns_getnext (priv->asyncns)) != NULL)
- {
- GibberResolverAsyncnsQuery *asyncquery;
-
- asyncquery = (GibberResolverAsyncnsQuery *) asyncns_getuserdata (
- priv->asyncns, q);
-
- switch (asyncquery->type) {
- case GIBBER_RESOLVER_ASYNCNS_QUERY_TYPE_SRV:
- gibber_resolver_syncns_srv_done (self, q, asyncquery);
- break;
- case GIBBER_RESOLVER_ASYNCNS_QUERY_TYPE_GETADDRINFO:
- gibber_resolver_syncns_addrinfo_done (self, q, asyncquery);
- break;
- case GIBBER_RESOLVER_ASYNCNS_QUERY_TYPE_GETNAMEINFO:
- gibber_resolver_syncns_nameinfo_done (self, q, asyncquery);
- break;
- }
- }
-
- return TRUE;
-}
-
-static gboolean
-asyncns_resolv_srv (GibberResolver *resolver, guint id,
- const gchar *service_name, const char *service,
- GibberResolverServiceType type)
-{
- GibberResolverAsyncns *self = GIBBER_RESOLVER_ASYNCNS (resolver);
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (self);
- asyncns_query_t *query;
- gchar *srv_str;
-
- srv_str = g_strdup_printf ("_%s._%s.%s", service,
- type == GIBBER_RESOLVER_SERVICE_TYPE_TCP ? "tcp" : "udp", service_name);
-
- query = asyncns_res_query (priv->asyncns, srv_str, C_IN, T_SRV);
-
- if (query == NULL)
- {
- GError e = { GIBBER_RESOLVER_ERROR, GIBBER_RESOLVER_ERROR_MEMORY,
- "Failed to start asyncns query" };
- gibber_resolver_srv_result (resolver, id, NULL, &e);
- }
- else
- {
- gibber_resolver_asyncns_query_add (self,
- GIBBER_RESOLVER_ASYNCNS_QUERY_TYPE_SRV, id, query);
- }
-
- g_free (srv_str);
-
- return query != NULL;
-}
-
-static gboolean asyncns_resolv_addrinfo (GibberResolver *resolver, guint id,
- const gchar *hostname, const char *port, int address_family, int sock_type,
- int protocol, int flags)
-{
- GibberResolverAsyncns *self = GIBBER_RESOLVER_ASYNCNS (resolver);
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (self);
- asyncns_query_t *query;
- struct addrinfo hints;
-
- memset (&hints, 0, sizeof (hints));
- hints.ai_family = address_family;
- hints.ai_socktype = sock_type;
- hints.ai_protocol = protocol;
- hints.ai_flags = flags;
-
- query = asyncns_getaddrinfo (priv->asyncns, hostname, port, &hints);
-
- if (query == NULL)
- {
- GError e = { GIBBER_RESOLVER_ERROR, GIBBER_RESOLVER_ERROR_MEMORY,
- "Failed to start asyncns query" };
- gibber_resolver_srv_result (resolver, id, NULL, &e);
- }
- else
- {
- gibber_resolver_asyncns_query_add (self,
- GIBBER_RESOLVER_ASYNCNS_QUERY_TYPE_GETADDRINFO, id, query);
- }
-
- return query != NULL;
-}
-
-static gboolean
-asyncns_resolv_nameinfo (GibberResolver *resolver, guint id,
- const struct sockaddr *sa, socklen_t salen, gint flags)
-{
- GibberResolverAsyncns *self = GIBBER_RESOLVER_ASYNCNS (resolver);
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (self);
- asyncns_query_t *query;
-
- query = asyncns_getnameinfo (priv->asyncns, sa, salen, flags, TRUE, TRUE);
-
- if (query == NULL)
- {
- GError e = { GIBBER_RESOLVER_ERROR, GIBBER_RESOLVER_ERROR_MEMORY,
- "Failed to start asyncns query" };
- gibber_resolver_srv_result (resolver, id, NULL, &e);
- }
- else
- {
- gibber_resolver_asyncns_query_add (self,
- GIBBER_RESOLVER_ASYNCNS_QUERY_TYPE_GETNAMEINFO, id, query);
- }
-
- return query != NULL;
-}
-
-static void
-asyncns_resolv_cancel (GibberResolver *resolver, guint id)
-{
- GibberResolverAsyncnsQuery *query;
- GibberResolverAsyncns *self = GIBBER_RESOLVER_ASYNCNS (resolver);
- GibberResolverAsyncnsPrivate *priv =
- GIBBER_RESOLVER_ASYNCNS_GET_PRIVATE (self);
-
- query = (GibberResolverAsyncnsQuery *) gibber_resolver_get_data (resolver,
- id);
-
- asyncns_cancel (priv->asyncns, query->query);
-
- gibber_resolver_asyncns_query_free (self, query);
-}
diff --git a/lib/gibber/gibber-resolver-asyncns.h b/lib/gibber/gibber-resolver-asyncns.h
deleted file mode 100644
index 64b775c1..00000000
--- a/lib/gibber/gibber-resolver-asyncns.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * gibber-resolver-asyncns.h - Header for GibberResolverAsyncns
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __GIBBER_RESOLVER_ASYNCNS_H__
-#define __GIBBER_RESOLVER_ASYNCNS_H__
-
-#include <glib-object.h>
-#include "gibber-resolver.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GibberResolverAsyncns GibberResolverAsyncns;
-typedef struct _GibberResolverAsyncnsClass GibberResolverAsyncnsClass;
-
-struct _GibberResolverAsyncnsClass {
- GibberResolverClass parent_class;
-};
-
-struct _GibberResolverAsyncns {
- GibberResolver parent;
-};
-
-GType gibber_resolver_asyncns_get_type(void);
-
-/* TYPE MACROS */
-#define GIBBER_TYPE_RESOLVER_ASYNCNS \
- (gibber_resolver_asyncns_get_type())
-#define GIBBER_RESOLVER_ASYNCNS(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GIBBER_TYPE_RESOLVER_ASYNCNS, GibberResolverAsyncns))
-#define GIBBER_RESOLVER_ASYNCNS_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GIBBER_TYPE_RESOLVER_ASYNCNS, GibberResolverAsyncnsClass))
-#define GIBBER_IS_RESOLVER_ASYNCNS(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GIBBER_TYPE_RESOLVER_ASYNCNS))
-#define GIBBER_IS_RESOLVER_ASYNCNS_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GIBBER_TYPE_RESOLVER_ASYNCNS))
-#define GIBBER_RESOLVER_ASYNCNS_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), GIBBER_TYPE_RESOLVER_ASYNCNS, GibberResolverAsyncnsClass))
-
-
-G_END_DECLS
-
-#endif /* #ifndef __GIBBER_RESOLVER_ASYNCNS_H__*/
diff --git a/lib/gibber/gibber-resolver.c b/lib/gibber/gibber-resolver.c
deleted file mode 100644
index 712531d0..00000000
--- a/lib/gibber/gibber-resolver.c
+++ /dev/null
@@ -1,896 +0,0 @@
-/*
- * gibber-resolver.c - Source for GibberResolver
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <string.h>
-
-#include "gibber-sockets.h"
-
-#include <errno.h>
-
-#include "config.h"
-#include "gibber-resolver.h"
-
-#ifdef HAVE_LIBASYNCNS
- #include "gibber-resolver-asyncns.h"
-#endif
-
-static GibberResolver *resolver_singleton = NULL;
-static GType resolver_singleton_type = 0;
-
-GibberResolver *
-gibber_resolver_get_resolver (void)
-{
-
- if (resolver_singleton_type == 0)
-#ifdef HAVE_LIBASYNCNS
- resolver_singleton_type = GIBBER_TYPE_RESOLVER_ASYNCNS;
-#else
- resolver_singleton_type = GIBBER_TYPE_RESOLVER;
-#endif
-
- if (resolver_singleton == NULL)
- resolver_singleton = g_object_new (resolver_singleton_type, NULL);
-
- return resolver_singleton;
-}
-
-void
-gibber_resolver_set_resolver (GType object_type)
-{
- if (resolver_singleton_type != object_type && resolver_singleton != NULL)
- {
- g_object_unref (resolver_singleton);
- resolver_singleton = NULL;
- }
-
- resolver_singleton_type = object_type;
-}
-
-
-
-G_DEFINE_TYPE(GibberResolver, gibber_resolver, G_TYPE_OBJECT)
-
-typedef struct {
- guint jobid;
- GibberResolver *resolver;
-
- /* Data the user would like us to remember */
- GCallback callback;
- GDestroyNotify destroy;
- gpointer user_data;
- GObject *weak_object;
-
- /* Field settable by implementations of GibberResolver */
- gpointer data;
-} GibberResolverJob;
-
-/* private structure */
-typedef struct _GibberResolverPrivate GibberResolverPrivate;
-
-struct _GibberResolverPrivate
-{
- gboolean dispose_has_run;
- /* guint * -> GibberResolverJob struct */
- GHashTable *jobs;
-};
-
-static gboolean resolver_resolv_srv (GibberResolver *resolver, guint id,
- const gchar *service_name, const char *service,
- GibberResolverServiceType type);
-
-static gboolean resolver_resolv_addrinfo (GibberResolver *resolver, guint id,
- const gchar *hostname, const char *port, int address_family, int sock_type,
- int protocol, int flags);
-
-static gboolean resolver_resolv_nameinfo (GibberResolver *resolver, guint id,
- const struct sockaddr *sa, socklen_t salen, gint flags);
-
-static void resolver_resolv_cancel (GibberResolver *resolver, guint id);
-
-static void free_job (gpointer data);
-
-#define GIBBER_RESOLVER_GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), GIBBER_TYPE_RESOLVER, \
- GibberResolverPrivate))
-
-GQuark
-gibber_resolver_error_quark (void)
-{
- static GQuark quark = 0;
-
- if (!quark)
- quark = g_quark_from_static_string ("gibber_resolver_error");
-
- return quark;
-}
-
-static void
-gibber_resolver_init (GibberResolver *obj)
-{
- GibberResolverPrivate *priv = GIBBER_RESOLVER_GET_PRIVATE (obj);
-
- /* allocate any data required by the object here */
- priv->jobs = g_hash_table_new_full (g_int_hash, g_int_equal,
- NULL, free_job);
-}
-
-static void gibber_resolver_dispose (GObject *object);
-static void gibber_resolver_finalize (GObject *object);
-
-static void
-gibber_resolver_class_init (GibberResolverClass *gibber_resolver_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (gibber_resolver_class);
-
- g_type_class_add_private (gibber_resolver_class,
- sizeof (GibberResolverPrivate));
-
- object_class->dispose = gibber_resolver_dispose;
- object_class->finalize = gibber_resolver_finalize;
-
- gibber_resolver_class->resolv_srv = resolver_resolv_srv;
- gibber_resolver_class->resolv_addrinfo = resolver_resolv_addrinfo;
- gibber_resolver_class->resolv_nameinfo = resolver_resolv_nameinfo;
- gibber_resolver_class->resolv_cancel = resolver_resolv_cancel;
-}
-
-void
-gibber_resolver_dispose (GObject *object)
-{
- GibberResolver *self = GIBBER_RESOLVER (object);
- GibberResolverPrivate *priv = GIBBER_RESOLVER_GET_PRIVATE (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- if (priv->jobs != NULL)
- g_hash_table_destroy (priv->jobs);
- priv->jobs = NULL;
-
- /* release any references held by the object here */
- if (G_OBJECT_CLASS (gibber_resolver_parent_class)->dispose)
- G_OBJECT_CLASS (gibber_resolver_parent_class)->dispose (object);
-}
-
-void
-gibber_resolver_finalize (GObject *object)
-{
-
- /* free any data held directly by the object here */
-
- G_OBJECT_CLASS (gibber_resolver_parent_class)->finalize (object);
-}
-
-static void
-weak_object_destroyed (gpointer data, GObject *old_object)
-{
- GibberResolverJob *job = (GibberResolverJob *) data;
-
- g_assert (job->weak_object == old_object);
-
- job->weak_object = NULL;
-
- gibber_resolver_cancel (job->resolver, job->jobid);
-}
-
-static guint
-gibber_resolver_job_add (GibberResolver *resolver,
- GCallback callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object)
-{
- GibberResolverPrivate *priv = GIBBER_RESOLVER_GET_PRIVATE (resolver);
- GibberResolverJob *job;
-
- job = g_slice_new0 (GibberResolverJob);
- job->resolver = g_object_ref (resolver);
-
- job->callback = callback;
- job->destroy = destroy;
- job->user_data = user_data;
- job->weak_object = weak_object;
-
- /* Now decide on a decent job id.. The pointer is a pretty good initial
- * guess. A nicer solution would be to use an intset */
- job->jobid = GPOINTER_TO_UINT (job);
-
- /* Be carefull to skip 0 */
- while (job->jobid == 0 ||
- g_hash_table_lookup (priv->jobs, &(job->jobid)) != NULL)
- job->jobid++;
-
- g_hash_table_insert (priv->jobs, &(job->jobid), job);
-
- if (weak_object != NULL)
- {
- g_object_weak_ref (weak_object, weak_object_destroyed, job);
- }
-
- return job->jobid;
-}
-
-static void free_job (gpointer data)
-{
- GibberResolverJob *job = (GibberResolverJob *) data;
-
- if (job->destroy)
- job->destroy (job->user_data);
-
- if (job->weak_object)
- g_object_weak_unref (job->weak_object, weak_object_destroyed, job);
-
- g_object_unref (job->resolver);
- g_slice_free (GibberResolverJob, job);
-}
-
-GibberResolverAddrInfo *
-gibber_resolver_addrinfo_new (gint address_family,
- gint socket_type,
- gint protocol,
- struct sockaddr *addr,
- gsize sockaddr_len)
-{
- GibberResolverAddrInfo *result;
-
- result = g_slice_new (GibberResolverAddrInfo);
-
- result->address_family = address_family;
- result->socket_type = socket_type;
- result->protocol = protocol;
- memcpy (&(result->sockaddr), addr, sockaddr_len);
- result->sockaddr_len = sockaddr_len;
-
- return result;
-}
-
-void
-gibber_resolver_addrinfo_free (GibberResolverAddrInfo *addrinfo)
-{
- g_slice_free (GibberResolverAddrInfo, addrinfo);
-}
-
-void
-gibber_resolver_addrinfo_list_free (GList *addrinfo_list)
-{
- GList *t;
- GibberResolverAddrInfo *a;
-
- for (t = addrinfo_list ; t != NULL; t = g_list_delete_link (t, t))
- {
- a = (GibberResolverAddrInfo *) t->data;
- gibber_resolver_addrinfo_free (a);
- }
-}
-
-GibberResolverSrvRecord *
-gibber_resolver_srv_record_new (gchar *hostname,
- guint16 port,
- guint16 priority,
- guint16 weight)
-{
- GibberResolverSrvRecord *result;
-
- result = g_slice_new (GibberResolverSrvRecord);
- result->hostname = g_strdup (hostname);
- result->port = port;
- result->priority = priority;
- result->weight = weight;
-
- return result;
-}
-
-void
-gibber_resolver_srv_free (GibberResolverSrvRecord *srvrecord)
-{
- g_free (srvrecord->hostname);
- g_slice_free (GibberResolverSrvRecord, srvrecord);
-}
-
-void
-gibber_resolver_srv_list_free (GList *srv_list)
-{
- GList *t;
- GibberResolverSrvRecord *s;
-
- for (t = srv_list ; t != NULL; t = g_list_delete_link (t, t))
- {
- s = (GibberResolverSrvRecord *) t->data;
- gibber_resolver_srv_free (s);
- }
-}
-
-
-guint
-gibber_resolver_srv (GibberResolver *resolver,
- const gchar *service_name,
- const char *service,
- GibberResolverServiceType type,
- gibber_resolver_srv_cb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object)
-{
- GibberResolverClass *cls = GIBBER_RESOLVER_GET_CLASS (resolver);
- gboolean ret;
- guint jobid;
-
- jobid = gibber_resolver_job_add (resolver, G_CALLBACK (callback), user_data,
- destroy, weak_object);
-
- ret = cls->resolv_srv (resolver, jobid, service_name, service, type);
-
- return ret ? jobid : 0;
-}
-
-guint
-gibber_resolver_addrinfo (GibberResolver *resolver,
- const gchar *hostname,
- const char *port,
- int address_family,
- int sock_type,
- int protocol,
- int flags,
- gibber_resolver_addrinfo_cb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object)
-{
- GibberResolverClass *cls = GIBBER_RESOLVER_GET_CLASS (resolver);
- gboolean ret;
- guint jobid;
-
- jobid = gibber_resolver_job_add (resolver, G_CALLBACK (callback),
- user_data, destroy, weak_object);
-
- ret = cls->resolv_addrinfo (resolver, jobid, hostname, port, address_family,
- sock_type, protocol, flags);
-
- return ret ? jobid : 0;
-}
-
-guint
-gibber_resolver_nameinfo (GibberResolver *resolver,
- const struct sockaddr *sa,
- socklen_t salen,
- gint flags,
- gibber_resolver_nameinfo_cb callback,
- gpointer user_data,
- GDestroyNotify destroy,
- GObject *weak_object)
-{
- GibberResolverClass *cls = GIBBER_RESOLVER_GET_CLASS (resolver);
- gboolean ret;
- guint jobid;
-
- jobid = gibber_resolver_job_add (resolver, G_CALLBACK (callback), user_data,
- destroy, weak_object);
-
- ret = cls->resolv_nameinfo (resolver, jobid, sa, salen, flags);
-
- return ret ? jobid : 0;
-}
-
-void
-gibber_resolver_cancel (GibberResolver *resolver, guint id)
-{
- GibberResolverClass *cls = GIBBER_RESOLVER_GET_CLASS (resolver);
- GibberResolverPrivate *priv = GIBBER_RESOLVER_GET_PRIVATE (resolver);
-
- if (g_hash_table_lookup (priv->jobs, &id) == NULL)
- {
- g_warning ("Trying to cancel a non-existing resolver jobs");
- return;
- }
-
- cls->resolv_cancel (resolver, id);
- g_hash_table_remove (priv->jobs, &id);
-}
-
-gboolean
-gibber_resolver_sockaddr_to_str (const struct sockaddr *sa,
- gsize salen,
- gchar **address,
- gchar **service,
- GError **error)
-{
- int ret;
- gchar name[NI_MAXHOST], servicename[NI_MAXSERV];
-
- ret = getnameinfo (sa, salen, name, NI_MAXHOST, servicename, NI_MAXSERV,
- NI_NUMERICHOST | NI_NUMERICSERV);
-
- if (ret != 0)
- {
- g_set_error (error, GIBBER_RESOLVER_ERROR, ret,
- "getnameinfo failed: %s", gai_strerror (ret));
- return FALSE;
- }
-
- if (address != NULL)
- *address = g_strdup (name);
-
- if (service != NULL)
- *service = g_strdup (servicename);
-
- return TRUE;
-}
-
-/* Utility function for classed implementing GibberResolver */
-void
-gibber_resolver_set_data (GibberResolver *resolver, guint id, gpointer data)
-{
- GibberResolverPrivate *priv = GIBBER_RESOLVER_GET_PRIVATE (resolver);
- GibberResolverJob *job;
-
- job = g_hash_table_lookup (priv->jobs, &id);
-
- g_assert (job != NULL);
-
- job->data = data;
-}
-
-gpointer
-gibber_resolver_get_data (GibberResolver *resolver, guint id)
-{
- GibberResolverPrivate *priv = GIBBER_RESOLVER_GET_PRIVATE (resolver);
- GibberResolverJob *job;
-
- job = g_hash_table_lookup (priv->jobs, &id);
-
- g_assert (job != NULL);
-
- return job->data;
-}
-
-static gint
-compare_srv_record (gconstpointer a, gconstpointer b)
-{
- GibberResolverSrvRecord *asrv = (GibberResolverSrvRecord *) a;
- GibberResolverSrvRecord *bsrv = (GibberResolverSrvRecord *) b;
-
- if (asrv->priority != bsrv->priority)
- return asrv->priority < bsrv->priority ? -1 : 1;
-
- if (asrv->weight != 0 || bsrv->weight != 0)
- return asrv->weight == 0 ? -1 : 1;
-
- return 0;
-}
-
-
-static GList *
-weight_sort_srv_list_total (GList *srv_list, gint total)
-{
- GList *l, *s;
- gint num;
- GibberResolverSrvRecord *srv;
-
- if (srv_list == NULL)
- return NULL;
-
- num = g_random_int_range (0, total + 1);
-
- for (l = srv_list ; l != NULL; l = g_list_next (l))
- {
- srv = (GibberResolverSrvRecord *) l->data;
- num -= srv->weight;
- if (num <= 0)
- break;
- }
-
- g_assert (l != NULL);
-
- s = g_list_remove_link (srv_list, l);
-
- return g_list_concat (l,
- weight_sort_srv_list_total (s, total - srv->weight));
-}
-
-static GList *
-weight_sort_srv_list (GList *srv_list)
-{
- GList *l;
- gint total = 0;
- GibberResolverSrvRecord *srv;
-
- /* Sort srv list of equal priority but with weight as specified in RFC2782 */
- srv = (GibberResolverSrvRecord *) srv_list->data;
-
- g_assert (srv_list != NULL);
-
- for (l = srv_list; l != NULL; l = g_list_next (l))
- {
- srv = (GibberResolverSrvRecord *) l->data;
- total += srv->weight;
- }
-
- return weight_sort_srv_list_total (srv_list, total);
-}
-
-static void
-cut_list (GList *link)
-{
- if (link->prev != NULL)
- link->prev->next = NULL;
- link->prev = NULL;
-}
-
-static GList *
-sort_srv_list (GList *srv_list)
-{
- GList *result = NULL;
- GList *start, *end;
- GList *sorted;
- guint16 priority = 0;
-
- sorted = g_list_sort (srv_list, compare_srv_record);
-
- while (sorted != NULL)
- {
- end = NULL;
-
- /* Find the start entry with a non-zero weight */
- for (start = sorted ; start != NULL &&
- ((GibberResolverSrvRecord *) start->data)->weight == 0;
- start = start->next)
- /* nothing */;
-
- if (start != sorted)
- result = g_list_concat (result, sorted);
-
- if (start != NULL)
- {
- cut_list (start);
- priority = ((GibberResolverSrvRecord *) start->data)->priority;
- }
-
- for (end = start ; end != NULL &&
- ((GibberResolverSrvRecord *) end->data)->priority == priority;
- end = end->next)
- /* nothing */;
-
- if (end != NULL)
- cut_list (end);
-
- sorted = end;
-
- if (start != NULL)
- {
- /* We know have a sublist of entries with the same priority but
- * different weights */
- start = weight_sort_srv_list (start);
- result = g_list_concat (result, start);
- }
- }
-
- return result;
-}
-
-void
-gibber_resolver_srv_result (GibberResolver *resolver,
- guint jobid,
- GList *srv_list, GError *error)
-{
- GibberResolverPrivate *priv = GIBBER_RESOLVER_GET_PRIVATE (resolver);
- GibberResolverJob *job;
- gibber_resolver_srv_cb callback;
-
- job = g_hash_table_lookup (priv->jobs, &jobid);
-
- g_assert (job != NULL);
-
- srv_list = sort_srv_list (srv_list);
-
- callback = (gibber_resolver_srv_cb) job->callback;
- callback (resolver, srv_list, error, job->user_data, job->weak_object);
-
- g_hash_table_remove (priv->jobs, &jobid);
-}
-
-void
-gibber_resolver_addrinfo_result (GibberResolver *resolver,
- guint jobid,
- GList *entries,
- GError *error)
-{
- GibberResolverPrivate *priv = GIBBER_RESOLVER_GET_PRIVATE (resolver);
- GibberResolverJob *job;
- gibber_resolver_addrinfo_cb callback;
-
- job = g_hash_table_lookup (priv->jobs, &jobid);
-
- g_assert (job != NULL);
-
- callback = (gibber_resolver_addrinfo_cb)job->callback;
- callback (resolver, entries, error, job->user_data, job->weak_object);
-
- g_hash_table_remove (priv->jobs, &jobid);
-}
-
-void
-gibber_resolver_nameinfo_result (GibberResolver *resolver,
- guint jobid,
- const gchar *hostname,
- const gchar *port,
- GError *error)
-{
- GibberResolverPrivate *priv = GIBBER_RESOLVER_GET_PRIVATE (resolver);
- GibberResolverJob *job;
- gibber_resolver_nameinfo_cb callback;
-
- job = g_hash_table_lookup (priv->jobs, &jobid);
-
- g_assert (job != NULL);
-
- callback = (gibber_resolver_nameinfo_cb) job->callback;
- callback (resolver, hostname, port, error,
- job->user_data, job->weak_object);
-
- g_hash_table_remove (priv->jobs, &jobid);
-}
-
-
-#define ANSWER_BUFSIZE 10240
-GList *
-gibber_resolver_res_query_to_list (guchar *answer, int length)
-{
- GList *list = NULL;
- int qdcount;
- int ancount;
- int len;
- const unsigned char *pos = answer + sizeof (HEADER);
- unsigned char *end = answer + length;
- HEADER *head = (HEADER *) answer;
- char name[256];
-
- qdcount = ntohs (head->qdcount);
- ancount = ntohs (head->ancount);
-
- /* Ignore the questions */
- while (qdcount-- > 0 && (len = dn_expand (answer, end, pos, name, 255)) >= 0)
- {
- pos += len + QFIXEDSZ;
- }
-
- /* Parse the answers */
- while (ancount-- > 0
- && (len = dn_expand (answer, end, pos, name, 255)) >= 0)
- {
- uint16_t pref, weight, port, class, type;
-
- /* Ignore the initial string, which has the query in it */
- pos += len;
- NS_GET16 (type, pos);
- NS_GET16 (class, pos);
-
- if (type != T_SRV || class != C_IN)
- goto failed;
-
- /* skip ttl and dlen */
- pos += 6;
-
- NS_GET16 (pref, pos);
- NS_GET16 (weight, pos);
- NS_GET16 (port, pos);
- len = dn_expand (answer, end, pos, name, 255);
-
- list = g_list_prepend (list,
- gibber_resolver_srv_record_new (name, port, pref, weight));
-
- pos += len;
- }
-
- return list;
-
-failed:
- gibber_resolver_srv_list_free (list);
- return NULL;
-}
-
-GError *
-gibber_resolver_gai_error_to_g_error (int error)
-{
- gint code;
-
- switch (error) {
- case EAI_BADFLAGS:
- case EAI_SOCKTYPE:
- case EAI_FAMILY:
- case EAI_SERVICE:
- code = GIBBER_RESOLVER_ERROR_INVALID_ARGUMENT;
- break;
-
- case EAI_AGAIN:
- code = GIBBER_RESOLVER_ERROR_RESOLVE_TEMPORARY_FAILURE;
- break;
- case EAI_FAIL:
- case EAI_NONAME:
- code = GIBBER_RESOLVER_ERROR_RESOLVE_FAILURE;
- break;
-
- case EAI_MEMORY:
- case EAI_OVERFLOW:
- code = GIBBER_RESOLVER_ERROR_MEMORY;
- break;
-
- case EAI_SYSTEM:
- default:
- code = GIBBER_RESOLVER_ERROR_UNKNOWN;
- }
-
- return g_error_new_literal (GIBBER_RESOLVER_ERROR, code,
- gai_strerror (error));
-}
-
-GError *
-gibber_resolver_h_error_to_g_error (int error)
-{
- gint code;
- gchar *message;
-
- switch (error) {
- case NO_RECOVERY:
- code = GIBBER_RESOLVER_ERROR_RESOLVE_FAILURE,
- message = "Non-recoverable error";
- break;
- case HOST_NOT_FOUND:
- code = GIBBER_RESOLVER_ERROR_RESOLVE_FAILURE,
- message = "Authoritative Answer Host not found";
- break;
- case NO_DATA:
- code = GIBBER_RESOLVER_ERROR_RESOLVE_FAILURE;
- message = "Valid name, no data record of requested type.";
- break;
- case TRY_AGAIN:
- code = GIBBER_RESOLVER_ERROR_RESOLVE_TEMPORARY_FAILURE,
- message = "Temporary resolver failure";
- break;
- default:
- code = GIBBER_RESOLVER_ERROR_UNKNOWN;
- message = "Unknown error";
- }
-
- return g_error_new_literal (GIBBER_RESOLVER_ERROR, code, message);
-}
-
-
-/* Default GibberResolver implementation (blocking) */
-static gboolean
-resolver_resolv_srv (GibberResolver *resolver,
- guint id,
- const gchar *service_name,
- const char *service,
- GibberResolverServiceType type)
-{
- gchar *srv_str;
- int ret;
- GList *entries = NULL;
- GError *error = NULL;
- guchar answer[ANSWER_BUFSIZE];
-
- srv_str = g_strdup_printf ("_%s._%s.%s", service,
- type == GIBBER_RESOLVER_SERVICE_TYPE_TCP ? "tcp" : "udp", service_name);
-
- ret = res_query (srv_str, C_IN, T_SRV, answer, ANSWER_BUFSIZE);
-
- if (ret < 0)
- error = gibber_resolver_h_error_to_g_error (h_errno);
- else
- {
- entries = gibber_resolver_res_query_to_list (answer, ret);
- if (entries == NULL)
- error = g_error_new (GIBBER_RESOLVER_ERROR,
- GIBBER_RESOLVER_ERROR_RESOLVE_FAILURE, "Invalid reply received");
- }
-
- gibber_resolver_srv_result (resolver, id, entries, error);
-
- if (error != NULL)
- g_error_free (error);
-
- g_free (srv_str);
-
- return FALSE;
-}
-
-static gboolean
-resolver_resolv_addrinfo (GibberResolver *resolver,
- guint id,
- const gchar *hostname,
- const char *port,
- int address_family,
- int sock_type,
- int protocol,
- int flags)
-{
- struct addrinfo req, *ans = NULL, *tmpaddr;
- int ret;
- GList *entries = NULL;
-
- memset (&req, 0, sizeof (req));
- req.ai_family = address_family;
- req.ai_socktype = sock_type;
- req.ai_protocol = protocol;
- req.ai_flags = flags;
-
- ret = getaddrinfo (hostname, port, &req, &ans);
-
- if (ret != 0)
- {
- GError *e = gibber_resolver_gai_error_to_g_error (ret);
- gibber_resolver_addrinfo_result (resolver, id, NULL, e);
- g_error_free (e);
- return FALSE;
- }
-
- for (tmpaddr = ans; tmpaddr != NULL; tmpaddr = tmpaddr->ai_next)
- {
- entries = g_list_append (entries,
- gibber_resolver_addrinfo_new (tmpaddr->ai_family,
- tmpaddr->ai_socktype, tmpaddr->ai_protocol,
- tmpaddr->ai_addr, tmpaddr->ai_addrlen));
- }
-
- freeaddrinfo (ans);
-
- gibber_resolver_addrinfo_result (resolver, id, entries, NULL);
-
- return FALSE;
-}
-
-static gboolean
-resolver_resolv_nameinfo (GibberResolver *resolver,
- guint id,
- const struct sockaddr *sa,
- socklen_t salen,
- gint flags)
-{
- int ret;
- gchar name[NI_MAXHOST], servicename[NI_MAXSERV];
-
- ret = getnameinfo (sa, salen, name, NI_MAXHOST, servicename, NI_MAXSERV,
- flags);
-
- if (ret != 0)
- {
- GError *e = gibber_resolver_gai_error_to_g_error (ret);
-
- gibber_resolver_nameinfo_result (resolver, id, NULL, NULL, e);
- g_error_free (e);
- return FALSE;
- }
-
- gibber_resolver_nameinfo_result (resolver, id, g_strdup (name),
- g_strdup (servicename), NULL);
-
- return FALSE;
-}
-
-static void
-resolver_resolv_cancel (GibberResolver *resolver, guint id)
-{
- return;
-}
diff --git a/lib/gibber/gibber-resolver.h b/lib/gibber/gibber-resolver.h
deleted file mode 100644
index 94445d40..00000000
--- a/lib/gibber/gibber-resolver.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * gibber-resolver.h - Header for GibberResolver
- * Copyright (C) 2006 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd@luon.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __GIBBER_RESOLVER_H__
-#define __GIBBER_RESOLVER_H__
-
-#include <glib-object.h>
-
-#include "gibber-sockets.h"
-
-G_BEGIN_DECLS
-
-GQuark gibber_resolver_error_quark (void);
-#define GIBBER_RESOLVER_ERROR \
- gibber_resolver_error_quark ()
-
-typedef enum {
- /* Invalid or unsupported arguments */
- GIBBER_RESOLVER_ERROR_INVALID_ARGUMENT,
- /* Temperary failure in name resolving */
- GIBBER_RESOLVER_ERROR_RESOLVE_TEMPORARY_FAILURE,
- /* Failed to resolve */
- GIBBER_RESOLVER_ERROR_RESOLVE_FAILURE,
- /* Failed to allocate memory or overflow */
- GIBBER_RESOLVER_ERROR_MEMORY,
- /* Unknown error */
- GIBBER_RESOLVER_ERROR_UNKNOWN,
-} GibberResolverError;
-
-typedef enum {
- GIBBER_RESOLVER_SERVICE_TYPE_UDP,
- GIBBER_RESOLVER_SERVICE_TYPE_TCP
-} GibberResolverServiceType;
-
-typedef struct _GibberResolver GibberResolver;
-typedef struct _GibberResolverClass GibberResolverClass;
-
-struct _GibberResolverClass {
- GObjectClass parent_class;
-
- gboolean (*resolv_srv) (GibberResolver *resolver, guint id,
- const gchar *service_name, const char *service,
- GibberResolverServiceType type);
- gboolean (*resolv_addrinfo) (GibberResolver *resolver, guint id,
- const gchar *hostname, const char *port, int address_family, int sock_type,
- int protocol, int flags);
- gboolean (*resolv_nameinfo) (GibberResolver *resolver, guint id,
- const struct sockaddr *sa, socklen_t salen, gint flags);
- void (*resolv_cancel) (GibberResolver *resolver, guint id);
-};
-
-struct _GibberResolver {
- GObject parent;
-};
-
-GType gibber_resolver_get_type (void);
-
-/* TYPE MACROS */
-#define GIBBER_TYPE_RESOLVER \
- (gibber_resolver_get_type ())
-#define GIBBER_RESOLVER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GIBBER_TYPE_RESOLVER, GibberResolver))
-#define GIBBER_RESOLVER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GIBBER_TYPE_RESOLVER, GibberResolverClass))
-#define GIBBER_IS_RESOLVER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GIBBER_TYPE_RESOLVER))
-#define GIBBER_IS_RESOLVER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GIBBER_TYPE_RESOLVER))
-#define GIBBER_RESOLVER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), GIBBER_TYPE_RESOLVER, GibberResolverClass))
-
-GibberResolver * gibber_resolver_get_resolver (void);
-void gibber_resolver_set_resolver (GType object_type);
-
-typedef struct {
- gint address_family;
- gint socket_type;
- gint protocol;
- struct sockaddr_storage sockaddr;
- gsize sockaddr_len;
-} GibberResolverAddrInfo;
-
-typedef struct {
- gchar *hostname;
- guint16 port;
- guint16 priority;
- guint16 weight;
-} GibberResolverSrvRecord;
-
-GibberResolverAddrInfo * gibber_resolver_addrinfo_new (gint address_family,
- gint socket_type, gint protocol, struct sockaddr *addr,
- gsize sockaddr_len);
-
-void gibber_resolver_addrinfo_free (GibberResolverAddrInfo *addrinfo);
-
-void gibber_resolver_addrinfo_list_free (GList *addrinfo_list);
-
-GibberResolverSrvRecord * gibber_resolver_srv_record_new (gchar *hostname,
- guint16 port, guint16 priority, guint16 weight);
-
-void gibber_resolver_srv_free (GibberResolverSrvRecord *srvrecord);
-
-void gibber_resolver_srv_list_free (GList *srv_list);
-
-typedef void (* gibber_resolver_srv_cb) (GibberResolver *resolver,
- GList *srv_list, GError *error, gpointer user_data, GObject *weak_object);
-
-guint gibber_resolver_srv (GibberResolver *resolver,
- const gchar *service_name, const char *service,
- GibberResolverServiceType type,
- gibber_resolver_srv_cb callback,
- gpointer user_data, GDestroyNotify destroy, GObject *weak_object);
-
-/* entries is a GList of GibberResolverAddrInfo */
-typedef void (* gibber_resolver_addrinfo_cb) (GibberResolver *resolver,
- GList *entries, GError *error, gpointer user_data, GObject *weak_object);
-
-guint gibber_resolver_addrinfo (GibberResolver *resolver,
- const gchar *hostname, const char *port,
- int address_family, int sock_type, int protocol, int flags,
- gibber_resolver_addrinfo_cb callback,
- gpointer user_data, GDestroyNotify destroy, GObject *weak_object);
-
-typedef void (* gibber_resolver_nameinfo_cb) (GibberResolver *resolver,
- const gchar *host, const gchar *port, GError *error,
- gpointer user_data, GObject *weak_object);
-
-guint gibber_resolver_nameinfo (GibberResolver *resolver,
- const struct sockaddr *sa, socklen_t salen, gint flags,
- gibber_resolver_nameinfo_cb callback,
- gpointer user_data, GDestroyNotify destroy, GObject *weak_object);
-
-void gibber_resolver_cancel (GibberResolver *resolver, guint id);
-
-gboolean gibber_resolver_sockaddr_to_str (const struct sockaddr *sa,
- gsize salen, gchar **address, gchar **port, GError **error);
-
-/* Utility function for classed implementing GibberResolver */
-void gibber_resolver_set_data (GibberResolver *resolver, guint id,
- gpointer data);
-gpointer gibber_resolver_get_data (GibberResolver *resolver, guint id);
-
-void gibber_resolver_srv_result (GibberResolver *resolver, guint jobid,
- GList *srv_list, GError *error);
-
-void gibber_resolver_addrinfo_result (GibberResolver *resolver, guint jobid,
- GList *entries, GError *error);
-
-void gibber_resolver_nameinfo_result (GibberResolver *resolver, guint jobid,
- const gchar *hostname, const gchar *port, GError *error);
-
-GList *gibber_resolver_res_query_to_list (guchar *answer, int length);
-GError *gibber_resolver_gai_error_to_g_error (int error);
-GError *gibber_resolver_h_error_to_g_error (int error);
-
-G_END_DECLS
-
-#endif /* #ifndef __GIBBER_RESOLVER_H__*/
diff --git a/lib/gibber/tests/Makefile.am b/lib/gibber/tests/Makefile.am
index be18ad97..0bbf78c1 100644
--- a/lib/gibber/tests/Makefile.am
+++ b/lib/gibber/tests/Makefile.am
@@ -57,9 +57,6 @@ check_main_SOURCES = \
check-gibber-xmpp-node.c \
check-gibber-xmpp-reader.c \
check-gibber-r-multicast-causal-transport.c \
- check-gibber-resolver.c \
- test-resolver.c \
- test-resolver.h \
test-transport.c \
test-transport.h \
check-gibber-xmpp-connection.c \
diff --git a/lib/gibber/tests/check-gibber-resolver.c b/lib/gibber/tests/check-gibber-resolver.c
deleted file mode 100644
index ba6effa0..00000000
--- a/lib/gibber/tests/check-gibber-resolver.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * check-gibber-resolver.c - Test for gibber-resolver functions
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "test-resolver.h"
-#include "check-gibber.h"
-
-#include <check.h>
-
-GMainLoop *mainloop = NULL;
-gboolean done = FALSE;
-
-static void
-resolver_srv_cb (GibberResolver *resolver, GList *srv_list, GError *error,
- gpointer user_data, GObject *weak_object)
-{
- GList *s;
- int last_prio = 0;
- int last_weight = 0;
-
- for (s = srv_list ; s != NULL; s = g_list_next (s))
- {
- GibberResolverSrvRecord *r = (GibberResolverSrvRecord *) s->data;
-
- fail_unless (last_prio <= r->priority);
-
- if (last_prio != r->priority)
- last_weight = 0;
-
- /* If our previous weight was non-zero, then this one has to be non-zero
- * too. The SRV RFC requires all entries with zero weight to be sorted
- * before all other entries with the same priority */
- fail_unless (last_weight == 0 || r->weight != 0);
-
- last_prio = r->priority;
- last_weight = r->weight;
- }
-
- done = TRUE;
-
- if (g_main_loop_is_running (mainloop))
- g_main_loop_quit (mainloop);
-}
-
-START_TEST (test_srv_resolving)
-{
- GibberResolver *resolver;
-
- done = FALSE;
- mainloop = g_main_loop_new (NULL, FALSE);
-
- resolver = g_object_new (TEST_TYPE_RESOLVER, NULL);
-
- gibber_resolver_srv (resolver, "test", "test",
- GIBBER_RESOLVER_SERVICE_TYPE_TCP,
- resolver_srv_cb, NULL, NULL, NULL);
-
- if (!done)
- g_main_loop_run (mainloop);
-
- g_main_loop_unref (mainloop);
-} END_TEST
-
-TCase *
-make_gibber_resolver_tcase (void)
-{
- TCase *tc = tcase_create ("Resolve");
- tcase_add_test (tc, test_srv_resolving);
- return tc;
-}
diff --git a/lib/gibber/tests/check-gibber.h b/lib/gibber/tests/check-gibber.h
index 95bc208a..ba785c5d 100644
--- a/lib/gibber/tests/check-gibber.h
+++ b/lib/gibber/tests/check-gibber.h
@@ -7,7 +7,6 @@ TCase *make_gibber_xmpp_node_tcase (void);
TCase *make_gibber_xmpp_reader_tcase (void);
TCase *make_gibber_xmpp_connection_tcase (void);
TCase *make_gibber_sasl_auth_tcase (void);
-TCase *make_gibber_resolver_tcase (void);
TCase *make_gibber_r_multicast_packet_tcase (void);
TCase *make_gibber_r_multicast_causal_transport_tcase (void);
TCase *make_gibber_r_multicast_sender_tcase (void);
diff --git a/lib/gibber/tests/check-main.c b/lib/gibber/tests/check-main.c
index 685d22f5..ea7f7bb2 100644
--- a/lib/gibber/tests/check-main.c
+++ b/lib/gibber/tests/check-main.c
@@ -21,7 +21,6 @@ make_gibber_suite (void)
#ifdef HAVE_LIBSASL2
suite_add_tcase (s, make_gibber_sasl_auth_tcase ());
#endif
- suite_add_tcase (s, make_gibber_resolver_tcase ());
suite_add_tcase (s, make_gibber_r_multicast_packet_tcase ());
suite_add_tcase (s, make_gibber_r_multicast_sender_tcase ());
suite_add_tcase (s, make_gibber_r_multicast_causal_transport_tcase ());
diff --git a/lib/gibber/tests/test-resolver.c b/lib/gibber/tests/test-resolver.c
deleted file mode 100644
index bb6ab8d7..00000000
--- a/lib/gibber/tests/test-resolver.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * test-resolver.c - Source for TestResolver
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "test-resolver.h"
-
-G_DEFINE_TYPE(TestResolver, test_resolver, GIBBER_TYPE_RESOLVER)
-
-/* private structure */
-typedef struct _TestResolverPrivate TestResolverPrivate;
-
-struct _TestResolverPrivate
-{
- gboolean dispose_has_run;
-};
-
-#define TEST_RESOLVER_GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), TEST_TYPE_RESOLVER, TestResolverPrivate))
-
-static void
-test_resolver_init (TestResolver *obj)
-{
-}
-
-static void test_resolver_dispose (GObject *object);
-static void test_resolver_finalize (GObject *object);
-
-static gboolean test_resolv_srv (GibberResolver *resolver, guint id,
- const gchar *service_name, const char *service,
- GibberResolverServiceType type);
-
-static void
-test_resolver_class_init (TestResolverClass *test_resolver_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (test_resolver_class);
- GibberResolverClass *resolver_class = GIBBER_RESOLVER_CLASS
- (test_resolver_class);
-
- g_type_class_add_private (test_resolver_class, sizeof (TestResolverPrivate));
-
- object_class->dispose = test_resolver_dispose;
- object_class->finalize = test_resolver_finalize;
-
- resolver_class->resolv_srv = test_resolv_srv;
-}
-
-void
-test_resolver_dispose (GObject *object)
-{
- TestResolver *self = TEST_RESOLVER (object);
- TestResolverPrivate *priv = TEST_RESOLVER_GET_PRIVATE (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- /* release any references held by the object here */
-
- if (G_OBJECT_CLASS (test_resolver_parent_class)->dispose)
- G_OBJECT_CLASS (test_resolver_parent_class)->dispose (object);
-}
-
-void
-test_resolver_finalize (GObject *object)
-{
- G_OBJECT_CLASS (test_resolver_parent_class)->finalize (object);
-}
-
-
-static gboolean test_resolv_srv (GibberResolver *resolver, guint id,
- const gchar *service_name, const char *service,
- GibberResolverServiceType type)
-{
- GList *entries = NULL;
- int i;
-
- for (i = 0 ; i < 20 ; i++)
- {
- gchar *str;
-
- str = g_strdup_printf ("test%2d.example.com", i);
-
- entries = g_list_prepend (entries,
- gibber_resolver_srv_record_new (str, 1234,
- 10 - (i / 5) , 4 - i % 5));
-
- g_free (str);
- }
-
- gibber_resolver_srv_result (resolver, id, entries, NULL);
- return FALSE;
-}
diff --git a/lib/gibber/tests/test-resolver.h b/lib/gibber/tests/test-resolver.h
deleted file mode 100644
index 1d39e4e6..00000000
--- a/lib/gibber/tests/test-resolver.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * test-resolver.h - Header for TestResolver
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __TEST_RESOLVER_H__
-#define __TEST_RESOLVER_H__
-
-#include <glib-object.h>
-#include <gibber/gibber-resolver.h>
-
-G_BEGIN_DECLS
-
-typedef struct _TestResolver TestResolver;
-typedef struct _TestResolverClass TestResolverClass;
-
-struct _TestResolverClass {
- GibberResolverClass parent_class;
-};
-
-struct _TestResolver {
- GibberResolver parent;
-};
-
-GType test_resolver_get_type (void);
-
-/* TYPE MACROS */
-#define TEST_TYPE_RESOLVER \
- (test_resolver_get_type ())
-#define TEST_RESOLVER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), TEST_TYPE_RESOLVER, TestResolver))
-#define TEST_RESOLVER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), TEST_TYPE_RESOLVER, TestResolverClass))
-#define TEST_IS_RESOLVER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), TEST_TYPE_RESOLVER))
-#define TEST_IS_RESOLVER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), TEST_TYPE_RESOLVER))
-#define TEST_RESOLVER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_RESOLVER, TestResolverClass))
-
-
-G_END_DECLS
-
-#endif /* #ifndef __TEST_RESOLVER_H__*/