File

mod_measure_message_e2ee/mod_measure_message_e2ee.lua @ 3247:ada7a0c7221c

mod_pubsub_text_interface: Generate a stanza id for replies This may be needed for some clients that de-duplicate messages based on stanza id.
author Kim Alvefur <zash@zash.se>
date Mon, 20 Aug 2018 22:52:20 +0200
parent 3137:178ebea5097c
child 3370:c414a7e884b3
line wrap: on
line source

module:set_global();

local count_message = module:measure("message", "rate");
local count_plain = module:measure("plain", "rate");
local count_openpgp = module:measure("openpgp", "rate");
local count_otr = module:measure("otr", "rate");
local count_ox = module:measure("ox", "rate");
local count_omemo = module:measure("omemo", "rate");
local count_encrypted = module:measure("encrypted", "rate");

local function message_handler(event)
	local origin, stanza = event.origin, event.stanza;

	-- This counts every message, even those with no body-like content.
	count_message();

	-- Annotates that a message is encrypted, using any of the following methods.
	if stanza:get_child("encryption", "urn:xmpp:eme:0") then
		count_encrypted();
	end

	if stanza:get_child("openpgp", "urn:xmpp:openpgp:0") then
		count_ox();
		return;
	end

	if stanza:get_child("encrypted", "eu.siacs.conversations.axolotl") then
		count_omemo();
		return;
	end

	if stanza:get_child("x", "jabber:x:encrypted") then
		count_openpgp();
		return;
	end

	local body = stanza:get_child("body");
	if body ~= nil then
		local otr_index = body:find("?OTR", 1, true);
		if otr_index == 1 then
			count_otr();
			return;
		end

		count_plain();
	end
end

function module.add_host(host_module)
	module:log("debug", "Loaded on host %s", host_module);
	host_module:hook("pre-message/host", message_handler, 2);
	host_module:hook("pre-message/bare", message_handler, 2);
	host_module:hook("pre-message/full", message_handler, 2);
end