Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2016-11-23 00:21:34 +0300
committerHolger Weiss <holger@zedat.fu-berlin.de>2016-11-23 00:21:34 +0300
commit3325e69ae6d625968ce8ec09d9100b5eeca9fb28 (patch)
treeed5c24153c827ef73bc13b297e200296f3b599c5 /src/ejabberd_c2s.erl
parent114ca786ee051b68c6ddc88b012af2226b07601e (diff)
Let mod_carboncopy mark copied messages
Carbon copies are now marked with a 'carbon_copy' flag. This makes it easier to identify them.
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl44
1 files changed, 15 insertions, 29 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 7ef708d31..6d84d8d93 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -2645,44 +2645,30 @@ handle_unacked_stanzas(#state{mgmt_state = MgmtState} = StateData)
Txt = <<"User session terminated">>,
ejabberd_router:route_error(
To, From, El, xmpp:err_service_unavailable(Txt, Lang));
+ (From, _To, #message{meta = #{carbon_copy := true}}, _Time) ->
+ %% XEP-0280 says: "When a receiving server attempts to deliver a
+ %% forked message, and that message bounces with an error for
+ %% any reason, the receiving server MUST NOT forward that error
+ %% back to the original sender." Resending such a stanza could
+ %% easily lead to unexpected results as well.
+ ?DEBUG("Dropping forwarded message stanza from ~s",
+ [jid:to_string(From)]);
(From, To, El, Time) ->
- %% We'll drop the stanza if it was <forwarded/> by some
- %% encapsulating protocol as per XEP-0297. One such protocol is
- %% XEP-0280, which says: "When a receiving server attempts to
- %% deliver a forked message, and that message bounces with an
- %% error for any reason, the receiving server MUST NOT forward
- %% that error back to the original sender." Resending such a
- %% stanza could easily lead to unexpected results as well.
- case is_encapsulated_forward(El) of
+ case ejabberd_hooks:run_fold(message_is_archived,
+ StateData#state.server, false,
+ [StateData, From,
+ StateData#state.jid, El]) of
true ->
- ?DEBUG("Dropping forwarded message stanza from ~s",
- [jid:to_string(From)]);
+ ?DEBUG("Dropping archived message stanza from ~p",
+ [jid:to_string(xmpp:get_from(El))]);
false ->
- case ejabberd_hooks:run_fold(message_is_archived,
- StateData#state.server,
- false,
- [StateData, From,
- StateData#state.jid, El]) of
- true ->
- ?DEBUG("Dropping archived message stanza from ~p",
- [jid:to_string(xmpp:get_from(El))]);
- false ->
- ReRoute(From, To, El, Time)
- end
+ ReRoute(From, To, El, Time)
end
end,
handle_unacked_stanzas(StateData, F);
handle_unacked_stanzas(_StateData) ->
ok.
--spec is_encapsulated_forward(stanza()) -> boolean().
-is_encapsulated_forward(#message{} = Msg) ->
- xmpp:has_subtag(Msg, #forwarded{}) orelse
- xmpp:has_subtag(Msg, #carbons_sent{}) orelse
- xmpp:has_subtag(Msg, #carbons_received{});
-is_encapsulated_forward(_El) ->
- false.
-
-spec inherit_session_state(state(), binary()) -> {ok, state()} |
{error, binary()} |
{error, binary(), non_neg_integer()}.