Merge with 0.5
authorWaqas Hussain <waqas20@gmail.com>
Sun, 04 Oct 2009 22:12:12 +0500
changeset 1900 93a94ec05ebe
parent 1896 e7ac9be5c90c (current diff)
parent 1899 ccb7d9ccbf24 (diff)
child 1901 3c52b949e472
Merge with 0.5
core/stanza_router.lua
--- a/core/rostermanager.lua	Sun Oct 04 13:24:04 2009 +0100
+++ b/core/rostermanager.lua	Sun Oct 04 22:12:12 2009 +0500
@@ -102,9 +102,16 @@
 	return roster;
 end
 
-function save_roster(username, host)
+function save_roster(username, host, roster)
 	log("debug", "save_roster: saving roster for "..username.."@"..host);
-	if hosts[host] and hosts[host].sessions[username] and hosts[host].sessions[username].roster then
+	if not roster then
+		roster = hosts[host] and hosts[host].sessions[username] and hosts[host].sessions[username].roster;
+		--if not roster then
+		--	--roster = load_roster(username, host);
+		--	return true; -- roster unchanged, no reason to save
+		--end
+	end
+	if roster then
 		local roster = hosts[host].sessions[username].roster;
 		roster[false].version = (roster[false].version or 1) + 1;
 		return datamanager.store(username, host, "roster", hosts[host].sessions[username].roster);
@@ -123,7 +130,7 @@
 			item.subscription = "both";
 		end
 		item.ask = nil;
-		return datamanager.store(username, host, "roster", roster);
+		return save_roster(username, host, roster);
 	end
 end
 
@@ -145,7 +152,7 @@
 		end
 	end
 	if changed then
-		return datamanager.store(username, host, "roster", roster);
+		return save_roster(username, host, roster);
 	end
 end
 
@@ -167,7 +174,7 @@
 		end
 	end
 	if changed then
-		return datamanager.store(username, host, "roster", roster);
+		return save_roster(username, host, roster);
 	end
 end
 
@@ -189,7 +196,7 @@
 	end
 	if not roster.pending then roster.pending = {}; end
 	roster.pending[jid] = true;
-	return datamanager.store(username, host, "roster", roster);
+	return save_roster(username, host, roster);
 end
 function is_contact_pending_out(username, host, jid)
 	local roster = load_roster(username, host);
@@ -208,7 +215,7 @@
 	end
 	item.ask = "subscribe";
 	log("debug", "set_contact_pending_out: saving roster; set "..username.."@"..host..".roster["..jid.."].ask=subscribe");
-	return datamanager.store(username, host, "roster", roster);
+	return save_roster(username, host, roster);
 end
 function unsubscribe(username, host, jid)
 	local roster = load_roster(username, host);
@@ -223,7 +230,7 @@
 	elseif item.subscription == "to" then
 		item.subscription = "none";
 	end
-	return datamanager.store(username, host, "roster", roster);
+	return save_roster(username, host, roster);
 end
 function subscribed(username, host, jid)
 	if is_contact_pending_in(username, host, jid) then
@@ -240,7 +247,7 @@
 		end
 		roster.pending[jid] = nil;
 		-- TODO maybe remove roster.pending if empty
-		return datamanager.store(username, host, "roster", roster);
+		return save_roster(username, host, roster);
 	end -- TODO else implement optional feature pre-approval (ask = subscribed)
 end
 function unsubscribed(username, host, jid)
@@ -262,7 +269,7 @@
 		end
 	end
 	if changed then
-		return datamanager.store(username, host, "roster", roster);
+		return save_roster(username, host, roster);
 	end
 end
 
@@ -271,7 +278,7 @@
 	local item = roster[jid];
 	if item and (item.subscription == "none" or item.subscription == "from") then
 		item.ask = "subscribe";
-		return datamanager.store(username, host, "roster", roster);
+		return save_roster(username, host, roster);
 	end
 end
 
@@ -280,7 +287,7 @@
 	local item = roster[jid];
 	if item and (item.subscription == "none" or item.subscription == "from" then
 		item.ask = "subscribe";
-		return datamanager.store(username, host, "roster", roster);
+		return save_roster(username, host, roster);
 	end
 end]]
 
--- a/core/stanza_router.lua	Sun Oct 04 13:24:04 2009 +0100
+++ b/core/stanza_router.lua	Sun Oct 04 22:12:12 2009 +0500
@@ -26,9 +26,13 @@
 	-- TODO verify validity of stanza (as well as JID validity)
 	if stanza.attr.type == "error" and #stanza.tags == 0 then return; end -- TODO invalid stanza, log
 	if stanza.name == "iq" then
-		if (stanza.attr.type == "set" or stanza.attr.type == "get") and #stanza.tags ~= 1 then
+		local can_reply = stanza.attr.type == "set" or stanza.attr.type == "get"
+		local missing_id = not stanza.attr.id;
+		if can_reply and (#stanza.tags ~= 1 or missing_id) then
 			origin.send(st.error_reply(stanza, "modify", "bad-request"));
 			return;
+		elseif missing_id then
+			return;
 		end
 	end