diff --git a/src/misc.erl b/src/misc.erl index cff25f1b6..8cf4a7ece 100644 --- a/src/misc.erl +++ b/src/misc.erl @@ -43,7 +43,7 @@ get_my_ipv4_address/0, get_my_ipv6_address/0, parse_ip_mask/1, crypto_hmac/3, crypto_hmac/4, uri_parse/1, uri_parse/2, match_ip_mask/3, format_hosts_list/1, format_cycle/1, delete_dir/1, - semver_to_xxyy/1, logical_processors/0]). + semver_to_xxyy/1, logical_processors/0, get_mucsub_event_type/1]). %% Deprecated functions -export([decode_base64/1, encode_base64/1]). @@ -168,7 +168,11 @@ unwrap_mucsub_message(_Packet) -> false. -spec is_mucsub_message(xmpp_element()) -> boolean(). -is_mucsub_message(#message{} = OuterMsg) -> +is_mucsub_message(Packet) -> + get_mucsub_event_type(Packet) /= false. + +-spec get_mucsub_event_type(xmpp_element()) -> binary() | false. +get_mucsub_event_type(#message{} = OuterMsg) -> case xmpp:get_subtag(OuterMsg, #ps_event{}) of #ps_event{ items = #ps_items{ @@ -180,11 +184,11 @@ is_mucsub_message(#message{} = OuterMsg) -> Node == ?NS_MUCSUB_NODES_PARTICIPANTS; Node == ?NS_MUCSUB_NODES_PRESENCE; Node == ?NS_MUCSUB_NODES_SUBSCRIBERS -> - true; + Node; _ -> false end; -is_mucsub_message(_Packet) -> +get_mucsub_event_type(_Packet) -> false. -spec is_standalone_chat_state(stanza()) -> boolean(). diff --git a/src/mod_offline.erl b/src/mod_offline.erl index 6720523ac..04df4c4d9 100644 --- a/src/mod_offline.erl +++ b/src/mod_offline.erl @@ -473,14 +473,17 @@ need_to_store(LServer, #message{type = Type} = Packet) -> _ -> true end, - case {Store, mod_offline_opt:store_empty_body(LServer)} of - {false, _} -> + case {misc:get_mucsub_event_type(Packet), Store, + mod_offline_opt:store_empty_body(LServer)} of + {?NS_MUCSUB_NODES_PRESENCE, _, _} -> false; - {_, true} -> + {_, false, _} -> + false; + {_, _, true} -> true; - {_, false} -> + {_, _, false} -> Packet#message.body /= []; - {_, unless_chat_state} -> + {_, _, _, unless_chat_state} -> not misc:is_standalone_chat_state(Packet) end end