view src/protocols/rendezvous/mdns_cache.c @ 8866:c2dff943e240

[gaim-migrate @ 9634] (14:10:22) Faceprint: the timestamp plugin will now mislead users (14:10:54) Me: which way does ichat behave? (14:10:58) Me: i think the new way (14:11:05) Me: but its been some time since i've seen it (14:11:09) Faceprint: i don't know or care, the new behavior will confuse the hell out of people (14:11:22) Faceprint: lets say we have a conversation (14:11:25) Faceprint: 2:00 gets printed by the plugin (14:11:36) Faceprint: then we say nothing for 3 hours (14:11:42) Faceprint: and then one of us says something (14:12:04) Faceprint: that will be printed, and then as many as 5 minutes later, the plugin will print 5:05 (14:12:23) Me: yes yes yes, i see both sides of this one. i tend to think the new behavior is better, but i'll revert it (14:12:36) Faceprint: since "normal" timestamps are turned off, it appears as though what was just said was said around 2 (14:12:43) Faceprint: no, don't revert, fix (14:12:53) Faceprint: preferably, make the patch writer fix (14:12:57) Me: *nods* (14:13:06) Me: which requires reverting since otherwise he won't be motivated (14:13:13) Faceprint: if something is said and we've gone more than 5 min w/o printing a timestamp, print a timestamp before writing to the conv committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Mon, 03 May 2004 18:13:39 +0000
parents ad3633f92f91
children e4a27c9aec4c
line wrap: on
line source

/**
 * @file mdns_cache.c Multicast DNS resource record caching code.
 *
 * gaim
 *
 * Gaim is the legal property of its developers, whose names are too numerous
 * to list here.  Please refer to the COPYRIGHT file distributed with this
 * source distribution.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#include "internal.h"

#include "mdns.h"
#include "mdns_cache.h"

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);

	new = mdns_copy_rr(rr);
	rrs = g_slist_prepend(rrs, new);
}

void
mdns_cache_remove(gchar *name, unsigned short type)
{
	ResourceRecord *rr;

	g_return_if_fail(name != NULL);
	g_return_if_fail((type != 0) && (type != RENDEZVOUS_RRTYPE_ALL));

	rr = mdns_cache_find(name, type);
	if (rr == NULL)
		return;

	rrs = g_slist_remove(rrs, rr);
	mdns_free_rr(rr);
}

void
mdns_cache_remove_all()
{
	mdns_free_rrs(rrs);
	rrs = NULL;
}

void
mdns_cache_respond(int fd, const Question *q)
{
	GSList *slist;
	ResourceRecord *cur;

	g_return_if_fail(q != NULL);

	for (slist = rrs; slist != NULL; slist = slist->next) {
		cur = slist->data;
		if (((q->type == RENDEZVOUS_RRTYPE_ALL) || (q->type == cur->type)) && (!strcmp(q->name, cur->name))) {
			mdns_send_rr(fd, cur);
		}
	}
}