annotate src/protocols/rendezvous/mdns_cache.c @ 8808:bbd8cdaf0ad5

[gaim-migrate @ 9570] A massive patch by shx to reorganize MSN some more and add command processor support. This allows us to do cool things like produce more detailed error messages. For example, the Invalid Username dialog now shows the username of the invalid user. I modified the aforementioned dialog so it'll look a little nicer looking, and also mention the account this happened on. It also removes the user from your blist, as there's no point to keeping the user on there. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 25 Apr 2004 22:02:06 +0000
parents 8212661dc3cc
children beb7be215db3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8738
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1 /**
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
2 * @file mdns_cache.c Multicast DNS resource record caching code.
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
3 *
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
4 * gaim
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
5 *
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
6 * Gaim is the legal property of its developers, whose names are too numerous
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
8 * source distribution.
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
9 *
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
13 * (at your option) any later version.
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
14 *
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
18 * GNU General Public License for more details.
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
19 *
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
23 *
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
24 */
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
25
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
26 #include "internal.h"
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
27 #include "debug.h"
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
28
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
29 #include "mdns.h"
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
30
8806
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
31 /* XXX - Make sure this is freed when we sign off */
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
32 GSList *rrs = NULL;
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
33
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
34 void
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
35 mdns_cache_add(const ResourceRecord *rr)
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
36 {
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
37 ResourceRecord *new;
8738
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
38
8806
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
39 g_return_if_fail(rr != NULL);
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
40
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
41 new = mdns_copy_rr(rr);
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
42
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
43 rrs = g_slist_prepend(rrs, new);
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
44 }
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
45
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
46 void
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
47 mdns_cache_remove(ResourceRecord *rr)
8738
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
48 {
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
49 g_return_if_fail(rr != NULL);
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
50
8806
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
51 rrs = g_slist_remove_all(rrs, rr);
8738
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
52
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
53 mdns_free_rr(rr);
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
54 }
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
55
8806
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
56 void
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
57 mdns_cache_remove_all()
8738
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
58 {
8806
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
59 mdns_free_rrs(rrs);
8738
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
60 }
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
61
8806
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
62 void
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
63 mdns_cache_respond(int fd, const Question *q)
8738
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
64 {
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
65 GSList *slist;
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
66 ResourceRecord *cur;
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
67
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
68 g_return_if_fail(q != NULL);
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
69
8806
8212661dc3cc [gaim-migrate @ 9568]
Mark Doliner <mark@kingant.net>
parents: 8738
diff changeset
70 for (slist = rrs; slist != NULL; slist = g_slist_next(slist)) {
8738
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
71 cur = slist->data;
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
72 if ((q->type == cur->type) && (!strcmp(q->name, cur->name)))
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
73 mdns_send_rr(fd, cur);
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
74 }
dbbf5470ba05 [gaim-migrate @ 9493]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
75 }