plugins/jingle_ft.lua

changeset 399
82ad158714e5
parent 380
0891b4e27766
--- a/plugins/jingle_ft.lua	Sat Jan 09 11:03:30 2016 +0000
+++ b/plugins/jingle_ft.lua	Tue Jan 12 13:14:36 2016 +0000
@@ -3,16 +3,15 @@
 
 local dirsep = package.config:sub(1,1);
 
-local xmlns_jingle_ft = "urn:xmpp:jingle:apps:file-transfer:1";
-local xmlns_si_file_transfer = "http://jabber.org/protocol/si/profile/file-transfer";
+local xmlns_jingle_ft = "urn:xmpp:jingle:apps:file-transfer:4";
 
 function verse.plugins.jingle_ft(stream)
 	stream:hook("ready", function ()
 		stream:add_disco_feature(xmlns_jingle_ft);
 	end, 10);
-	
+
 	local ft_content = { type = "file" };
-	
+
 	function ft_content:generate_accept(description, options)
 		if options and options.save_file then
 			self.jingle:hook("connected", function ()
@@ -20,21 +19,23 @@
 				self.jingle:set_sink(sink);
 			end);
 		end
-		
+
 		return description;
 	end
-	
+
 	local ft_mt = { __index = ft_content };
 	stream:hook("jingle/content/"..xmlns_jingle_ft, function (jingle, description_tag)
-		local file_tag = description_tag:get_child("offer"):get_child("file", xmlns_si_file_transfer);
+		local file_tag = description_tag:get_child("file");
 		local file = {
-			name = file_tag.attr.name;
-			size = tonumber(file_tag.attr.size);
+			name = file_tag:get_child_text("name");
+			size = tonumber(file_tag:get_child_text("size"));
+			desc = file_tag:get_child_text("desc");
+			date = file_tag:get_child_text("date");
 		};
-		
+
 		return setmetatable({ jingle = jingle, file = file }, ft_mt);
 	end);
-	
+
 	stream:hook("jingle/describe/file", function (file_info)
 		-- Return <description/>
 		local date;
@@ -42,25 +43,23 @@
 			date = os.date("!%Y-%m-%dT%H:%M:%SZ", file_info.timestamp);
 		end
 		return verse.stanza("description", { xmlns = xmlns_jingle_ft })
-			:tag("offer")
-				:tag("file", { xmlns = xmlns_si_file_transfer,
-					name = file_info.filename, -- Mandatory
-					size = file_info.size, -- Mandatory
-					date = date,
-					hash = file_info.hash,
-				})
-					:tag("desc"):text(file_info.description or "");
+			:tag("file")
+				:tag("name"):text(file_info.filename):up()
+				:tag("size"):text(tostring(file_info.size)):up()
+				:tag("date"):text(date):up()
+				:tag("desc"):text(file_info.description):up()
+			:up();
 	end);
 
 	function stream:send_file(to, filename)
 		local file, err = io.open(filename);
 		if not file then return file, err; end
-		
+
 		local file_size = file:seek("end", 0);
 		file:seek("set", 0);
-		
+
 		local source = ltn12.source.file(file);
-		
+
 		local jingle = self:jingle(to);
 		jingle:offer("file", {
 			filename = filename:match("[^"..dirsep.."]+$");

mercurial