Mon, 22 Nov 2004 22:13:12 +0000
[gaim-migrate @ 11377]
Removing trust parameter for gaim_notify_uri (see gaim-devel over past few
days). Removed URI scheme filtering for win32. Instead we'll allow what ever
the default http browser allows.
| 8738 | 1 | /** |
| 2 | * @file mdns_cache.c Multicast DNS resource record caching code. | |
| 3 | * | |
| 4 | * gaim | |
| 5 | * | |
| 6 | * Gaim is the legal property of its developers, whose names are too numerous | |
| 7 | * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 8 | * source distribution. | |
| 9 | * | |
| 10 | * This program is free software; you can redistribute it and/or modify | |
| 11 | * it under the terms of the GNU General Public License as published by | |
| 12 | * the Free Software Foundation; either version 2 of the License, or | |
| 13 | * (at your option) any later version. | |
| 14 | * | |
| 15 | * This program is distributed in the hope that it will be useful, | |
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 | * GNU General Public License for more details. | |
| 19 | * | |
| 20 | * You should have received a copy of the GNU General Public License | |
| 21 | * along with this program; if not, write to the Free Software | |
| 22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 23 | * | |
| 24 | */ | |
| 25 | ||
| 26 | #include "internal.h" | |
| 27 | ||
| 28 | #include "mdns.h" | |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
29 | #include "mdns_cache.h" |
| 8738 | 30 | |
|
8806
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
31 | GSList *rrs = NULL; |
|
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
32 | |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
33 | static ResourceRecord * |
|
9965
287dfcab1545
[gaim-migrate @ 10874]
Mark Doliner <markdoliner@pidgin.im>
parents:
9944
diff
changeset
|
34 | mdns_cache_find(const gchar *name, unsigned short type) |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
35 | { |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
36 | ResourceRecord *rr; |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
37 | GSList *cur; |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
38 | |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
39 | g_return_val_if_fail(name != NULL, NULL); |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
40 | g_return_val_if_fail((type != 0) || (type != RENDEZVOUS_RRTYPE_ALL), NULL); |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
41 | |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
42 | for (cur = rrs; cur != NULL; cur = cur->next) { |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
43 | rr = cur->data; |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
44 | if ((type == rr->type) && (!strcmp(name, rr->name))) |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
45 | return rr; |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
46 | } |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
47 | |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
48 | return NULL; |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
49 | } |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
50 | |
|
8806
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
51 | void |
|
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
52 | mdns_cache_add(const ResourceRecord *rr) |
|
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
53 | { |
|
9965
287dfcab1545
[gaim-migrate @ 10874]
Mark Doliner <markdoliner@pidgin.im>
parents:
9944
diff
changeset
|
54 | ResourceRecord *new; |
|
287dfcab1545
[gaim-migrate @ 10874]
Mark Doliner <markdoliner@pidgin.im>
parents:
9944
diff
changeset
|
55 | |
|
8806
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
56 | g_return_if_fail(rr != NULL); |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
57 | g_return_if_fail((rr->type != 0) && (rr->type != RENDEZVOUS_RRTYPE_ALL)); |
|
8806
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
58 | |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
59 | mdns_cache_remove(rr->name, rr->type); |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
60 | |
|
8806
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
61 | new = mdns_copy_rr(rr); |
|
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
62 | rrs = g_slist_prepend(rrs, new); |
|
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
63 | } |
|
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
64 | |
|
2dfc3541367e
[gaim-migrate @ 9568]
Mark Doliner <markdoliner@pidgin.im>
parents:
8738
diff
changeset
|
65 | void |
|
9965
287dfcab1545
[gaim-migrate @ 10874]
Mark Doliner <markdoliner@pidgin.im>
parents:
9944
diff
changeset
|
66 | mdns_cache_remove(const gchar *name, unsigned short type) |
| 8738 | 67 | { |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
68 | ResourceRecord *rr; |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
69 | |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
70 | g_return_if_fail(name != NULL); |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
71 | g_return_if_fail((type != 0) && (type != RENDEZVOUS_RRTYPE_ALL)); |
| 8738 | 72 | |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
73 | rr = mdns_cache_find(name, type); |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
74 | if (rr == NULL) |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
75 | return; |
| 8738 | 76 | |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
77 | rrs = g_slist_remove(rrs, rr); |
| 8738 | 78 | mdns_free_rr(rr); |
| 79 | } | |
| 80 | ||
|
9965
287dfcab1545
[gaim-migrate @ 10874]
Mark Doliner <markdoliner@pidgin.im>
parents:
9944
diff
changeset
|
81 | void |
|
287dfcab1545
[gaim-migrate @ 10874]
Mark Doliner <markdoliner@pidgin.im>
parents:
9944
diff
changeset
|
82 | mdns_cache_remove_all() |
| 8738 | 83 | { |
|
9965
287dfcab1545
[gaim-migrate @ 10874]
Mark Doliner <markdoliner@pidgin.im>
parents:
9944
diff
changeset
|
84 | mdns_free_rrs(rrs); |
|
8840
414e20c7c010
[gaim-migrate @ 9607]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
85 | rrs = NULL; |
| 8738 | 86 | } |
| 87 | ||
|
9965
287dfcab1545
[gaim-migrate @ 10874]
Mark Doliner <markdoliner@pidgin.im>
parents:
9944
diff
changeset
|
88 | void |
|
287dfcab1545
[gaim-migrate @ 10874]
Mark Doliner <markdoliner@pidgin.im>
parents:
9944
diff
changeset
|
89 | mdns_cache_respond(int fd, const Question *q) |
| 8738 | 90 | { |
| 91 | GSList *slist; | |
| 92 | ResourceRecord *cur; | |
| 93 | ||
| 94 | g_return_if_fail(q != NULL); | |
| 95 | ||
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
96 | for (slist = rrs; slist != NULL; slist = slist->next) { |
| 8738 | 97 | cur = slist->data; |
|
8840
414e20c7c010
[gaim-migrate @ 9607]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
98 | if (((q->type == RENDEZVOUS_RRTYPE_ALL) || (q->type == cur->type)) && (!strcmp(q->name, cur->name))) { |
|
414e20c7c010
[gaim-migrate @ 9607]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
99 | mdns_send_rr(fd, cur); |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8806
diff
changeset
|
100 | } |
| 8738 | 101 | } |
| 102 | } |