aboutsummaryrefslogtreecommitdiff
path: root/src/mod_service_log.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_service_log.erl')
-rw-r--r--src/mod_service_log.erl85
1 files changed, 29 insertions, 56 deletions
diff --git a/src/mod_service_log.erl b/src/mod_service_log.erl
index ae264bbc9..eca95cb27 100644
--- a/src/mod_service_log.erl
+++ b/src/mod_service_log.erl
@@ -5,7 +5,7 @@
%%% Created : 24 Aug 2003 by Alexey Shchepin <alexey@process-one.net>
%%%
%%%
-%%% ejabberd, Copyright (C) 2002-2016 ProcessOne
+%%% ejabberd, Copyright (C) 2002-2019 ProcessOne
%%%
%%% This program is free software; you can redistribute it and/or
%%% modify it under the terms of the GNU General Public License as
@@ -29,13 +29,12 @@
-behaviour(gen_mod).
--export([start/2, stop/1, log_user_send/4,
- log_user_receive/5, mod_opt_type/1, depends/2]).
+-export([start/2, stop/1, log_user_send/1, mod_options/1,
+ log_user_receive/1, mod_opt_type/1, depends/2]).
--include("ejabberd.hrl").
-include("logger.hrl").
--include("jlib.hrl").
+-include("xmpp.hrl").
start(Host, _Opts) ->
ejabberd_hooks:add(user_send_packet, Host, ?MODULE,
@@ -54,58 +53,32 @@ stop(Host) ->
depends(_Host, _Opts) ->
[].
-log_user_send(Packet, _C2SState, From, To) ->
- log_packet(From, To, Packet, From#jid.lserver),
- Packet.
+-spec log_user_send({stanza(), ejabberd_c2s:state()}) -> {stanza(), ejabberd_c2s:state()}.
+log_user_send({Packet, C2SState}) ->
+ From = xmpp:get_from(Packet),
+ log_packet(Packet, From#jid.lserver),
+ {Packet, C2SState}.
-log_user_receive(Packet, _C2SState, _JID, From, To) ->
- log_packet(From, To, Packet, To#jid.lserver),
- Packet.
+-spec log_user_receive({stanza(), ejabberd_c2s:state()}) -> {stanza(), ejabberd_c2s:state()}.
+log_user_receive({Packet, C2SState}) ->
+ To = xmpp:get_to(Packet),
+ log_packet(Packet, To#jid.lserver),
+ {Packet, C2SState}.
-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 = jid: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(jid:to_string(From),
- 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).
+-spec log_packet(stanza(), binary()) -> ok.
+log_packet(Packet, Host) ->
+ Loggers = mod_service_log_opt:loggers(Host),
+ ForwardedMsg = #message{from = jid:make(Host),
+ id = p1_rand:get_string(),
+ sub_els = [#forwarded{
+ sub_els = [Packet]}]},
+ lists:foreach(
+ fun(Logger) ->
+ ejabberd_router:route(xmpp:set_to(ForwardedMsg, jid:make(Logger)))
+ end, Loggers).
mod_opt_type(loggers) ->
- fun (L) ->
- lists:map(fun (S) ->
- B = iolist_to_binary(S),
- N = jid:nameprep(B),
- if N /= error -> N end
- end,
- L)
- end;
-mod_opt_type(_) -> [loggers].
+ econf:list(econf:domain()).
+
+mod_options(_) ->
+ [{loggers, []}].