Mercurial > pidgin.yaz
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); + } } }