diff src/protocols/rendezvous/rendezvous.c @ 8806:8212661dc3cc

[gaim-migrate @ 9568] I think mDNS records should be caching now... my iBook isn't booting, so I don't really have a way to test it. I need to fix that. I change some stuff from GHashTables to GSLists, I think, which meant changing a lot of code. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 25 Apr 2004 16:23:20 +0000
parents d7b8eb1f0a18
children beb7be215db3
line wrap: on
line diff
--- a/src/protocols/rendezvous/rendezvous.c	Sun Apr 25 13:54:49 2004 +0000
+++ b/src/protocols/rendezvous/rendezvous.c	Sun Apr 25 16:23:20 2004 +0000
@@ -183,14 +183,14 @@
 {
 	RendezvousData *rd = gc->proto_data;
 	RendezvousBuddy *rb;
-	GHashTable *rdata;
-	gchar *tmp1, *tmp2;
+	GSList *rdata;
+	ResourceRecordRDataTXTNode *node1, *node2;
 
 	rdata = rr->rdata;
 
 	/* Don't do a damn thing if the version is greater than 1 */
-	tmp1 = g_hash_table_lookup(rdata, "version");
-	if ((tmp1 == NULL) || (strcmp(tmp1, "1")))
+	node1 = mdns_txt_find(rdata, "version");
+	if ((node1 == NULL) || (node1->value == NULL) || (strcmp(node1->value, "1")))
 		return;
 
 	rb = g_hash_table_lookup(rd->buddies, name);
@@ -199,19 +199,19 @@
 		g_hash_table_insert(rd->buddies, g_strdup(name), rb);
 	}
 
-	tmp1 = g_hash_table_lookup(rdata, "1st");
-	tmp2 = g_hash_table_lookup(rdata, "last");
+	node1 = mdns_txt_find(rdata, "1st");
+	node2 = mdns_txt_find(rdata, "last");
 	g_free(rb->firstandlast);
 	rb->firstandlast = g_strdup_printf("%s%s%s",
-							(tmp1 ? tmp1 : ""),
-							(tmp1 && tmp2 ? " " : ""),
-							(tmp2 ? tmp2 : ""));
+							(node1 && node1->value ? node1->value : ""),
+							(node1 && node1->value && node2 && node2->value ? " " : ""),
+							(node2 && node2->value ? node2->value : ""));
 	serv_got_alias(gc, name, rb->firstandlast);
 
-	tmp1 = g_hash_table_lookup(rdata, "aim");
-	if (tmp1 != NULL) {
+	node1 = mdns_txt_find(rdata, "aim");
+	if ((node1 != NULL) && (node1->value != NULL)) {
 		g_free(rb->aim);
-		rb->aim = g_strdup(tmp1);
+		rb->aim = g_strdup(node1->value);
 	}
 
 	/*
@@ -219,32 +219,35 @@
 	 * is specified in a separate, SRV resource record.
 	 */
 	if (rb->p2pjport == 0) {
-		tmp1 = g_hash_table_lookup(rdata, "port.p2pj");
-		rb->p2pjport = atoi(tmp1);
+		node1 = mdns_txt_find(rdata, "port.p2pj");
+		if ((node1 != NULL) && (node1->value))
+			rb->p2pjport = atoi(node1->value);
 	}
 
-	tmp1 = g_hash_table_lookup(rdata, "status");
-	if (tmp1 != NULL) {
-		if (!strcmp(tmp1, "avail")) {
+	node1 = mdns_txt_find(rdata, "status");;
+	if ((node1 != NULL) && (node1->value != NULL)) {
+		if (!strcmp(node1->value, "avail")) {
 			/* Available */
 			rb->status = 0;
-		} else if (!strcmp(tmp1, "away")) {
+		} else if (!strcmp(node1->value, "away")) {
 			/* Idle */
-			tmp2 = g_hash_table_lookup(rdata, "away");
-			rb->idle = atoi(tmp2);
-			gaim_debug_error("XXX", "User has been idle since %d\n", rb->idle);
+			node2 = mdns_txt_find(rdata, "away");
+			if ((node2 != NULL) && (node2->value)) {
+				rb->idle = atoi(node2->value);
+				gaim_debug_error("XXX", "User has been idle since %d\n", rb->idle);
+			}
 			rb->status = UC_IDLE;
-		} else if (!strcmp(tmp1, "dnd")) {
+		} else if (!strcmp(node1->value, "dnd")) {
 			/* Away */
 			rb->status = UC_UNAVAILABLE;
 		}
 		serv_got_update(gc, name, 1, 0, 0, 0, rb->status);
 	}
 
-	tmp1 = g_hash_table_lookup(rdata, "msg");
-	if (tmp1 != NULL) {
+	node1 = mdns_txt_find(rdata, "msg");
+	if ((node1 != NULL) && (node1->value != NULL)) {
 		g_free(rb->msg);
-		rb->msg = g_strdup(tmp1);
+		rb->msg = g_strdup(node1->value);
 	}
 }
 
@@ -252,7 +255,7 @@
 {
 	RendezvousData *rd = gc->proto_data;
 	RendezvousBuddy *rb;
-	ResourceRecordSRV *rdata;
+	ResourceRecordRDataSRV *rdata;
 
 	rdata = rr->rdata;
 
@@ -392,7 +395,7 @@
 	GaimConnection *gc = data;
 	RendezvousData *rd = gc->proto_data;
 	DNSPacket *dns;
-	int i;
+	GSList *cur;
 
 	gaim_debug_misc("rendezvous", "Received rendezvous datagram\n");
 
@@ -401,12 +404,12 @@
 		return;
 
 	/* Handle the DNS packet */
-	for (i = 0; i < dns->header.numanswers; i++)
-		rendezvous_handle_rr(gc, &dns->answers[i]);
-	for (i = 0; i < dns->header.numauthority; i++)
-		rendezvous_handle_rr(gc, &dns->authority[i]);
-	for (i = 0; i < dns->header.numadditional; i++)
-		rendezvous_handle_rr(gc, &dns->additional[i]);
+	for (cur = dns->answers; cur != NULL; cur = cur->next)
+		rendezvous_handle_rr(gc, cur->data);
+	for (cur = dns->authority; cur != NULL; cur = cur->next)
+		rendezvous_handle_rr(gc, cur->data);
+	for (cur = dns->additional; cur != NULL; cur = cur->next)
+		rendezvous_handle_rr(gc, cur->data);
 
 	mdns_free(dns);
 }