view src/protocols/oscar/popups.c @ 4829:e7e45cee4265

[gaim-migrate @ 5154] This does 3 things: 1) Removes the "Get Capabilities" option which I re-added a few hours ago. We decided that it's pointless, since caps are in the tooltips. It also needlessly complicates things. 2) Adds an "unable to add this buddy because you are over the limit" message that is currently commented out. We have some sort of a message like this right now, but it's less good. If you really want to know why, ask me. 3) Adds a workaround for the bug where some users tooltips do not show capabilities sometimes. This is really an AIM bug, honest. Gaim is getting status updates for people that don't contain their capabilities. I guess it's probably intentional. I imagine it saves a bit o' bandwidth, since each capability is 16 bytes. [Insert humorous phrase or catch song lyric here] committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Wed, 19 Mar 2003 02:52:42 +0000
parents 07283934dedd
children 6d3d8f11e765
line wrap: on
line source

/*
 * Family 0x0008 - Popups.
 *
 * Popups are just what it sounds like.  They're a way for the server to
 * open up an informative box on the client's screen.
 */

#define FAIM_INTERNAL
#include <aim.h>

/*
 * This is all there is to it.
 *
 * The message is probably HTML.
 * 
 */
static int parsepopup(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
{
	aim_rxcallback_t userfunc;
	aim_tlvlist_t *tl;
	int ret = 0;
	char *msg, *url;
	fu16_t width, height, delay;

	tl = aim_readtlvchain(bs);

	msg = aim_gettlv_str(tl, 0x0001, 1);
	url = aim_gettlv_str(tl, 0x0002, 1);
	width = aim_gettlv16(tl, 0x0003, 1);
	height = aim_gettlv16(tl, 0x0004, 1);
	delay = aim_gettlv16(tl, 0x0005, 1);

	if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
		ret = userfunc(sess, rx, msg, url, width, height, delay);

	aim_freetlvchain(&tl);
	free(msg);
	free(url);

	return ret;
}

static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
{

	if (snac->subtype == 0x0002)
		return parsepopup(sess, mod, rx, snac, bs);

	return 0;
}

faim_internal int popups_modfirst(aim_session_t *sess, aim_module_t *mod)
{

	mod->family = 0x0008;
	mod->version = 0x0001;
	mod->toolid = 0x0104;
	mod->toolversion = 0x0001;
	mod->flags = 0;
	strncpy(mod->name, "popups", sizeof(mod->name));
	mod->snachandler = snachandler;

	return 0;
}