Changed so that we create a resolver with various arguments depending on type.
authorMikael Hallendal <micke@imendio.com>
Sun, 13 Jul 2008 23:33:46 +0200
changeset 454 18ffac09f030
parent 453 deebf7d6750b
child 455 d42ef653a60c
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.
loudmouth/lm-resolver.c
loudmouth/lm-resolver.h
--- 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