Changed so that we create a resolver with various arguments depending on type.
Instead of having the lookup_host and lookup_srv virtual methods there is now
only one lookup method and the resolver is created using new_for_host or
new_for_srv instead.
The host or domain/srv values are set as properties on the base class for the
sub classes to read out.
--- a/loudmouth/lm-resolver.c Sun Jul 13 23:22:42 2008 +0200
+++ b/loudmouth/lm-resolver.c Sun Jul 13 23:33:46 2008 +0200
@@ -114,7 +114,6 @@
LmResolverPriv *priv;
priv = GET_PRIV (resolver);
-
}
static void
@@ -183,39 +182,37 @@
}
LmResolver *
-lm_resolver_new (LmResolverCallback callback, gpointer user_data)
+lm_resolver_new_for_host (const gchar *host,
+ LmResolverCallback callback,
+ gpointer user_data)
{
- return NULL;
+ return g_object_new (LM_TYPE_RESOLVER,
+ "type", LM_RESOLVER_HOST,
+ "host", host,
+ NULL);
+}
+
+LmResolver *
+lm_resolver_new_for_srv (const gchar *domain,
+ const gchar *srv,
+ LmResolverCallback callback,
+ gpointer user_data)
+{
+ return g_object_new (LM_TYPE_RESOLVER,
+ "type", LM_RESOLVER_SRV,
+ "domain", domain,
+ "srv", srv,
+ NULL);
}
void
-lm_resolver_lookup_host (LmResolver *resolver, const gchar *host)
+lm_resolver_lookup (LmResolver *resolver)
{
-
- g_object_set (resolver, "host", host, NULL);
-
if (!LM_RESOLVER_GET_CLASS(resolver)) {
g_assert_not_reached ();
}
- LM_RESOLVER_GET_CLASS(resolver)->lookup_host (resolver, host);
-}
-
-void
-lm_resolver_lookup_srv (LmResolver *resolver,
- const gchar *domain,
- const gchar *srv)
-{
- g_object_set (resolver,
- "domain", domain,
- "srv", srv,
- NULL);
-
- if (!LM_RESOLVER_GET_CLASS(resolver)->lookup_srv) {
- g_assert_not_reached ();
- }
-
- LM_RESOLVER_GET_CLASS(resolver)->lookup_srv (resolver, domain, srv);
+ LM_RESOLVER_GET_CLASS(resolver)->lookup (resolver);
}
void
--- a/loudmouth/lm-resolver.h Sun Jul 13 23:22:42 2008 +0200
+++ b/loudmouth/lm-resolver.h Sun Jul 13 23:33:46 2008 +0200
@@ -43,25 +43,27 @@
GObjectClass parent_class;
/* <vtable> */
- void (*lookup_host) (LmResolver *resolver,
- const gchar *host);
- void (*lookup_srv) (LmResolver *resolver,
- const gchar *domain,
- const gchar *srv);
- void (*cancel) (LmResolver *resolver);
+ void (*lookup) (LmResolver *resolver);
+ void (*cancel) (LmResolver *resolver);
};
+typedef enum {
+ LM_RESOLVER_HOST,
+ LM_RESOLVER_SRV
+} LmResolverType;
+
typedef void (*LmResolverCallback) (LmResolver *resolver,
gpointer user_data);
GType lm_resolver_get_type (void);
-LmResolver * lm_resolver_new (LmResolverCallback callback,
+LmResolver * lm_resolver_new_for_host (const gchar *host,
+ LmResolverCallback callback,
gpointer user_data);
-void lm_resolver_lookup_host (LmResolver *resolver,
- const gchar *host);
-void lm_resolver_lookup_srv (LmResolver *resolver,
- const gchar *domain,
- const gchar *srv);
+LmResolver * lm_resolver_new_for_srv (const gchar *domain,
+ const gchar *srv,
+ LmResolverCallback callback,
+ gpointer user_data);
+void lm_resolver_lookup (LmResolver *resolver);
void lm_resolver_cancel (LmResolver *resolver);
G_END_DECLS