Comparison

mod_query_client_ver/mod_query_client_ver.lua @ 1588:b5f9f1111a8b

mod_query_client_ver: Query and log client software
author Kim Alvefur <zash@zash.se>
date Sat, 20 Dec 2014 16:07:50 +0100
child 2652:20ebfa4ad7f4
comparison
equal deleted inserted replaced
1587:3ac2b835c7b3 1588:b5f9f1111a8b
1 -- Query and log client software
2
3 local st = require"util.stanza";
4 local uuid = require"util.uuid".generate;
5
6 local xmlns_iq_version = "jabber:iq:version";
7 local version_id = uuid();
8 local xmlns_disco_info = "http://jabber.org/protocol/disco#info";
9 local disco_id = uuid();
10
11 module:hook("presence/bare", function(event)
12 local origin, stanza = event.origin, event.stanza;
13 if origin.type == "c2s" and not origin.presence and not stanza.attr.to then
14 module:add_timer(1, function()
15 if origin.type ~= "c2s" then return end
16 origin.log("debug", "Sending version query");
17 origin.send(st.iq({ id = version_id, type = "get", from = module.host, to = origin.full_jid }):query(xmlns_iq_version));
18 end);
19 end
20 end, 1);
21
22 module:hook("iq-result/host/"..version_id, function(event)
23 local origin, stanza = event.origin, event.stanza;
24 local query = stanza:get_child("query", xmlns_iq_version);
25 if query then
26 local client = query:get_child_text("name");
27 if client then
28 local version = query:get_child_text("version");
29 if version then
30 client = client .. " version " .. version;
31 end
32 origin.log("info", "Running %s", client);
33 return true;
34 end
35 end
36 origin.send(st.iq({ id = disco_id, type = "get", from = module.host, to = origin.full_jid }):query(xmlns_disco_info));
37 end);
38
39 module:hook("iq-result/host/"..disco_id, function(event)
40 local origin, stanza = event.origin, event.stanza;
41 local query = stanza:get_child("query", xmlns_disco_info);
42 if query then
43 local ident = query:get_child("identity");
44 if ident and ident.attr.name then
45 origin.log("info", "Running %s", ident.attr.name);
46 return true;
47 end
48 end
49 -- Unknown software
50 end);
51