Software /
code /
prosody-modules
File
mod_query_client_ver/mod_query_client_ver.lua @ 2596:ffb6646b4253
Implement XEP-0198 revision 1.5.2 and limit number of hibernated sessions per user
Revision 1.5.2 allows sending h-values on resumes that fail due to hibernation timeout
and to send out a smacks ack directly before the stream close tag.
I also made the used timers stoppable even for prosody 0.10 and below, this makes
the smacks-ack-delayed event more useful.
author | tmolitor <thilo@eightysoft.de> |
---|---|
date | Sun, 05 Mar 2017 20:23:53 +0100 |
parent | 1588:b5f9f1111a8b |
child | 2652:20ebfa4ad7f4 |
line wrap: on
line source
-- Query and log client software local st = require"util.stanza"; local uuid = require"util.uuid".generate; local xmlns_iq_version = "jabber:iq:version"; local version_id = uuid(); local xmlns_disco_info = "http://jabber.org/protocol/disco#info"; local disco_id = uuid(); module:hook("presence/bare", function(event) local origin, stanza = event.origin, event.stanza; if origin.type == "c2s" and not origin.presence and not stanza.attr.to then module:add_timer(1, function() if origin.type ~= "c2s" then return end origin.log("debug", "Sending version query"); origin.send(st.iq({ id = version_id, type = "get", from = module.host, to = origin.full_jid }):query(xmlns_iq_version)); end); end end, 1); module:hook("iq-result/host/"..version_id, function(event) local origin, stanza = event.origin, event.stanza; local query = stanza:get_child("query", xmlns_iq_version); if query then local client = query:get_child_text("name"); if client then local version = query:get_child_text("version"); if version then client = client .. " version " .. version; end origin.log("info", "Running %s", client); return true; end end origin.send(st.iq({ id = disco_id, type = "get", from = module.host, to = origin.full_jid }):query(xmlns_disco_info)); end); module:hook("iq-result/host/"..disco_id, function(event) local origin, stanza = event.origin, event.stanza; local query = stanza:get_child("query", xmlns_disco_info); if query then local ident = query:get_child("identity"); if ident and ident.attr.name then origin.log("info", "Running %s", ident.attr.name); return true; end end -- Unknown software end);