diff --git a/ChangeLog b/ChangeLog index 8adc98569..b12d4bed5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-08-24 Alexey Shchepin + + * src/mod_service_log.erl: Support for logging of user packets via + external service (e.g. bandersnatch) + * doc/guide.tex: Updated + 2004-08-23 Alexey Shchepin * src/mod_offline.erl: Added entire table locking on large message diff --git a/doc/guide.html b/doc/guide.html index 9090e5b9b..ad110bb15 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -98,12 +98,13 @@
  • A.12  mod_pubsub
  • A.13  mod_register
  • A.14  mod_roster -
  • A.15  mod_stats -
  • A.16  mod_time -
  • A.17  mod_vcard -
  • A.18  mod_version +
  • A.15  mod_service_log +
  • A.16  mod_stats +
  • A.17  mod_time +
  • A.18  mod_vcard +
  • A.19  mod_version -
  • B  I18n/L10n +
  • B  I18n/L10n @@ -1083,9 +1084,32 @@ Options: iqdisc
    jabber:iq:roster IQ queries processing discipline (see A.1.1). + + +

    A.15  mod_service_log

    + + +This module adds support for logging of user packets via any jabber service. +These packets encapsulated in <route/> element and sended to specified +services.
    +
    +Options: +
    + loggers
    Specifies a list of services which will receive users + packets. +
    +Example: +
    +  {modules,
    +   [
    +    ...
    +    {mod_service_log, [{loggers, ["bandersnatch.example.com"]}]},
    +    ...
    +   ]}.
    +
    -

    A.15  mod_stats

    +

    A.16  mod_stats

    This module adds support for JEP-0039 (Statistics Gathering).
    @@ -1099,7 +1123,7 @@ TBD about access.

    -

    A.16  mod_time

    +

    A.17  mod_time

    This module answers UTC time on jabber:iq:time queries.
    @@ -1111,7 +1135,7 @@ discipline (see A.1.1). -

    A.17  mod_vcard

    +

    A.18  mod_vcard

    This module implements simple Jabber User Directory (based on user vCards) @@ -1139,7 +1163,7 @@ Example: -

    A.18  mod_version

    +

    A.19  mod_version

    This module answers ejabberd version on jabber:iq:version queries.
    @@ -1151,7 +1175,7 @@ discipline (see A.1.1). -

    B  I18n/L10n

    +

    B  I18n/L10n

    All built-in modules support xml:lang attribute inside IQ queries. diff --git a/doc/guide.tex b/doc/guide.tex index 573fdfd6d..0558de949 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -47,6 +47,7 @@ \newcommand{\modpubsub}{\module{mod\_pubsub}} \newcommand{\modregister}{\module{mod\_register}} \newcommand{\modroster}{\module{mod\_roster}} +\newcommand{\modservicelog}{\module{mod\_service\_log}} \newcommand{\modstats}{\module{mod\_stats}} \newcommand{\modtime}{\module{mod\_time}} \newcommand{\modvcard}{\module{mod\_vcard}} @@ -1068,6 +1069,30 @@ Options: \end{description} +\subsection{\modservicelog{}} +\label{sec:modservicelog} + +This module adds support for logging of user packets via any jabber service. +These packets encapsulated in element and sended to specified +services. + +Options: +\begin{description} + \titem{loggers} Specifies a list of services which will receive users + packets. +\end{description} + +Example: +\begin{verbatim} + {modules, + [ + ... + {mod_service_log, [{loggers, ["bandersnatch.example.com"]}]}, + ... + ]}. +\end{verbatim} + + \subsection{\modstats{}} \label{sec:modstats} diff --git a/src/mod_service_log.erl b/src/mod_service_log.erl new file mode 100644 index 000000000..0203579b1 --- /dev/null +++ b/src/mod_service_log.erl @@ -0,0 +1,59 @@ +%%%---------------------------------------------------------------------- +%%% File : mod_service_log.erl +%%% Author : Alexey Shchepin +%%% Purpose : Manage announce messages +%%% Created : 24 Aug 2003 by Alexey Shchepin +%%% Id : $Id$ +%%%---------------------------------------------------------------------- + +-module(mod_service_log). +-author('alexey@sevcom.net'). + +-behaviour(gen_mod). + +-export([start/1, + stop/0, + log_user_send/3, + log_user_receive/4]). + +-include("ejabberd.hrl"). +-include("jlib.hrl"). + +start(_) -> + ejabberd_hooks:add(user_send_packet, + ?MODULE, log_user_send, 50), + ejabberd_hooks:add(user_receive_packet, + ?MODULE, log_user_receive, 50), + ok. + +stop() -> + ejabberd_hooks:delete(user_send_packet, + ?MODULE, log_user_send, 50), + ejabberd_hooks:delete(user_receive_packet, + ?MODULE, log_user_receive, 50), + ok. + +log_user_send(From, To, Packet) -> + log_packet(From, To, Packet). + +log_user_receive(_JID, From, To, Packet) -> + log_packet(From, To, Packet). + + +log_packet(From, To, {xmlelement, Name, Attrs, Els}) -> + Loggers = gen_mod:get_module_opt(?MODULE, loggers, []), + ServerJID = #jid{user = "", server = ?MYNAME, resource = "", + luser = "", lserver = ?MYNAME, 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). +