comparison libpurple/protocols/jabber/chat.c @ 29070:c8b407fec879

jabber: Kick by in-room nick, not JID. Reduces code, but is still in-spec (and seems to be the preferred method)
author Paul Aurich <paul@darkrain42.org>
date Thu, 18 Feb 2010 04:39:28 +0000
parents 4ab6f0479bc5
children a0d6b85e9c42
comparison
equal deleted inserted replaced
29069:f5c00a24bb87 29070:c8b407fec879
1046 jabber_iq_send(iq); 1046 jabber_iq_send(iq);
1047 1047
1048 return TRUE; 1048 return TRUE;
1049 } 1049 }
1050 1050
1051 gboolean jabber_chat_role_user(JabberChat *chat, const char *who, const char *role) 1051 gboolean jabber_chat_role_user(JabberChat *chat, const char *who,
1052 const char *role, const char *why)
1052 { 1053 {
1053 char *to; 1054 char *to;
1054 JabberIq *iq; 1055 JabberIq *iq;
1055 xmlnode *query, *item; 1056 xmlnode *query, *item;
1056 JabberChatMember *jcm; 1057 JabberChatMember *jcm;
1069 1070
1070 query = xmlnode_get_child(iq->node, "query"); 1071 query = xmlnode_get_child(iq->node, "query");
1071 item = xmlnode_new_child(query, "item"); 1072 item = xmlnode_new_child(query, "item");
1072 xmlnode_set_attrib(item, "nick", jcm->handle); 1073 xmlnode_set_attrib(item, "nick", jcm->handle);
1073 xmlnode_set_attrib(item, "role", role); 1074 xmlnode_set_attrib(item, "role", role);
1075 if (why) {
1076 xmlnode *reason = xmlnode_new_child(item, "reason");
1077 xmlnode_insert_data(reason, why, -1);
1078 }
1074 1079
1075 jabber_iq_send(iq); 1080 jabber_iq_send(iq);
1076 1081
1077 return TRUE; 1082 return TRUE;
1078 } 1083 }
1136 jabber_iq_send(iq); 1141 jabber_iq_send(iq);
1137 1142
1138 return TRUE; 1143 return TRUE;
1139 } 1144 }
1140 1145
1141 gboolean jabber_chat_kick_user(JabberChat *chat, const char *who, const char *why)
1142 {
1143 JabberIq *iq;
1144 JabberChatMember *jcm = g_hash_table_lookup(chat->members, who);
1145 char *to;
1146 xmlnode *query, *item, *reason;
1147
1148 if(!jcm || !jcm->jid)
1149 return FALSE;
1150
1151 iq = jabber_iq_new_query(chat->js, JABBER_IQ_SET,
1152 "http://jabber.org/protocol/muc#admin");
1153
1154 to = g_strdup_printf("%s@%s", chat->room, chat->server);
1155 xmlnode_set_attrib(iq->node, "to", to);
1156 g_free(to);
1157
1158 query = xmlnode_get_child(iq->node, "query");
1159 item = xmlnode_new_child(query, "item");
1160 xmlnode_set_attrib(item, "jid", jcm->jid);
1161 xmlnode_set_attrib(item, "role", "none");
1162 if(why) {
1163 reason = xmlnode_new_child(item, "reason");
1164 xmlnode_insert_data(reason, why, -1);
1165 }
1166
1167 jabber_iq_send(iq);
1168
1169 return TRUE;
1170 }
1171
1172 static void jabber_chat_disco_traffic_cb(JabberStream *js, const char *from, 1146 static void jabber_chat_disco_traffic_cb(JabberStream *js, const char *from,
1173 JabberIqType type, const char *id, 1147 JabberIqType type, const char *id,
1174 xmlnode *packet, gpointer data) 1148 xmlnode *packet, gpointer data)
1175 { 1149 {
1176 JabberChat *chat; 1150 JabberChat *chat;