From f5761f46f2c4ee391d883b7b5c70de04065e514b Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Sun, 26 Apr 2020 14:28:00 +0200
Subject: mod_mam: Store only incoming errors

Unclear if clients normally ever send error messages, but there may be
locally generated bounces sent on behalf of local sessions.
---
 plugins/mod_mam/mod_mam.lua | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/plugins/mod_mam/mod_mam.lua b/plugins/mod_mam/mod_mam.lua
index d61d4883..72b7639a 100644
--- a/plugins/mod_mam/mod_mam.lua
+++ b/plugins/mod_mam/mod_mam.lua
@@ -263,7 +263,7 @@ local function strip_stanza_id(stanza, user)
 	return stanza;
 end
 
-local function should_store(stanza) --> boolean, reason: string
+local function should_store(stanza, c2s) --> boolean, reason: string
 	local st_type = stanza.attr.type or "normal";
 	-- FIXME pass direction of stanza and use that along with bare/full JID addressing
 	-- for more accurate MUC / type=groupchat check
@@ -272,7 +272,8 @@ local function should_store(stanza) --> boolean, reason: string
 		-- Headline messages are ephemeral by definition
 		return false, "headline";
 	end
-	if st_type == "error" then
+	if st_type == "error" and not c2s then
+		-- Store delivery failure notifications so you know if your own messages were not delivered
 		return true, "bounce";
 	end
 	if st_type == "groupchat" then
@@ -334,7 +335,7 @@ local function message_handler(event, c2s)
 	-- Filter out <stanza-id> that claim to be from us
 	event.stanza = strip_stanza_id(stanza, store_user);
 
-	local should, why = should_store(stanza);
+	local should, why = should_store(stanza, c2s);
 	if not should then
 		log("debug", "Not archiving stanza: %s (%s)", stanza:top_tag(), why);
 		return;
-- 
cgit v1.2.3