diff -r 6042c938e369 -r 82ad158714e5 plugins/jingle_ft.lua --- 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 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.."]+$");