diff options
Diffstat (limited to 'src/mod_sic.erl')
-rw-r--r-- | src/mod_sic.erl | 71 |
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. |