diff src/protocols/oscar/popups.c @ 2673:81d658e6ac1e

[gaim-migrate @ 2686] my back hurts. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 05 Nov 2001 08:25:10 +0000
parents c41030cfed76
children 07283934dedd
line wrap: on
line diff
--- a/src/protocols/oscar/popups.c	Mon Nov 05 02:05:06 2001 +0000
+++ b/src/protocols/oscar/popups.c	Mon Nov 05 08:25:10 2001 +0000
@@ -1,10 +1,53 @@
+
 /*
- * This might be fun to implement. Right? Maybe not. 
+ * 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)
 {
 
@@ -14,7 +57,7 @@
 	mod->toolversion = 0x0001;
 	mod->flags = 0;
 	strncpy(mod->name, "popups", sizeof(mod->name));
-	mod->snachandler = NULL;
+	mod->snachandler = snachandler;
 
 	return 0;
 }