diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2020-04-27 13:17:45 +0200 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2020-04-27 13:17:51 +0200 |
commit | 6320dfd34ead314f08856e1a8279ed4e14cc7649 (patch) | |
tree | 5ab5ccbb59329f26c2deb084cf50bb8d12c6f072 /src/mod_caps.erl | |
parent | Clean 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.erl | 14 |
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; |