diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-01-20 19:35:46 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-01-20 19:35:46 +0300 |
commit | d5d906184f41232e8ab0b4de1308bfa49a783a61 (patch) | |
tree | b589bba220001a7cf356a7e8fbf4ccb59480508c /src/mod_ping.erl | |
parent | Prepare 17.01 for hex.pm (diff) | |
parent | Fix reporting dialback failures (diff) |
Merge branch 'new_stream'
Conflicts:
src/cyrsasl.erl
src/ejabberd_c2s.erl
src/ejabberd_cluster.erl
src/ejabberd_frontend_socket.erl
src/ejabberd_node_groups.erl
src/ejabberd_router.erl
src/mod_bosh.erl
src/mod_ip_blacklist.erl
src/mod_muc_mnesia.erl
src/mod_offline.erl
src/mod_proxy65_sm.erl
Diffstat (limited to 'src/mod_ping.erl')
-rw-r--r-- | src/mod_ping.erl | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/mod_ping.erl b/src/mod_ping.erl index 4cdd7c46d..49664f338 100644 --- a/src/mod_ping.erl +++ b/src/mod_ping.erl @@ -54,8 +54,8 @@ -export([init/1, terminate/2, handle_call/3, handle_cast/2, handle_info/2, code_change/3]). --export([iq_ping/1, user_online/3, user_offline/3, - user_send/4, mod_opt_type/1, depends/2]). +-export([iq_ping/1, user_online/3, user_offline/3, disco_features/5, + user_send/1, mod_opt_type/1, depends/2]). -record(state, {host = <<"">>, @@ -116,7 +116,7 @@ init([Host, Opts]) -> end, none), IQDisc = gen_mod:get_opt(iqdisc, Opts, fun gen_iq_handler:check_type/1, no_queue), - mod_disco:register_feature(Host, ?NS_PING), + ejabberd_hooks:add(disco_local_features, Host, ?MODULE, disco_features, 50), gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_PING, ?MODULE, iq_ping, IQDisc), gen_iq_handler:add_iq_handler(ejabberd_local, Host, @@ -145,11 +145,12 @@ terminate(_Reason, #state{host = Host}) -> ?MODULE, user_online, 100), ejabberd_hooks:delete(user_send_packet, Host, ?MODULE, user_send, 100), + ejabberd_hooks:delete(disco_local_features, Host, ?MODULE, + disco_features, 50), gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_PING), gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, - ?NS_PING), - mod_disco:unregister_feature(Host, ?NS_PING). + ?NS_PING). handle_call(stop, _From, State) -> {stop, normal, ok, State}; @@ -215,10 +216,22 @@ user_online(_SID, JID, _Info) -> user_offline(_SID, JID, _Info) -> stop_ping(JID#jid.lserver, JID). --spec user_send(stanza(), ejabberd_c2s:state(), jid(), jid()) -> stanza(). -user_send(Packet, _C2SState, JID, _From) -> +-spec user_send({stanza(), ejabberd_c2s:state()}) -> {stanza(), ejabberd_c2s:state()}. +user_send({Packet, #{jid := JID} = C2SState}) -> start_ping(JID#jid.lserver, JID), - Packet. + {Packet, C2SState}. + +-spec disco_features({error, stanza_error()} | {result, [binary()]} | empty, + jid(), jid(), binary(), binary()) -> + {error, stanza_error()} | {result, [binary()]}. +disco_features({error, Err}, _From, _To, _Node, _Lang) -> + {error, Err}; +disco_features(empty, _From, _To, <<"">>, _Lang) -> + {result, [?NS_PING]}; +disco_features({result, Feats}, _From, _To, <<"">>, _Lang) -> + {result, [?NS_PING|Feats]}; +disco_features(Acc, _From, _To, _Node, _Lang) -> + Acc. %%==================================================================== %% Internal functions |