aboutsummaryrefslogtreecommitdiff
path: root/src/mod_caps.erl
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2020-04-27 13:17:45 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2020-04-27 13:17:51 +0200
commit6320dfd34ead314f08856e1a8279ed4e14cc7649 (patch)
tree5ab5ccbb59329f26c2deb084cf50bb8d12c6f072 /src/mod_caps.erl
parentClean some unused functions in ejabberd_ctl, this makes "make hooks" happy (diff)
Don't store caps information for direct presences of muc room
We really don't need those, and thanks to each individual room having different hash (as one of hashed data is room description) we end with lot of data that we really don't need.
Diffstat (limited to 'src/mod_caps.erl')
-rw-r--r--src/mod_caps.erl14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mod_caps.erl b/src/mod_caps.erl
index 5e8cc2eda..0b8f034cc 100644
--- a/src/mod_caps.erl
+++ b/src/mod_caps.erl
@@ -143,7 +143,19 @@ user_send_packet(Acc) ->
-spec user_receive_packet({stanza(), ejabberd_c2s:state()}) -> {stanza(), ejabberd_c2s:state()}.
user_receive_packet({#presence{from = From, type = available} = Pkt,
#{lserver := LServer, jid := To} = State}) ->
- IsRemote = not ejabberd_router:is_my_host(From#jid.lserver),
+ IsRemote = case From#jid.lresource of
+ % Don't store caps for presences sent by our muc rooms
+ <<>> ->
+ try ejabberd_router:host_of_route(From#jid.lserver) of
+ MaybeMuc ->
+ not lists:member(From#jid.lserver,
+ gen_mod:get_module_opt_hosts(MaybeMuc, mod_muc))
+ catch error:{unregistered_route, _} ->
+ true
+ end;
+ _ ->
+ not ejabberd_router:is_my_host(From#jid.lserver)
+ end,
if IsRemote ->
case read_caps(Pkt) of
nothing -> ok;