From 40d725e9c125517b8c1106fd9c107c9a77e7b488 Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Thu, 9 Nov 2017 00:48:19 +0100 Subject: [PATCH] mod_mam: Ignore non-message stanzas earlier Let mod_mam's hook callbacks ignore non-message stanzas using pattern matching. --- src/mod_mam.erl | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/mod_mam.erl b/src/mod_mam.erl index ddf3b4dab..0ef1d9708 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -280,9 +280,9 @@ sm_receive_packet(#message{from = Peer, to = JID} = Pkt) -> sm_receive_packet(Acc) -> Acc. --spec user_send_packet({stanza(), c2s_state()}) -> {stanza(), c2s_state()}. -user_send_packet({Pkt, #{jid := JID} = C2SState}) -> - Peer = xmpp:get_to(Pkt), +-spec user_send_packet({stanza(), c2s_state()}) + -> {stanza(), c2s_state()}. +user_send_packet({#message{to = Peer} = Pkt, #{jid := JID} = C2SState}) -> LUser = JID#jid.luser, LServer = JID#jid.lserver, Pkt2 = case should_archive(Pkt, LServer) of @@ -298,19 +298,23 @@ user_send_packet({Pkt, #{jid := JID} = C2SState}) -> false -> Pkt end, - {Pkt2, C2SState}. + {Pkt2, C2SState}; +user_send_packet(Acc) -> + Acc. -spec user_send_packet_strip_tag({stanza(), c2s_state()}) -> {stanza(), c2s_state()}. -user_send_packet_strip_tag({Pkt, #{jid := JID} = C2SState}) -> +user_send_packet_strip_tag({#message{} = Pkt, #{jid := JID} = C2SState}) -> LServer = JID#jid.lserver, - {strip_my_archived_tag(Pkt, LServer), C2SState}. + {strip_my_archived_tag(Pkt, LServer), C2SState}; +user_send_packet_strip_tag(Acc) -> + Acc. -spec muc_filter_message(message(), mod_muc_room:state(), binary()) -> message(). -muc_filter_message(Pkt, #state{config = Config, jid = RoomJID} = MUCState, +muc_filter_message(#message{from = From} = Pkt, + #state{config = Config, jid = RoomJID} = MUCState, FromNick) -> - From = xmpp:get_from(Pkt), if Config#config.mam -> LServer = RoomJID#jid.lserver, NewPkt = strip_my_archived_tag(Pkt, LServer), @@ -323,7 +327,9 @@ muc_filter_message(Pkt, #state{config = Config, jid = RoomJID} = MUCState, end; true -> Pkt - end. + end; +muc_filter_message(Acc, _MUCState, _FromNick) -> + Acc. set_stanza_id(Pkt, JID, ID) -> BareJID = jid:remove_resource(JID), @@ -695,7 +701,7 @@ may_enter_room(From, may_enter_room(From, MUCState) -> mod_muc_room:is_occupant_or_admin(From, MUCState). --spec store_msg(stanza(), +-spec store_msg(message(), binary(), binary(), jid(), send | recv) -> {ok, binary()} | pass. store_msg(Pkt, LUser, LServer, Peer, Dir) ->