src/protocols/oscar/service.c

changeset 5836
88819e4cc840
parent 4901
8a9aebd9897f
child 5837
e75d4061396e
--- a/src/protocols/oscar/service.c	Wed Jun 11 22:46:38 2003 +0000
+++ b/src/protocols/oscar/service.c	Thu Jun 12 03:27:58 2003 +0000
@@ -501,11 +501,13 @@
 	aim_rxcallback_t userfunc;
 	aim_userinfo_t userinfo;
 
-	aim_extractuserinfo(sess, bs, &userinfo);
+	aim_info_extract(sess, bs, &userinfo);
 
 	if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
 		ret = userfunc(sess, rx, &userinfo);
 
+	aim_info_free(&userinfo);
+
 	return ret;
 }
 
@@ -522,11 +524,13 @@
 	newevil = aimbs_get16(bs);
 
 	if (aim_bstream_empty(bs))
-		aim_extractuserinfo(sess, bs, &userinfo);
+		aim_info_extract(sess, bs, &userinfo);
 
 	if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
 		ret = userfunc(sess, rx, newevil, &userinfo);
 
+	aim_info_free(&userinfo);
+
 	return ret;
 }
 
@@ -938,6 +942,30 @@
 	return 0;
 }
 
+/*
+ * Subtype 0x0021 - Receive our extended status
+ *
+ * This is used for MAC non-away "away" messages, and maybe ICQ extended status messages?
+ */
+static int aim_parse_extstatus(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
+{
+	int ret = 0;
+	aim_rxcallback_t userfunc;
+	char *msg = NULL;
+	fu16_t id;
+
+	aimbs_get16(bs); /* 0x0002 */
+	aimbs_get16(bs); /* 0x0404 or 0x0407?  Maybe 0x04 and then a length? */
+	msg = aimbs_getstr(bs, aimbs_get16(bs));
+
+	if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
+		ret = userfunc(sess, rx, msg);
+
+	free(msg);
+
+	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)
 {
 
@@ -965,6 +993,8 @@
 		return hostversions(sess, mod, rx, snac, bs);
 	else if (snac->subtype == 0x001f)
 		return memrequest(sess, mod, rx, snac, bs);
+	else if (snac->subtype == 0x0021)
+		return aim_parse_extstatus(sess, mod, rx, snac, bs);
 
 	return 0;
 }

mercurial