diff options
Diffstat (limited to 'src/mod_service_log.erl')
-rw-r--r-- | src/mod_service_log.erl | 68 |
1 files changed, 44 insertions, 24 deletions
diff --git a/src/mod_service_log.erl b/src/mod_service_log.erl index 10385ebe..2a0def2b 100644 --- a/src/mod_service_log.erl +++ b/src/mod_service_log.erl @@ -25,6 +25,7 @@ %%%---------------------------------------------------------------------- -module(mod_service_log). + -author('alexey@process-one.net'). -behaviour(gen_mod). @@ -35,18 +36,19 @@ log_user_receive/4]). -include("ejabberd.hrl"). + -include("jlib.hrl"). start(Host, _Opts) -> - ejabberd_hooks:add(user_send_packet, Host, - ?MODULE, log_user_send, 50), - ejabberd_hooks:add(user_receive_packet, Host, - ?MODULE, log_user_receive, 50), + ejabberd_hooks:add(user_send_packet, Host, ?MODULE, + log_user_send, 50), + ejabberd_hooks:add(user_receive_packet, Host, ?MODULE, + log_user_receive, 50), ok. stop(Host) -> - ejabberd_hooks:delete(user_send_packet, Host, - ?MODULE, log_user_send, 50), + ejabberd_hooks:delete(user_send_packet, Host, ?MODULE, + log_user_send, 50), ejabberd_hooks:delete(user_receive_packet, Host, ?MODULE, log_user_receive, 50), ok. @@ -57,21 +59,39 @@ log_user_send(From, To, Packet) -> log_user_receive(_JID, From, To, Packet) -> log_packet(From, To, Packet, To#jid.lserver). - -log_packet(From, To, {xmlelement, Name, Attrs, Els}, Host) -> - Loggers = gen_mod:get_module_opt(Host, ?MODULE, loggers, []), - ServerJID = #jid{user = "", server = Host, resource = "", - luser = "", lserver = Host, lresource = ""}, - NewAttrs = jlib:replace_from_to_attrs(jlib:jid_to_string(From), - jlib:jid_to_string(To), - Attrs), - FixedPacket = {xmlelement, Name, NewAttrs, Els}, - lists:foreach( - fun(Logger) -> - ejabberd_router:route( - ServerJID, - #jid{user = "", server = Logger, resource = "", - luser = "", lserver = Logger, lresource = ""}, - {xmlelement, "route", [], [FixedPacket]}) - end, Loggers). - +log_packet(From, To, + #xmlel{name = Name, attrs = Attrs, children = Els}, + Host) -> + Loggers = gen_mod:get_module_opt(Host, ?MODULE, loggers, + fun(L) -> + lists:map( + fun(S) -> + B = iolist_to_binary(S), + N = jlib:nameprep(B), + if N /= error -> + N + end + end, L) + end, []), + ServerJID = #jid{user = <<"">>, server = Host, + resource = <<"">>, luser = <<"">>, lserver = Host, + lresource = <<"">>}, + NewAttrs = + jlib:replace_from_to_attrs(jlib:jid_to_string(From), + jlib:jid_to_string(To), Attrs), + FixedPacket = #xmlel{name = Name, attrs = NewAttrs, + children = Els}, + lists:foreach(fun (Logger) -> + ejabberd_router:route(ServerJID, + #jid{user = <<"">>, + server = Logger, + resource = <<"">>, + luser = <<"">>, + lserver = Logger, + lresource = <<"">>}, + #xmlel{name = <<"route">>, + attrs = [], + children = + [FixedPacket]}) + end, + Loggers). |