aboutsummaryrefslogtreecommitdiff
path: root/src/mod_ping.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-01-20 19:35:46 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-01-20 19:35:46 +0300
commitd5d906184f41232e8ab0b4de1308bfa49a783a61 (patch)
treeb589bba220001a7cf356a7e8fbf4ccb59480508c /src/mod_ping.erl
parentPrepare 17.01 for hex.pm (diff)
parentFix 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.erl29
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