diff src/protocols/rendezvous/mdns_cache.c @ 8834:beb7be215db3

[gaim-migrate @ 9598] I removed account->ip because it isn't used anywhere and I think it's dumb. Also added handling for a and aaaa records to rendezvous. Gaim peeps show up in iChat rendezvous lists now. There are still problems. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Wed, 28 Apr 2004 00:48:21 +0000
parents 8212661dc3cc
children 01c3db200c8f
line wrap: on
line diff
--- a/src/protocols/rendezvous/mdns_cache.c	Tue Apr 27 23:17:12 2004 +0000
+++ b/src/protocols/rendezvous/mdns_cache.c	Wed Apr 28 00:48:21 2004 +0000
@@ -27,29 +27,56 @@
 #include "debug.h"
 
 #include "mdns.h"
+#include "mdns_cache.h"
 
-/* XXX - Make sure this is freed when we sign off */
 GSList *rrs = NULL;
 
+static ResourceRecord *
+mdns_cache_find(gchar *name, unsigned short type)
+{
+	ResourceRecord *rr;
+	GSList *cur;
+
+	g_return_val_if_fail(name != NULL, NULL);
+	g_return_val_if_fail((type != 0) || (type != RENDEZVOUS_RRTYPE_ALL), NULL);
+
+	for (cur = rrs; cur != NULL; cur = cur->next) {
+		rr = cur->data;
+		if ((type == rr->type) && (!strcmp(name, rr->name)))
+			return rr;
+	}
+
+	return NULL;
+}
+
 void
 mdns_cache_add(const ResourceRecord *rr)
 {
 	ResourceRecord *new;
 
 	g_return_if_fail(rr != NULL);
+	g_return_if_fail((rr->type != 0) && (rr->type != RENDEZVOUS_RRTYPE_ALL));
 
+	mdns_cache_remove(rr->name, rr->type);
+
+	printf("caching %d\n", rr->type);
 	new = mdns_copy_rr(rr);
-
 	rrs = g_slist_prepend(rrs, new);
 }
 
 void
-mdns_cache_remove(ResourceRecord *rr)
+mdns_cache_remove(gchar *name, unsigned short type)
 {
-	g_return_if_fail(rr != NULL);
+	ResourceRecord *rr;
+
+	g_return_if_fail(name != NULL);
+	g_return_if_fail((type != 0) && (type != RENDEZVOUS_RRTYPE_ALL));
 
-	rrs = g_slist_remove_all(rrs, rr);
+	rr = mdns_cache_find(name, type);
+	if (rr == NULL)
+		return;
 
+	rrs = g_slist_remove(rrs, rr);
 	mdns_free_rr(rr);
 }
 
@@ -66,10 +93,13 @@
 	ResourceRecord *cur;
 
 	g_return_if_fail(q != NULL);
+	printf("query for q->type=%d, q->name=%s\n", q->type, q->name);
 
-	for (slist = rrs; slist != NULL; slist = g_slist_next(slist)) {
+	for (slist = rrs; slist != NULL; slist = slist->next) {
 		cur = slist->data;
-		if ((q->type == cur->type) && (!strcmp(q->name, cur->name)))
-			mdns_send_rr(fd, cur);
+		if ((q->type == cur->type) && (!strcmp(q->name, cur->name))) {
+			printf("responding to cur->type=%d, cur->name=%s\n", cur->type, cur->name);
+			//mdns_send_rr(fd, cur);
+		}
 	}
 }