# HG changeset patch # User Mikael Berthe # Date 1209404050 -7200 # Node ID 563ba5a861aea8ed232f85ddf68f0f6c8cc5b02d # Parent 3d47694b4dccb6c12fbd28150fca47c6b688f6d3 Improve last ad-hoc fix diff -r 3d47694b4dcc -r 563ba5a861ae mcabber/src/jab_iq.c --- a/mcabber/src/jab_iq.c Mon Apr 28 18:54:55 2008 +0200 +++ b/mcabber/src/jab_iq.c Mon Apr 28 19:34:10 2008 +0200 @@ -1147,6 +1147,7 @@ sessionid = generate_session_id("set-status"); xmlnode_put_attrib(command, "sessionid", sessionid); g_free(sessionid); + sessionid = NULL; xmlnode_put_attrib(command, "status", "executing"); x = xmlnode_insert_tag(command, "x"); @@ -1190,9 +1191,9 @@ xmlnode_put_attrib(y, "type", "text-multi"); xmlnode_put_attrib(y, "var", "status-message"); xmlnode_put_attrib(y, "label", "Message"); - } - else // (if sessionid) - { + } else if (!strcmp(action, "cancel")) { + xmlnode_put_attrib(command, "status", "canceled"); + } else { // (if sessionid and not canceled) y = xmlnode_get_tag(x, "x?xmlns=jabber:x:data"); if (y) { char *value, *message; @@ -1206,7 +1207,6 @@ message ? message : ""); cmd_setstatus(NULL, status); g_free(status); - xmlnode_put_attrib(command, "sessionid", sessionid); xmlnode_put_attrib(command, "status", "completed"); xmlnode_put_attrib(iq, "type", "result"); xmlnode_insert_dataform_result_message(command, @@ -1214,6 +1214,8 @@ } } } + if (sessionid) + xmlnode_put_attrib(command, "sessionid", sessionid); xmlnode_put_attrib(iq, "to", xmlnode_get_attrib(xmldata, "from")); xmlnode_put_attrib(iq, "id", id); jab_send(jc, iq); @@ -1263,6 +1265,7 @@ sessionid = generate_session_id("leave-groupchats"); xmlnode_put_attrib(command, "sessionid", sessionid); g_free(sessionid); + sessionid = NULL; xmlnode_put_attrib(command, "status", "executing"); x = xmlnode_insert_tag(command, "x"); @@ -1290,9 +1293,9 @@ xmlnode_insert_tag(field, "required"); foreach_buddy(ROSTER_TYPE_ROOM, &_callback_foreach_buddy_groupchat, &field); - } - else // (if sessionid) - { + } else if (!strcmp(action, "cancel")) { + xmlnode_put_attrib(command, "status", "canceled"); + } else { // (if sessionid and not canceled) xmlnode form = xmlnode_get_tag(x, "x?xmlns=jabber:x:data"); if (form) { xmlnode x, gc; @@ -1306,7 +1309,7 @@ if (to_leave) { GList* b = buddy_search_jid(to_leave); if (b) - cmd_room_leave(b->data, "Asked by remote command"); + cmd_room_leave(b->data, "Requested by remote command"); } } xmlnode_put_attrib(iq, "type", "result"); @@ -1314,6 +1317,8 @@ "Groupchats have been left"); } } + if (sessionid) + xmlnode_put_attrib(command, "sessionid", sessionid); xmlnode_put_attrib(iq, "to", xmlnode_get_attrib(xmldata, "from")); xmlnode_put_attrib(iq, "id", id); jab_send(jc, iq); @@ -1710,6 +1715,7 @@ ns = xmlnode_get_attrib(x, "xmlns"); if (ns && !strcmp(ns, NS_COMMANDS)) { handle_iq_commands(conn, from, id, xmldata); + return; } else { iq_not_implemented = TRUE; }