Changeset

217:60db4e738910

plugins.roster: Check stream features for roster versioning support.
author Kim Alvefur <zash@zash.se>
date Thu, 08 Sep 2011 18:04:49 +0200
parents 216:3aac084855e6
children 218:39af184385cd
files plugins/roster.lua
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/roster.lua	Thu Sep 08 18:03:07 2011 +0200
+++ b/plugins/roster.lua	Thu Sep 08 18:04:49 2011 +0200
@@ -1,8 +1,10 @@
 local xmlns_roster = "jabber:iq:roster";
+local xmlns_rosterver = "urn:xmpp:features:rosterver";
 local bare_jid = require "util.jid".bare;
 local t_insert = table.insert;
 
 function verse.plugins.roster(stream)
+	local ver_supported = false;
 	local roster = {
 		items = {};
 		ver = "";
@@ -11,6 +13,12 @@
 	};
 	stream.roster = roster;
 
+	stream:hook("stream-features", function(features_stanza)
+		if features_stanza:get_child("ver", xmlns_rosterver) then
+			ver_supported = true;
+		end
+	end);
+
 	local function item_lua2xml(item_table)
 		local xml_item = verse.stanza("item", { xmlns = xmlns_roster });
 		for k, v in pairs(item_table) do
@@ -103,7 +111,7 @@
 	end
 
 	function roster:fetch(callback)
-		stream:send_iq(verse.iq({type="get"}):tag("query", { xmlns = xmlns_roster, ver = roster.ver }),
+		stream:send_iq(verse.iq({type="get"}):tag("query", { xmlns = xmlns_roster, ver = ver_supported and roster.ver or nil }),
 			function (result)
 				if result.attr.type == "result" then
 					local query = result:get_child("query", xmlns_roster);