mod_mam: Ignore non-message stanzas earlier

Let mod_mam's hook callbacks ignore non-message stanzas using pattern
matching.
This commit is contained in:
Holger Weiss 2017-11-09 00:48:19 +01:00
parent 5cf4e200ba
commit 40d725e9c1
1 changed files with 16 additions and 10 deletions

View File

@ -280,9 +280,9 @@ sm_receive_packet(#message{from = Peer, to = JID} = Pkt) ->
sm_receive_packet(Acc) -> sm_receive_packet(Acc) ->
Acc. Acc.
-spec user_send_packet({stanza(), c2s_state()}) -> {stanza(), c2s_state()}. -spec user_send_packet({stanza(), c2s_state()})
user_send_packet({Pkt, #{jid := JID} = C2SState}) -> -> {stanza(), c2s_state()}.
Peer = xmpp:get_to(Pkt), user_send_packet({#message{to = Peer} = Pkt, #{jid := JID} = C2SState}) ->
LUser = JID#jid.luser, LUser = JID#jid.luser,
LServer = JID#jid.lserver, LServer = JID#jid.lserver,
Pkt2 = case should_archive(Pkt, LServer) of Pkt2 = case should_archive(Pkt, LServer) of
@ -298,19 +298,23 @@ user_send_packet({Pkt, #{jid := JID} = C2SState}) ->
false -> false ->
Pkt Pkt
end, end,
{Pkt2, C2SState}. {Pkt2, C2SState};
user_send_packet(Acc) ->
Acc.
-spec user_send_packet_strip_tag({stanza(), c2s_state()}) -> -spec user_send_packet_strip_tag({stanza(), c2s_state()}) ->
{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, 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(), -spec muc_filter_message(message(), mod_muc_room:state(),
binary()) -> message(). 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) -> FromNick) ->
From = xmpp:get_from(Pkt),
if Config#config.mam -> if Config#config.mam ->
LServer = RoomJID#jid.lserver, LServer = RoomJID#jid.lserver,
NewPkt = strip_my_archived_tag(Pkt, LServer), NewPkt = strip_my_archived_tag(Pkt, LServer),
@ -323,7 +327,9 @@ muc_filter_message(Pkt, #state{config = Config, jid = RoomJID} = MUCState,
end; end;
true -> true ->
Pkt Pkt
end. end;
muc_filter_message(Acc, _MUCState, _FromNick) ->
Acc.
set_stanza_id(Pkt, JID, ID) -> set_stanza_id(Pkt, JID, ID) ->
BareJID = jid:remove_resource(JID), BareJID = jid:remove_resource(JID),
@ -695,7 +701,7 @@ may_enter_room(From,
may_enter_room(From, MUCState) -> may_enter_room(From, MUCState) ->
mod_muc_room:is_occupant_or_admin(From, MUCState). mod_muc_room:is_occupant_or_admin(From, MUCState).
-spec store_msg(stanza(), -spec store_msg(message(),
binary(), binary(), jid(), send | recv) -> binary(), binary(), jid(), send | recv) ->
{ok, binary()} | pass. {ok, binary()} | pass.
store_msg(Pkt, LUser, LServer, Peer, Dir) -> store_msg(Pkt, LUser, LServer, Peer, Dir) ->