Packages
ejabberd
17.3.0
26.4.0
26.3.0
26.2.0
26.1.0
25.10.0
25.8.0
25.7.0
25.4.0
25.3.0
24.12.0
24.10.0
24.7.0
24.6.0
24.2.6
23.10.0
23.4.0
23.1.0
22.10.0
22.5.0
21.12.0
21.7.0
21.4.0
21.1.0
20.12.0
20.7.0
20.4.0
20.3.0
20.2.0
20.1.0
19.9.1
19.9.0
19.8.0
19.5.0
19.2.0
18.12.1
18.12.0
18.6.0
18.4.0
18.3.0
18.1.0
17.11.0
17.9.0
17.6.0
17.3.0
17.1.0
16.12.0-beta1
16.9.0
16.8.0
16.6.2
16.6.1
16.6.0
16.4.1
16.4.0
16.3.0
16.2.0
16.1.0-beta1
Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server)
Current section
Files
Jump to
Current section
Files
src/mod_presence.erl
-module(mod_presence).
-behaviour(gen_mod).
-include("jlib.hrl").
-export([start/2, stop/1, mod_opt_type/1]).
-export([set_presence/4, unset_presence/4]).
start(Host, _Opts) ->
ejabberd_hooks:add(set_presence_hook, Host, ?MODULE, set_presence, 50),
ejabberd_hooks:add(unset_presence_hook, Host, ?MODULE, unset_presence, 50),
ok.
stop(Host) ->
ejabberd_hooks:delete(set_presence_hook, Host, ?MODULE, set_presence, 50),
ejabberd_hooks:delete(unset_presence_hook, Host, ?MODULE, unset_presence, 50),
ok.
set_presence(User, Server, Resource, XMLEl) ->
Show = fxml:get_subtag_cdata(XMLEl, <<"show">>), %% away, etc
io:format("set_presence: ~p~n", [{User, Server, Resource, Show}]),
report(<<"set_presence">>, User, Server, Resource, Show),
ok.
unset_presence(User, Server, Resource, StatusMsg) ->
io:format("unset_presence: ~p~n", [{User, Server, Resource, StatusMsg}]),
report(<<"unset_presence">>, User, Server, Resource, StatusMsg),
ok.
report(Event, User, Server, Resource, Status) ->
Payload = jiffy:encode(
{[{<<"event">>, Event},
{<<"user">>, User},
{<<"domain">>, Server},
{<<"resource">>, Resource},
{<<"status">>, Status}]}),
case httpc:request(post,{"http://localhost:8000/presence", [], "application/json", Payload},
[{timeout, 15000},{connect_timeout, 15000}],
[{body_format, binary}]) of
{ok, {{_, 200, _}, _Headers, _RespBody}} ->
ok;
_ ->
ok
end.
mod_opt_type(_) -> [].