aboutsummaryrefslogtreecommitdiff
path: root/src/gen_mod.erl
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2003-01-28 19:45:13 +0000
committerAlexey Shchepin <alexey@process-one.net>2003-01-28 19:45:13 +0000
commit275b31b0cf7c91a549a996b9c714def5bac5c4a4 (patch)
treed668270265dd3402075cb3949bad11599d61dbf7 /src/gen_mod.erl
parent*** empty log message *** (diff)
*** empty log message ***
SVN Revision: 52
Diffstat (limited to 'src/gen_mod.erl')
-rw-r--r--src/gen_mod.erl26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/gen_mod.erl b/src/gen_mod.erl
index 6978dbe37..2f9d07382 100644
--- a/src/gen_mod.erl
+++ b/src/gen_mod.erl
@@ -10,15 +10,18 @@
-author('alexey@sevcom.net').
-vsn('$Revision$ ').
--export([start_module/2,
+-export([start/0,
+ start_module/2,
stop_module/1,
get_opt/2,
- get_opt/3]).
+ get_opt/3,
+ loaded_modules/0]).
-export([behaviour_info/1]).
-include("ejabberd.hrl").
+-record(ejabberd_module, {module, opts}).
behaviour_info(callbacks) ->
[{start, 1},
@@ -26,17 +29,31 @@ behaviour_info(callbacks) ->
behaviour_info(Other) ->
undefined.
+start() ->
+ ets:new(ejabberd_modules, [named_table,
+ public,
+ {keypos, #ejabberd_module.module}]),
+ ok.
+
start_module(Module, Opts) ->
case catch Module:start(Opts) of
{'EXIT', Reason} ->
?ERROR_MSG("~p", [Reason]);
_ ->
+ ets:insert(ejabberd_modules, #ejabberd_module{module = Module,
+ opts = Opts}),
ok
end.
stop_module(Module) ->
- Module:stop().
+ case catch Module:stop() of
+ {'EXIT', Reason} ->
+ ?ERROR_MSG("~p", [Reason]);
+ _ ->
+ ets:delete(ejabberd_modules, Module),
+ ok
+ end.
get_opt(Opt, Opts) ->
@@ -56,3 +73,6 @@ get_opt(Opt, Opts, Default) ->
Val
end.
+loaded_modules() ->
+ ets:select(ejabberd_modules,
+ [{#ejabberd_module{_ = '_', module = '$1'}, [],['$1']}]).