--- a/src/protocols/oscar/misc.c Tue Nov 12 03:40:19 2002 +0000 +++ b/src/protocols/oscar/misc.c Wed Nov 13 07:01:37 2002 +0000 @@ -1,13 +1,8 @@ - /* - * aim_misc.c + * misc.c * - * TODO: Seperate a lot of this into an aim_bos.c. - * - * Other things... - * - * - Idle setting - * + * Random stuff. Basically just a few functions for sending + * simple SNACs, and then the generic error handler. * */ @@ -15,155 +10,6 @@ #include <aim.h> /* - * aim_bos_setbuddylist(buddylist) - * - * This just builds the "set buddy list" command then queues it. - * - * buddy_list = "Screen Name One&ScreenNameTwo&"; - * - * TODO: Clean this up. - * - * XXX: I can't stress the TODO enough. - * - */ -faim_export int aim_bos_setbuddylist(aim_session_t *sess, aim_conn_t *conn, const char *buddy_list) -{ - aim_frame_t *fr; - aim_snacid_t snacid; - int len = 0; - char *localcpy = NULL; - char *tmpptr = NULL; - - if (!buddy_list || !(localcpy = strdup(buddy_list))) - return -EINVAL; - - for (tmpptr = strtok(localcpy, "&"); tmpptr; ) { - faimdprintf(sess, 2, "---adding: %s (%d)\n", tmpptr, strlen(tmpptr)); - len += 1 + strlen(tmpptr); - tmpptr = strtok(NULL, "&"); - } - - if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+len))) - return -ENOMEM; - - snacid = aim_cachesnac(sess, 0x0003, 0x0004, 0x0000, NULL, 0); - aim_putsnac(&fr->data, 0x0003, 0x0004, 0x0000, snacid); - - strncpy(localcpy, buddy_list, strlen(buddy_list) + 1); - - for (tmpptr = strtok(localcpy, "&"); tmpptr; ) { - - faimdprintf(sess, 2, "---adding: %s (%d)\n", tmpptr, strlen(tmpptr)); - - aimbs_put8(&fr->data, strlen(tmpptr)); - aimbs_putraw(&fr->data, tmpptr, strlen(tmpptr)); - tmpptr = strtok(NULL, "&"); - } - - aim_tx_enqueue(sess, fr); - - free(localcpy); - - return 0; -} - -/* - * aim_bos_setprofile(profile) - * - * Gives BOS your profile. - * - */ -faim_export int aim_bos_setprofile(aim_session_t *sess, aim_conn_t *conn, const char *profile, const char *awaymsg, fu32_t caps) -{ - static const char defencoding[] = {"text/aolrtf; charset=\"us-ascii\""}; - aim_frame_t *fr; - aim_tlvlist_t *tl = NULL; - aim_snacid_t snacid; - - /* Build to packet first to get real length */ - if (profile) { - aim_addtlvtochain_raw(&tl, 0x0001, strlen(defencoding), defencoding); - aim_addtlvtochain_raw(&tl, 0x0002, strlen(profile), profile); - } - - /* - * So here's how this works: - * - You are away when you have a non-zero-length type 4 TLV stored. - * - You become unaway when you clear the TLV with a zero-length - * type 4 TLV. - * - If you do not send the type 4 TLV, your status does not change - * (that is, if you were away, you'll remain away). - */ - if (awaymsg) { - if (strlen(awaymsg)) { - aim_addtlvtochain_raw(&tl, 0x0003, strlen(defencoding), defencoding); - aim_addtlvtochain_raw(&tl, 0x0004, strlen(awaymsg), awaymsg); - } else - aim_addtlvtochain_noval(&tl, 0x0004); - } - - aim_addtlvtochain_caps(&tl, 0x0005, caps); - - if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + aim_sizetlvchain(&tl)))) - return -ENOMEM; - - snacid = aim_cachesnac(sess, 0x0002, 0x0004, 0x0000, NULL, 0); - - aim_putsnac(&fr->data, 0x0002, 0x004, 0x0000, snacid); - aim_writetlvchain(&fr->data, &tl); - aim_freetlvchain(&tl); - - aim_tx_enqueue(sess, fr); - - return 0; -} - -/* - * aim_bos_reqbuddyrights() - * - * Request Buddy List rights. - * - */ -faim_export int aim_bos_reqbuddyrights(aim_session_t *sess, aim_conn_t *conn) -{ - return aim_genericreq_n(sess, conn, 0x0003, 0x0002); -} - -/* - * Send a warning to destsn. - * - * Flags: - * AIM_WARN_ANON Send as an anonymous (doesn't count as much) - * - * returns -1 on error (couldn't alloc packet), 0 on success. - * - */ -faim_export int aim_send_warning(aim_session_t *sess, aim_conn_t *conn, const char *destsn, fu32_t flags) -{ - aim_frame_t *fr; - aim_snacid_t snacid; - fu16_t outflags = 0x0000; - - if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, strlen(destsn)+13))) - return -ENOMEM; - - snacid = aim_cachesnac(sess, 0x0004, 0x0008, 0x0000, destsn, strlen(destsn)+1); - - aim_putsnac(&fr->data, 0x0004, 0x0008, 0x0000, snacid); - - if (flags & AIM_WARN_ANON) - outflags |= 0x0001; - - aimbs_put16(&fr->data, outflags); - aimbs_put8(&fr->data, strlen(destsn)); - aimbs_putraw(&fr->data, destsn, strlen(destsn)); - - aim_tx_enqueue(sess, fr); - - return 0; -} - -/* * Generic routine for sending commands. * * @@ -249,102 +95,6 @@ } /* - * aim_bos_reqlocaterights() - * - * Request Location services rights. - * - */ -faim_export int aim_bos_reqlocaterights(aim_session_t *sess, aim_conn_t *conn) -{ - return aim_genericreq_n(sess, conn, 0x0002, 0x0002); -} - -/* - * Set directory profile data (not the same as aim_bos_setprofile!) - * - * privacy: 1 to allow searching, 0 to disallow. - */ -faim_export int aim_setdirectoryinfo(aim_session_t *sess, aim_conn_t *conn, const char *first, const char *middle, const char *last, const char *maiden, const char *nickname, const char *street, const char *city, const char *state, const char *zip, int country, fu16_t privacy) -{ - aim_frame_t *fr; - aim_snacid_t snacid; - aim_tlvlist_t *tl = NULL; - - - aim_addtlvtochain16(&tl, 0x000a, privacy); - - if (first) - aim_addtlvtochain_raw(&tl, 0x0001, strlen(first), first); - if (last) - aim_addtlvtochain_raw(&tl, 0x0002, strlen(last), last); - if (middle) - aim_addtlvtochain_raw(&tl, 0x0003, strlen(middle), middle); - if (maiden) - aim_addtlvtochain_raw(&tl, 0x0004, strlen(maiden), maiden); - - if (state) - aim_addtlvtochain_raw(&tl, 0x0007, strlen(state), state); - if (city) - aim_addtlvtochain_raw(&tl, 0x0008, strlen(city), city); - - if (nickname) - aim_addtlvtochain_raw(&tl, 0x000c, strlen(nickname), nickname); - if (zip) - aim_addtlvtochain_raw(&tl, 0x000d, strlen(zip), zip); - - if (street) - aim_addtlvtochain_raw(&tl, 0x0021, strlen(street), street); - - if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+aim_sizetlvchain(&tl)))) - return -ENOMEM; - - snacid = aim_cachesnac(sess, 0x0002, 0x0009, 0x0000, NULL, 0); - - aim_putsnac(&fr->data, 0x0002, 0x0009, 0x0000, snacid); - aim_writetlvchain(&fr->data, &tl); - aim_freetlvchain(&tl); - - aim_tx_enqueue(sess, fr); - - return 0; -} - -/* XXX pass these in better */ -faim_export int aim_setuserinterests(aim_session_t *sess, aim_conn_t *conn, const char *interest1, const char *interest2, const char *interest3, const char *interest4, const char *interest5, fu16_t privacy) -{ - aim_frame_t *fr; - aim_snacid_t snacid; - aim_tlvlist_t *tl = NULL; - - /* ?? privacy ?? */ - aim_addtlvtochain16(&tl, 0x000a, privacy); - - if (interest1) - aim_addtlvtochain_raw(&tl, 0x0000b, strlen(interest1), interest1); - if (interest2) - aim_addtlvtochain_raw(&tl, 0x0000b, strlen(interest2), interest2); - if (interest3) - aim_addtlvtochain_raw(&tl, 0x0000b, strlen(interest3), interest3); - if (interest4) - aim_addtlvtochain_raw(&tl, 0x0000b, strlen(interest4), interest4); - if (interest5) - aim_addtlvtochain_raw(&tl, 0x0000b, strlen(interest5), interest5); - - if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+aim_sizetlvchain(&tl)))) - return -ENOMEM; - - snacid = aim_cachesnac(sess, 0x0002, 0x000f, 0x0000, NULL, 0); - - aim_putsnac(&fr->data, 0x0002, 0x000f, 0x0000, 0); - aim_writetlvchain(&fr->data, &tl); - aim_freetlvchain(&tl); - - aim_tx_enqueue(sess, fr); - - return 0; -} - -/* * Should be generic enough to handle the errors for all groups. * */ @@ -396,5 +146,3 @@ return 0; } - -