mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-24 16:23:40 +01:00
Teach mod_carboncopy how to interact with bind2 inline requests
This commit is contained in:
parent
fdee4efe98
commit
91e74204b2
@ -37,7 +37,8 @@
|
|||||||
-export([user_send_packet/1, user_receive_packet/1,
|
-export([user_send_packet/1, user_receive_packet/1,
|
||||||
iq_handler/1, disco_features/5,
|
iq_handler/1, disco_features/5,
|
||||||
depends/2, mod_options/1, mod_doc/0]).
|
depends/2, mod_options/1, mod_doc/0]).
|
||||||
-export([c2s_copy_session/2, c2s_session_opened/1, c2s_session_resumed/1]).
|
-export([c2s_copy_session/2, c2s_session_opened/1, c2s_session_resumed/1,
|
||||||
|
c2s_inline_features/2, c2s_handle_bind2_inline/1]).
|
||||||
%% For debugging purposes
|
%% For debugging purposes
|
||||||
-export([list/2]).
|
-export([list/2]).
|
||||||
|
|
||||||
@ -56,6 +57,8 @@ start(_Host, _Opts) ->
|
|||||||
{hook, c2s_copy_session, c2s_copy_session, 50},
|
{hook, c2s_copy_session, c2s_copy_session, 50},
|
||||||
{hook, c2s_session_resumed, c2s_session_resumed, 50},
|
{hook, c2s_session_resumed, c2s_session_resumed, 50},
|
||||||
{hook, c2s_session_opened, c2s_session_opened, 50},
|
{hook, c2s_session_opened, c2s_session_opened, 50},
|
||||||
|
{hook, c2s_inline_features, c2s_inline_features, 50},
|
||||||
|
{hook, c2s_handle_bind2_inline, c2s_handle_bind2_inline, 50},
|
||||||
{iq_handler, ejabberd_sm, ?NS_CARBONS_2, iq_handler}]}.
|
{iq_handler, ejabberd_sm, ?NS_CARBONS_2, iq_handler}]}.
|
||||||
|
|
||||||
stop(_Host) ->
|
stop(_Host) ->
|
||||||
@ -142,6 +145,23 @@ c2s_session_resumed(State) ->
|
|||||||
c2s_session_opened(State) ->
|
c2s_session_opened(State) ->
|
||||||
maps:remove(carboncopy, State).
|
maps:remove(carboncopy, State).
|
||||||
|
|
||||||
|
c2s_inline_features({Sasl, Bind} = Acc, Host) ->
|
||||||
|
case gen_mod:is_loaded(Host, ?MODULE) of
|
||||||
|
true ->
|
||||||
|
{Sasl, [#bind2_feature{var = ?NS_CARBONS_2} | Bind]};
|
||||||
|
false ->
|
||||||
|
Acc
|
||||||
|
end.
|
||||||
|
|
||||||
|
c2s_handle_bind2_inline({#{user := U, server := S, resource := R} = State, Els, Results}) ->
|
||||||
|
case lists:keyfind(carbons_enable, 1, Els) of
|
||||||
|
#carbons_enable{} ->
|
||||||
|
enable(S, U, R, ?NS_CARBONS_2),
|
||||||
|
{State, Els, Results};
|
||||||
|
_ ->
|
||||||
|
{State, Els, Results}
|
||||||
|
end.
|
||||||
|
|
||||||
% Modified from original version:
|
% Modified from original version:
|
||||||
% - registered to the user_send_packet hook, to be called only once even for multicast
|
% - registered to the user_send_packet hook, to be called only once even for multicast
|
||||||
% - do not support "private" message mode, and do not modify the original packet in any way
|
% - do not support "private" message mode, and do not modify the original packet in any way
|
||||||
|
Loading…
Reference in New Issue
Block a user