summaryrefslogtreecommitdiff
path: root/src/mod_sic.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_sic.erl')
-rw-r--r--src/mod_sic.erl71
1 files changed, 36 insertions, 35 deletions
diff --git a/src/mod_sic.erl b/src/mod_sic.erl
index d5bff550..fbaa165e 100644
--- a/src/mod_sic.erl
+++ b/src/mod_sic.erl
@@ -25,66 +25,67 @@
%%%----------------------------------------------------------------------
-module(mod_sic).
+
-author('karim.gemayel@process-one.net').
-behaviour(gen_mod).
--export([start/2,
- stop/1,
- process_local_iq/3,
- process_sm_iq/3
- ]).
+-export([start/2, stop/1, process_local_iq/3,
+ process_sm_iq/3]).
-include("ejabberd.hrl").
+
-include("jlib.hrl").
--define(NS_SIC, "urn:xmpp:sic:0").
+-define(NS_SIC, <<"urn:xmpp:sic:0">>).
start(Host, Opts) ->
- IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
+ IQDisc = gen_mod:get_opt(iqdisc, Opts, fun gen_iq_handler:check_type/1,
+ one_queue),
gen_iq_handler:add_iq_handler(ejabberd_local, Host,
?NS_SIC, ?MODULE, process_local_iq, IQDisc),
gen_iq_handler:add_iq_handler(ejabberd_sm, Host,
?NS_SIC, ?MODULE, process_sm_iq, IQDisc).
stop(Host) ->
- gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_SIC),
- gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_SIC).
+ gen_iq_handler:remove_iq_handler(ejabberd_local, Host,
+ ?NS_SIC),
+ gen_iq_handler:remove_iq_handler(ejabberd_sm, Host,
+ ?NS_SIC).
-
-process_local_iq(#jid{user = User, server = Server, resource = Resource}, _To,
- #iq{type = 'get', sub_el = _SubEl} = IQ) ->
+process_local_iq(#jid{user = User, server = Server,
+ resource = Resource},
+ _To, #iq{type = get, sub_el = _SubEl} = IQ) ->
get_ip({User, Server, Resource}, IQ);
-
-process_local_iq(_From, _To, #iq{type = 'set', sub_el = SubEl} = IQ) ->
+process_local_iq(_From, _To,
+ #iq{type = set, sub_el = SubEl} = IQ) ->
IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]}.
-
-process_sm_iq(#jid{user = User, server = Server, resource = Resource},
+process_sm_iq(#jid{user = User, server = Server,
+ resource = Resource},
#jid{user = User, server = Server},
- #iq{type = 'get', sub_el = _SubEl} = IQ) ->
+ #iq{type = get, sub_el = _SubEl} = IQ) ->
get_ip({User, Server, Resource}, IQ);
-
-process_sm_iq(_From, _To, #iq{type = 'get', sub_el = SubEl} = IQ) ->
+process_sm_iq(_From, _To,
+ #iq{type = get, sub_el = SubEl} = IQ) ->
IQ#iq{type = error, sub_el = [SubEl, ?ERR_FORBIDDEN]};
-
-process_sm_iq(_From, _To, #iq{type = 'set', sub_el = SubEl} = IQ) ->
+process_sm_iq(_From, _To,
+ #iq{type = set, sub_el = SubEl} = IQ) ->
IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]}.
get_ip({User, Server, Resource},
- #iq{sub_el = {xmlelement, Name, Attrs, _} = SubEl} = IQ) ->
+ #iq{sub_el =
+ #xmlel{name = Name, attrs = Attrs} = SubEl} =
+ IQ) ->
case ejabberd_sm:get_user_ip(User, Server, Resource) of
- {IP, _} when is_tuple(IP) ->
- IQ#iq{
- type = 'result',
- sub_el = [
- {xmlelement, Name, Attrs,
- [{xmlcdata, list_to_binary(inet_parse:ntoa(IP))}]}
- ]
- };
- _ ->
- IQ#iq{
- type = 'error',
- sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]
- }
+ {IP, _} when is_tuple(IP) ->
+ IQ#iq{type = result,
+ sub_el =
+ [#xmlel{name = Name, attrs = Attrs,
+ children =
+ [{xmlcdata,
+ iolist_to_binary(jlib:ip_to_list(IP))}]}]};
+ _ ->
+ IQ#iq{type = error,
+ sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]}
end.