view src/protocols/oscar/popups.c @ 4333:cc2f780c0505

[gaim-migrate @ 4597] I needed to make gc->login_time set before do_proto_menu was called, so I moved that line into account_online instead of serv_finish_login. serv_finish_login is called directly after account_online, and gc->login_time isn't used for anything anyway, so it shouldn't matter. I use gc->login_time to determine if a gc's protocol actions menu is ready to be drawn or not (should not be draw for accounts that are in the process of signing online). I made the "Show Buddies Awaiting Authorization" thing show something reasonable for when you aren't waiting for authorization from anyone. I swapped the ok and cancel buttons for the search for buddy by information and clear log file so they follow the HIG. I gave the right side of the log viewer a shadowed border. I Robot. I applied a patch from Ryan McCabe that doesn't really do anything for gaim (yet, anyway), but it allows clients using libfaim to call cleansnacs cleanly, which stops a potential build up of SNACs in memory when you don't send an IM for a long period of time. I applied another patch from Mr. McCabe that fixes a potential crash in ssi.c when your buddy list is a few lions short of a pride, if you know what I mean. I re-prettified an authorization dialog or two. The bold stuff and the non-bold stuff got backwardcised somehow. I added support for those messages from the ICQ server. Like the one that tells you not to give your password to anyone when you first signon. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sat, 18 Jan 2003 01:58:00 +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;
}