Skip to content

Commit

Permalink
Added rebar template and driver for ejabberd module.
Browse files Browse the repository at this point in the history
  • Loading branch information
mbbx6spp committed Oct 14, 2010
1 parent eb7569a commit 27c592d
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
83 changes: 83 additions & 0 deletions ejabberdmod.erl
@@ -0,0 +1,83 @@
%%%----------------------------------------------------------------------
%%% File : {{module}}.erl
%%% Author : Susan Potter <me@susanpotter.net>
%%% Purpose : ejabberd module that ... listens to packets sent and
%%% received by users.
%%%----------------------------------------------------------------------

-module({{module}}).
-author('me@susanpotter.net').

-behaviour(gen_mod).

-export([start/2, init/7, stop/1,
send_packet/3, receive_packet/4]).

-include("ejabberd.hrl").
-include("jlib.hrl").

-define(PROCNAME, ejabberd_{{module}}).

%% -------------------
%% Module control
%% -------------------
start(Host, Opts) ->
Opt1 = gen_mod:get_opt(opt1, Opts, "default value"),
% capture packets sent by user
ejabberd_hooks:add(user_send_packet, Host, ?MODULE, send_packet, 90),
% capture packets received by user
ejabberd_hooks:add(user_receive_packet, Host, ?MODULE, receive_packet, 90),
% register the module process for Host and spawn.
register(gen_mod:get_module_proc(Host, ?PROCNAME),
spawn(?MODULE, init, [Host, Opt1])).

stop(Host) ->
% remove hook for packets sent by user
ejabberd_hooks:delete(user_send_packet, Host, ?MODULE, send_packet, 90),
% remove hook for packets received by user
ejabberd_hooks:delete(user_receive_packet, Host, ?MODULE, receive_packet, 90),
% send stop message to process
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
Proc ! stop,
{wait, Proc}.

init(Host, Opt1) ->
% do something here instead of nothing
loop(Host, Opt1).

%% -------------------
%% Loop
%% -------------------
loop(Host, Opt1) ->
receive
{persist, E} ->
persist(E),
loop(Host, Opt1);
stop ->
ok;
_ ->
loop(Host, Opt1)
end.

%% -------------------
%% Public/Exported
%% -------------------
send_packet(FromJID, ToJID, P) ->
Host = FromJID#jid.lserver,
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
Proc ! {persist, {send, FromJID, ToJID, P}}.

receive_packet(_JID, From, To, P) ->
Host = To#jid.lserver,
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
Proc ! {persist, {recv, From, To, P}}.

%% -------------------
%% Private
%% -------------------
persist({recv, From, To, P}) ->
% do something with this data...like persist it somehow
ok;
persist({send, FromJID, ToJID, P}) ->
% do something with this data...like persist it somehow
ok.
2 changes: 2 additions & 0 deletions ejabberdmod.template
@@ -0,0 +1,2 @@
{variables, [{appid, "myejabberdmod"}]}.
{template, "ejabberdmod.erl", "src/mod_{{appid}}.erl"}.

0 comments on commit 27c592d

Please sign in to comment.