mod_roster: Ask remote server to remove pending subscription requests when removing roster items.

Thu, 26 Nov 2009 12:57:24 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Thu, 26 Nov 2009 12:57:24 +0500
changeset 2227
1888368c58c5
parent 2226
8f328f97946e
child 2228
3987078bb179

mod_roster: Ask remote server to remove pending subscription requests when removing roster items.

plugins/mod_roster.lua file | annotate | diff | comparison | revisions
--- a/plugins/mod_roster.lua	Thu Nov 26 00:02:01 2009 +0000
+++ b/plugins/mod_roster.lua	Thu Nov 26 12:57:24 2009 +0500
@@ -74,18 +74,20 @@
 						if not resource and host then
 							if jid ~= from_node.."@"..from_host then
 								if item.attr.subscription == "remove" then
-									local r_item = session.roster[jid];
+									local roster = session.roster;
+									local r_item = roster[jid];
 									if r_item then
+										local to_bare = node and (node.."@"..host) or host; -- bare JID
+										if r_item.subscription == "both" or r_item.subscription == "from" or (roster.pending and roster.pending[jid]) then
+											core_post_stanza(session, st.presence({type="unsubscribed", from=session.full_jid, to=to_bare}));
+										end
+										if r_item.subscription == "both" or r_item.subscription == "to" or r_item.ask then
+											core_post_stanza(session, st.presence({type="unsubscribe", from=session.full_jid, to=to_bare}));
+										end
 										local success, err_type, err_cond, err_msg = rm_remove_from_roster(session, jid);
 										if success then
 											session.send(st.reply(stanza));
 											rm_roster_push(from_node, from_host, jid);
-											local to_bare = node and (node.."@"..host) or host; -- bare JID
-											if r_item.subscription == "both" or r_item.subscription == "from" then
-												core_post_stanza(session, st.presence({type="unsubscribed", from=session.full_jid, to=to_bare}));
-											elseif r_item.subscription == "both" or r_item.subscription == "to" then
-												core_post_stanza(session, st.presence({type="unsubscribe", from=session.full_jid, to=to_bare}));
-											end
 										else
 											session.send(st.error_reply(stanza, err_type, err_cond, err_msg));
 										end

mercurial