Improved the resolvers a bit.
LmOldSocket currently creates a new resolver when doing a host lookup after a successful srv lookup.
--- a/loudmouth/lm-asyncns-resolver.c Sat Oct 25 16:37:41 2008 +0200
+++ b/loudmouth/lm-asyncns-resolver.c Sat Oct 25 20:09:25 2008 +0200
@@ -229,7 +229,7 @@
{
LmAsyncnsResolverPriv *priv = GET_PRIV (resolver);
unsigned char *srv_ans;
- int srv_len;
+ int srv_len;
gboolean result = FALSE;
g_print ("srv_done callback\n");
@@ -266,9 +266,11 @@
}
asyncns_resolver_cleanup (resolver);
-
+
if (result == TRUE) {
- asyncns_resolver_lookup_host (resolver);
+ g_object_ref (resolver);
+ _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_OK, NULL);
+ g_object_unref (resolver);
}
}
@@ -281,7 +283,6 @@
gchar *protocol;
gchar *srv;
-
g_object_get (resolver,
"domain", &domain,
"service", &service,
@@ -290,7 +291,7 @@
srv = _lm_resolver_create_srv_string (domain, service, protocol);
- g_print ("Looking up service: %s %s %s\n[%s]", domain, service, protocol, srv);
+ g_print ("ASYNCNS: Looking up service: %s %s %s\n[%s]", domain, service, protocol, srv);
if (!asyncns_resolver_prep (resolver, /* Use GError? */ NULL)) {
g_warning ("Failed to initiate the asyncns library");
--- a/loudmouth/lm-blocking-resolver.c Sat Oct 25 16:37:41 2008 +0200
+++ b/loudmouth/lm-blocking-resolver.c Sat Oct 25 20:09:25 2008 +0200
@@ -110,6 +110,10 @@
if (err != 0) {
/* FIXME: Report error */
g_print ("ERROR: %d in %s\n", err, G_STRFUNC);
+
+ _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_FAILED,
+ NULL);
+
return;
}
@@ -117,6 +121,11 @@
/* Couldn't find any results */
/* FIXME: Report no results */
g_print ("No results in %s\n", G_STRFUNC);
+
+ _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_FAILED,
+ NULL);
+
+ return;
}
/* FIXME: How to set and iterate the results */
@@ -173,8 +182,12 @@
"port", new_port,
NULL);
+ g_object_ref (resolver);
+ _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_OK, NULL);
+ g_object_unref (resolver);
+
/* Lookup the new server and the new port */
- blocking_resolver_lookup_host (resolver);
+ /* blocking_resolver_lookup_host (resolver); */
g_free (new_server);
g_free (srv);
--- a/loudmouth/lm-old-socket.c Sat Oct 25 16:37:41 2008 +0200
+++ b/loudmouth/lm-old-socket.c Sat Oct 25 20:09:25 2008 +0200
@@ -49,11 +49,6 @@
#include "lm-sock.h"
#include "lm-old-socket.h"
-#ifdef HAVE_ASYNCNS
-#include <asyncns.h>
-#define freeaddrinfo(x) asyncns_freeaddrinfo(x)
-#endif
-
#define IN_BUFFER_SIZE 1024
#define SRV_LEN 8192
@@ -93,13 +88,6 @@
guint ref_count;
LmResolver *resolver;
-
-#ifdef HAVE_ASYNCNS
- GSource *watch_resolv;
- asyncns_query_t *resolv_query;
- asyncns_t *asyncns_ctx;
- GIOChannel *resolv_channel;
-#endif
};
static void socket_free (LmOldSocket *socket);
@@ -764,6 +752,32 @@
_lm_sock_close (fd);
}
+static void
+old_socket_resolver_host_cb (LmResolver *resolver,
+ LmResolverResult result,
+ gpointer user_data)
+{
+ LmOldSocket *socket = (LmOldSocket *) user_data;
+
+ if (result != LM_RESOLVER_RESULT_OK) {
+ lm_verbose ("error while resolving, bailing out\n");
+ if (socket->connect_func) {
+ (socket->connect_func) (socket, FALSE, socket->user_data);
+ }
+ g_object_unref (socket->resolver);
+ socket->resolver = NULL;
+ g_free (socket->connect_data);
+ socket->connect_data = NULL;
+
+ return;
+ }
+
+ socket->connect_data->current_addr =
+ lm_resolver_results_get_next (resolver);
+
+ socket_do_connect (socket->connect_data);
+}
+
/* FIXME: Need to have a way to only get srv reply and then decide if the
* resolver should continue to look the host up.
*
@@ -791,40 +805,17 @@
} else {
remote_addr = socket->server;
}
+
+ g_object_unref (socket->resolver);
+
+ socket->resolver =
+ lm_resolver_new_for_host (remote_addr,
+ old_socket_resolver_host_cb,
+ socket);
- g_object_set (resolver,
- "host", remote_addr,
- "type", LM_RESOLVER_HOST,
- NULL);
-
- lm_resolver_lookup (resolver);
+ lm_resolver_lookup (socket->resolver);
}
-static void
-old_socket_resolver_host_cb (LmResolver *resolver,
- LmResolverResult result,
- gpointer user_data)
-{
- LmOldSocket *socket = (LmOldSocket *) user_data;
-
- if (result != LM_RESOLVER_RESULT_OK) {
- lm_verbose ("error while resolving, bailing out\n");
- if (socket->connect_func) {
- (socket->connect_func) (socket, FALSE, socket->user_data);
- }
- g_object_unref (socket->resolver);
- socket->resolver = NULL;
- g_free (socket->connect_data);
- socket->connect_data = NULL;
-
- return;
- }
-
- socket->connect_data->current_addr =
- lm_resolver_results_get_next (resolver);
-
- socket_do_connect (socket->connect_data);
-}
LmOldSocket *
lm_old_socket_create (GMainContext *context,
--- a/loudmouth/lm-resolver.c Sat Oct 25 16:37:41 2008 +0200
+++ b/loudmouth/lm-resolver.c Sat Oct 25 20:09:25 2008 +0200
@@ -276,7 +276,7 @@
{
LmResolver *resolver;
-#if HAVE_ASYNCNS
+#ifdef HAVE_ASYNCNS
resolver = g_object_new (LM_TYPE_ASYNCNS_RESOLVER, NULL);
#else
resolver = g_object_new (LM_TYPE_BLOCKING_RESOLVER, NULL);
@@ -287,6 +287,16 @@
return resolver;
}
+static GType
+resolver_get_gtype (void)
+{
+#ifdef HAVE_ASYNCNS
+ return LM_TYPE_ASYNCNS_RESOLVER;
+#else
+ return LM_TYPE_BLOCKING_RESOLVER;
+#endif /* HAVE_ASYNCNS */
+}
+
LmResolver *
lm_resolver_new_for_host (const gchar *host,
LmResolverCallback callback,
@@ -298,7 +308,7 @@
g_return_val_if_fail (host != NULL, NULL);
g_return_val_if_fail (callback != NULL, NULL);
- resolver = g_object_new (LM_TYPE_ASYNCNS_RESOLVER,
+ resolver = g_object_new (resolver_get_gtype (),
"type", LM_RESOLVER_HOST,
"host", host,
NULL);
@@ -326,7 +336,7 @@
g_return_val_if_fail (protocol != NULL, NULL);
g_return_val_if_fail (callback != NULL, NULL);
- resolver = g_object_new (LM_TYPE_ASYNCNS_RESOLVER,
+ resolver = g_object_new (resolver_get_gtype (),
"type", LM_RESOLVER_SRV,
"domain", domain,
"service", service,
@@ -352,14 +362,6 @@
}
void
-lm_resolver_lookup_host (LmResolver *resolver, const gchar *host)
-{}
-
-void
-lm_resolver_lookup_srv (LmResolver *resolver, const gchar *srv)
-{}
-
-void
lm_resolver_cancel (LmResolver *resolver)
{
if (!LM_RESOLVER_GET_CLASS(resolver)->cancel) {
--- a/loudmouth/lm-resolver.h Sat Oct 25 16:37:41 2008 +0200
+++ b/loudmouth/lm-resolver.h Sat Oct 25 20:09:25 2008 +0200
@@ -65,13 +65,6 @@
GType lm_resolver_get_type (void);
LmResolver * lm_resolver_new (GMainContext *context);
-
-void lm_resolver_lookup_host (LmResolver *resolver,
- const gchar *host);
-void lm_resolver_lookup_srv (LmResolver *resolver,
- const gchar *srv);
-
-
LmResolver * lm_resolver_new_for_host (const gchar *host,
LmResolverCallback callback,
gpointer user_data);