aboutsummaryrefslogtreecommitdiff
path: root/src/mod_offline.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_offline.erl')
-rw-r--r--src/mod_offline.erl48
1 files changed, 37 insertions, 11 deletions
diff --git a/src/mod_offline.erl b/src/mod_offline.erl
index 7150d2972..e2a087ce0 100644
--- a/src/mod_offline.erl
+++ b/src/mod_offline.erl
@@ -576,19 +576,42 @@ remove_user(User, Server) ->
%% Helper functions:
+-spec check_if_message_should_be_bounced(message()) -> boolean().
+check_if_message_should_be_bounced(Packet) ->
+ case Packet of
+ #message{type = groupchat, to = #jid{lserver = LServer}} ->
+ gen_mod:get_module_opt(LServer, ?MODULE, bounce_groupchat);
+ #message{to = #jid{lserver = LServer}} ->
+ case misc:is_mucsub_message(Packet) of
+ true ->
+ gen_mod:get_module_opt(LServer, ?MODULE, bounce_groupchat);
+ _ ->
+ true
+ end;
+ _ ->
+ true
+ end.
+
%% Warn senders that their messages have been discarded:
+
-spec discard_warn_sender(message(), full | any()) -> ok.
-discard_warn_sender(Packet, full) ->
- ErrText = <<"Your contact offline message queue is "
- "full. The message has been discarded.">>,
- Lang = xmpp:get_lang(Packet),
- Err = xmpp:err_resource_constraint(ErrText, Lang),
- ejabberd_router:route_error(Packet, Err);
-discard_warn_sender(Packet, _) ->
- ErrText = <<"Database failure">>,
- Lang = xmpp:get_lang(Packet),
- Err = xmpp:err_internal_server_error(ErrText, Lang),
- ejabberd_router:route_error(Packet, Err).
+discard_warn_sender(Packet, Reason) ->
+ case check_if_message_should_be_bounced(Packet) of
+ true ->
+ Lang = xmpp:get_lang(Packet),
+ Err = case Reason of
+ full ->
+ ErrText = <<"Your contact offline message queue is "
+ "full. The message has been discarded.">>,
+ xmpp:err_resource_constraint(ErrText, Lang);
+ _ ->
+ ErrText = <<"Database failure">>,
+ xmpp:err_internal_server_error(ErrText, Lang)
+ end,
+ ejabberd_router:route_error(Packet, Err);
+ _ ->
+ ok
+ end.
webadmin_page(_, Host,
#request{us = _US, path = [<<"user">>, U, <<"queue">>],
@@ -855,6 +878,8 @@ mod_opt_type(access_max_user_messages) ->
mod_opt_type(db_type) -> fun(T) -> ejabberd_config:v_db(?MODULE, T) end;
mod_opt_type(store_groupchat) ->
fun(V) when is_boolean(V) -> V end;
+mod_opt_type(bounce_groupchat) ->
+ fun(V) when is_boolean(V) -> V end;
mod_opt_type(store_empty_body) ->
fun (V) when is_boolean(V) -> V;
(unless_chat_state) -> unless_chat_state
@@ -864,4 +889,5 @@ mod_options(Host) ->
[{db_type, ejabberd_config:default_db(Host, ?MODULE)},
{access_max_user_messages, max_user_offline_messages},
{store_empty_body, unless_chat_state},
+ {bounce_groupchat, true},
{store_groupchat, false}].