--- a/loudmouth/lm-blocking-resolver.c Mon Jul 14 00:48:04 2008 +0200
+++ b/loudmouth/lm-blocking-resolver.c Mon Jul 14 01:10:57 2008 +0200
@@ -72,14 +72,52 @@
(G_OBJECT_CLASS (lm_blocking_resolver_parent_class)->finalize) (object);
}
+static void
+blocking_resolver_lookup_host (LmBlockingResolver *resolver)
+{
+}
+
+static void
+blocking_resolver_lookup_service (LmBlockingResolver *resolver)
+{
+ gchar *domain;
+ gchar *service;
+ gchar *protocol;
+ gchar *srv;
+
+ g_object_get (resolver,
+ "domain", &domain,
+ "service", &service,
+ "protocol", &protocol,
+ NULL);
+
+ srv = lm_resolver_create_srv_string (domain, service, protocol);
+
+ g_free (srv);
+ g_free (domain);
+ g_free (service);
+ g_free (protocol);
+}
+
static gboolean
blocking_resolver_idle_lookup (LmBlockingResolver *resolver)
{
LmBlockingResolverPriv *priv = GET_PRIV (resolver);
+ gint type;
/* Start the DNS querying */
+ /* Decide if we are going to lookup a srv or host */
+ g_object_get (resolver, "type", &type, NULL);
+ switch (type) {
+ case LM_RESOLVER_HOST:
+ blocking_resolver_lookup_host (resolver);
+ break;
+ case LM_RESOLVER_SRV:
+ blocking_resolver_lookup_service (resolver);
+ break;
+ };
/* End of DNS querying */
priv->idle_id = 0;
--- a/loudmouth/lm-resolver.c Mon Jul 14 00:48:04 2008 +0200
+++ b/loudmouth/lm-resolver.c Mon Jul 14 01:10:57 2008 +0200
@@ -30,22 +30,25 @@
LmResolverCallback callback;
gpointer user_data;
- /* Properties */
+ /* -- Properties -- */
LmResolverType type;
gchar *host;
+
+ /* For SRV lookups */
gchar *domain;
- gchar *srv;
+ gchar *service;
+ gchar *protocol;
};
static void resolver_finalize (GObject *object);
static void resolver_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec);
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
static void resolver_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec);
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
G_DEFINE_TYPE (LmResolver, lm_resolver, G_TYPE_OBJECT)
@@ -54,16 +57,10 @@
PROP_TYPE,
PROP_HOST,
PROP_DOMAIN,
- PROP_SRV
+ PROP_SERVICE,
+ PROP_PROTOCOL
};
-enum {
- SIGNAL_NAME,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
static void
lm_resolver_class_init (LmResolverClass *class)
{
@@ -100,23 +97,21 @@
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
- PROP_SRV,
- g_param_spec_string ("srv",
- "Srv",
+ PROP_SERVICE,
+ g_param_spec_string ("service",
+ "Service",
"Service to lookup",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
- signals[SIGNAL_NAME] =
- g_signal_new ("signal-name",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- lm_marshal_VOID__INT,
- G_TYPE_NONE,
- 1, G_TYPE_INT);
-
+ g_object_class_install_property (object_class,
+ PROP_PROTOCOL,
+ g_param_spec_string ("protocol",
+ "Protocol",
+ "Protocol for SRV lookup",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
g_type_class_add_private (object_class, sizeof (LmResolverPriv));
}
@@ -135,6 +130,11 @@
priv = GET_PRIV (object);
+ g_free (priv->host);
+ g_free (priv->domain);
+ g_free (priv->service);
+ g_free (priv->protocol);
+
(G_OBJECT_CLASS (lm_resolver_parent_class)->finalize) (object);
}
@@ -158,8 +158,11 @@
case PROP_DOMAIN:
g_value_set_string (value, priv->domain);
break;
- case PROP_SRV:
- g_value_set_string (value, priv->srv);
+ case PROP_SERVICE:
+ g_value_set_string (value, priv->service);
+ break;
+ case PROP_PROTOCOL:
+ g_value_set_string (value, priv->protocol);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
@@ -189,9 +192,13 @@
g_free (priv->domain);
priv->domain = g_value_dup_string (value);
break;
- case PROP_SRV:
- g_free (priv->srv);
- priv->srv = g_value_dup_string (value);
+ case PROP_SERVICE:
+ g_free (priv->service);
+ priv->service = g_value_dup_string (value);
+ break;
+ case PROP_PROTOCOL:
+ g_free (priv->protocol);
+ priv->protocol = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
@@ -204,6 +211,9 @@
LmResolverCallback callback,
gpointer user_data)
{
+ g_return_val_if_fail (host != NULL, NULL);
+ g_return_val_if_fail (callback != NULL, NULL);
+
return g_object_new (LM_TYPE_RESOLVER,
"type", LM_RESOLVER_HOST,
"host", host,
@@ -211,15 +221,22 @@
}
LmResolver *
-lm_resolver_new_for_srv (const gchar *domain,
- const gchar *srv,
- LmResolverCallback callback,
- gpointer user_data)
+lm_resolver_new_for_service (const gchar *domain,
+ const gchar *service,
+ const gchar *protocol,
+ LmResolverCallback callback,
+ gpointer user_data)
{
+ g_return_val_if_fail (domain != NULL, NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+ g_return_val_if_fail (protocol != NULL, NULL);
+ g_return_val_if_fail (callback != NULL, NULL);
+
return g_object_new (LM_TYPE_RESOLVER,
"type", LM_RESOLVER_SRV,
"domain", domain,
- "srv", srv,
+ "service", service,
+ "protocol", protocol,
NULL);
}
@@ -243,3 +260,15 @@
LM_RESOLVER_GET_CLASS(resolver)->cancel (resolver);
}
+gchar *
+lm_resolver_create_srv_string (const gchar *domain,
+ const gchar *service,
+ const gchar *protocol)
+{
+ g_return_val_if_fail (domain != NULL, NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+ g_return_val_if_fail (protocol != NULL, NULL);
+
+ return g_strdup_printf ("_%s._%s.%s", service, protocol, domain);
+}
+