static void yahoo_conf_invite(PurpleConnection *gc, PurpleConversation *c, const char *dn, const char *buddy, const char *room, const char *msg) { YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; GList *members; char *msg2 = NULL; if (msg) msg2 = yahoo_string_encode(gc, msg, NULL); members = purple_conv_chat_get_users(PURPLE_CONV_CHAT(c)); pkt = yahoo_packet_new(YAHOO_SERVICE_CONFADDINVITE, YAHOO_STATUS_AVAILABLE, yd->session_id); yahoo_packet_hash(pkt, "sssss", 1, dn, 51, buddy, 57, room, 58, msg?msg2:"", 13, "0"); for(; members; members = members->next) { const char *name = purple_conv_chat_cb_get_name(members->data); if (!strcmp(name, dn)) continue; yahoo_packet_hash(pkt, "ss", 52, name, 53, name); } yahoo_packet_send_and_free(pkt, yd); g_free(msg2); }
static int yahoo_conf_send(PurpleConnection *gc, const char *dn, const char *room, GList *members, const char *what) { YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; GList *who; char *msg, *msg2; int utf8 = 1; msg = yahoo_html_to_codes(what); msg2 = yahoo_string_encode(gc, msg, &utf8); pkt = yahoo_packet_new(YAHOO_SERVICE_CONFMSG, YAHOO_STATUS_AVAILABLE, yd->session_id); yahoo_packet_hash_str(pkt, 1, dn); for (who = members; who; who = who->next) { const char *name = purple_conv_chat_cb_get_name(who->data); yahoo_packet_hash_str(pkt, 53, name); } yahoo_packet_hash(pkt, "ss", 57, room, 14, msg2); if (utf8) yahoo_packet_hash_str(pkt, 97, "1"); /* utf-8 */ yahoo_packet_send_and_free(pkt, yd); g_free(msg); g_free(msg2); return 0; }
void PurpleLine::chat_leave(int id) { PurpleConversation *conv = purple_find_chat(conn, id); if (!conv) return; PurpleConvChat *chat = PURPLE_CONV_CHAT(conv); for (GList *buddies = purple_conv_chat_get_users(chat); buddies; buddies = g_list_next(buddies)) { PurpleConvChatBuddy *buddy = (PurpleConvChatBuddy *)buddies->data; blist_remove_buddy(purple_conv_chat_cb_get_name(buddy), true, chat); } }
void yahoo_conf_leave(YahooData *yd, const char *room, const char *dn, GList *who) { struct yahoo_packet *pkt; GList *w; purple_debug_misc("yahoo", "leaving conference %s\n", room); pkt = yahoo_packet_new(YAHOO_SERVICE_CONFLOGOFF, YAHOO_STATUS_AVAILABLE, yd->session_id); yahoo_packet_hash_str(pkt, 1, dn); for (w = who; w; w = w->next) { const char *name = purple_conv_chat_cb_get_name(w->data); yahoo_packet_hash_str(pkt, 3, name); } yahoo_packet_hash_str(pkt, 57, room); yahoo_packet_send_and_free(pkt, yd); }