plugins/jingle_ft.lua

changeset 379
d80d27234e38
parent 250
a5ac643a7fd6
child 380
0891b4e27766
equal deleted inserted replaced
368:154c2f04d73b 379:d80d27234e38
1 local verse = require "verse"; 1 local verse = require "verse";
2 local ltn12 = require "ltn12"; 2 local ltn12 = require "ltn12";
3 3
4 local dirsep = package.config:sub(1,1); 4 local dirsep = package.config:sub(1,1);
5 5
6 local xmlns_jingle_ft = "urn:xmpp:jingle:apps:file-transfer:1"; 6 local xmlns_jingle_ft = "urn:xmpp:jingle:apps:file-transfer:4";
7 local xmlns_si_file_transfer = "http://jabber.org/protocol/si/profile/file-transfer";
8 7
9 function verse.plugins.jingle_ft(stream) 8 function verse.plugins.jingle_ft(stream)
10 stream:hook("ready", function () 9 stream:hook("ready", function ()
11 stream:add_disco_feature(xmlns_jingle_ft); 10 stream:add_disco_feature(xmlns_jingle_ft);
12 end, 10); 11 end, 10);
24 return description; 23 return description;
25 end 24 end
26 25
27 local ft_mt = { __index = ft_content }; 26 local ft_mt = { __index = ft_content };
28 stream:hook("jingle/content/"..xmlns_jingle_ft, function (jingle, description_tag) 27 stream:hook("jingle/content/"..xmlns_jingle_ft, function (jingle, description_tag)
29 local file_tag = description_tag:get_child("offer"):get_child("file", xmlns_si_file_transfer); 28 local file_tag = description_tag:get_child("file");
30 local file = { 29 local file = {
31 name = file_tag.attr.name; 30 name = file_tag:get_child_text("name");
32 size = tonumber(file_tag.attr.size); 31 size = tonumber(file_tag:get_child_text("size"));
32 desc = file_tag:get_child_text("desc");
33 date = file_tag:get_child_text("date");
33 }; 34 };
34 35
35 return setmetatable({ jingle = jingle, file = file }, ft_mt); 36 return setmetatable({ jingle = jingle, file = file }, ft_mt);
36 end); 37 end);
37 38
40 local date; 41 local date;
41 if file_info.timestamp then 42 if file_info.timestamp then
42 date = os.date("!%Y-%m-%dT%H:%M:%SZ", file_info.timestamp); 43 date = os.date("!%Y-%m-%dT%H:%M:%SZ", file_info.timestamp);
43 end 44 end
44 return verse.stanza("description", { xmlns = xmlns_jingle_ft }) 45 return verse.stanza("description", { xmlns = xmlns_jingle_ft })
45 :tag("offer") 46 :tag("file")
46 :tag("file", { xmlns = xmlns_si_file_transfer, 47 :tag("name"):text(file_info.filename):up()
47 name = file_info.filename, -- Mandatory 48 :tag("size"):text(tostring(file_info.size)):up()
48 size = file_info.size, -- Mandatory 49 :tag("date"):text(date):up()
49 date = date, 50 :tag("desc"):text(file_info.description):up()
50 hash = file_info.hash, 51 :up();
51 })
52 :tag("desc"):text(file_info.description or "");
53 end); 52 end);
54 53
55 function stream:send_file(to, filename) 54 function stream:send_file(to, filename)
56 local file, err = io.open(filename); 55 local file, err = io.open(filename);
57 if not file then return file, err; end 56 if not file then return file, err; end

mercurial