mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-24 16:23:40 +01:00
Honor <store/> hint for any non-"error" message
XEP-0334 says: "A message containing the <store/> hint that is not of type 'error' SHOULD be stored by the entity."
This commit is contained in:
parent
28dde294e5
commit
bf9d6b5534
@ -555,31 +555,29 @@ parse_query_v0_2(Query) ->
|
|||||||
end, Query#xmlel.children).
|
end, Query#xmlel.children).
|
||||||
|
|
||||||
should_archive(#xmlel{name = <<"message">>} = Pkt, LServer) ->
|
should_archive(#xmlel{name = <<"message">>} = Pkt, LServer) ->
|
||||||
case fxml:get_attr_s(<<"type">>, Pkt#xmlel.attrs) of
|
case is_resent(Pkt, LServer) of
|
||||||
<<"error">> ->
|
true ->
|
||||||
false;
|
false;
|
||||||
<<"groupchat">> ->
|
false ->
|
||||||
false;
|
case {check_store_hint(Pkt),
|
||||||
<<"headline">> ->
|
fxml:get_attr_s(<<"type">>, Pkt#xmlel.attrs)} of
|
||||||
false;
|
{_Hint, <<"error">>} ->
|
||||||
_ ->
|
|
||||||
case is_resent(Pkt, LServer) of
|
|
||||||
true ->
|
|
||||||
false;
|
false;
|
||||||
false ->
|
{store, _Type} ->
|
||||||
case check_store_hint(Pkt) of
|
true;
|
||||||
store ->
|
{no_store, _Type} ->
|
||||||
true;
|
false;
|
||||||
no_store ->
|
{none, <<"groupchat">>} ->
|
||||||
|
false;
|
||||||
|
{none, <<"headline">>} ->
|
||||||
|
false;
|
||||||
|
{none, _Type} ->
|
||||||
|
case fxml:get_subtag_cdata(Pkt, <<"body">>) of
|
||||||
|
<<>> ->
|
||||||
|
%% Empty body
|
||||||
false;
|
false;
|
||||||
none ->
|
_ ->
|
||||||
case fxml:get_subtag_cdata(Pkt, <<"body">>) of
|
true
|
||||||
<<>> ->
|
|
||||||
%% Empty body
|
|
||||||
false;
|
|
||||||
_ ->
|
|
||||||
true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
|
@ -437,35 +437,36 @@ remove_msg_by_node(To, Seq) ->
|
|||||||
end.
|
end.
|
||||||
|
|
||||||
need_to_store(LServer, Packet) ->
|
need_to_store(LServer, Packet) ->
|
||||||
Type = fxml:get_tag_attr_s(<<"type">>, Packet),
|
case has_offline_tag(Packet) of
|
||||||
if (Type /= <<"error">>) and (Type /= <<"groupchat">>)
|
false ->
|
||||||
and (Type /= <<"headline">>) ->
|
case {check_store_hint(Packet),
|
||||||
case has_offline_tag(Packet) of
|
fxml:get_tag_attr_s(<<"type">>, Packet)} of
|
||||||
false ->
|
{_Hint, <<"error">>} ->
|
||||||
case check_store_hint(Packet) of
|
false;
|
||||||
store ->
|
{store, _Type} ->
|
||||||
|
true;
|
||||||
|
{no_store, _Type} ->
|
||||||
|
false;
|
||||||
|
{none, <<"groupchat">>} ->
|
||||||
|
false;
|
||||||
|
{none, <<"headline">>} ->
|
||||||
|
false;
|
||||||
|
{none, _Type} ->
|
||||||
|
case gen_mod:get_module_opt(
|
||||||
|
LServer, ?MODULE, store_empty_body,
|
||||||
|
fun(V) when is_boolean(V) -> V;
|
||||||
|
(unless_chat_state) -> unless_chat_state
|
||||||
|
end,
|
||||||
|
unless_chat_state) of
|
||||||
|
true ->
|
||||||
true;
|
true;
|
||||||
no_store ->
|
false ->
|
||||||
false;
|
fxml:get_subtag(Packet, <<"body">>) /= false;
|
||||||
none ->
|
unless_chat_state ->
|
||||||
case gen_mod:get_module_opt(
|
not jlib:is_standalone_chat_state(Packet)
|
||||||
LServer, ?MODULE, store_empty_body,
|
end
|
||||||
fun(V) when is_boolean(V) -> V;
|
|
||||||
(unless_chat_state) -> unless_chat_state
|
|
||||||
end,
|
|
||||||
unless_chat_state) of
|
|
||||||
false ->
|
|
||||||
fxml:get_subtag(Packet, <<"body">>) /= false;
|
|
||||||
unless_chat_state ->
|
|
||||||
not jlib:is_standalone_chat_state(Packet);
|
|
||||||
true ->
|
|
||||||
true
|
|
||||||
end
|
|
||||||
end;
|
|
||||||
true ->
|
|
||||||
false
|
|
||||||
end;
|
end;
|
||||||
true ->
|
true ->
|
||||||
false
|
false
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user