summaryrefslogtreecommitdiff
path: root/src/ejabberd_app.erl
blob: 7fa0716755ae9f1ae68b3c9664322ce809b829db (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
%%%----------------------------------------------------------------------
%%% File    : ejabberd_app.erl
%%% Author  : Alexey Shchepin <alexey@sevcom.net>
%%% Purpose : 
%%% Created : 31 Jan 2003 by Alexey Shchepin <alexey@sevcom.net>
%%% Id      : $Id$
%%%----------------------------------------------------------------------

-module(ejabberd_app).
-author('alexey@sevcom.net').
-vsn('$Revision$ ').

-behaviour(application).

-export([start/2, stop/1, init/0]).

-include("ejabberd.hrl").

start(normal, Args) ->
    randoms:start(),
    db_init(),
    sha:start(),
    catch ssl:start(),
    translate:start(),
    acl:start(),
    gen_mod:start(),
    ejabberd_config:start(),
    ejabberd_auth:start(),
    Sup = ejabberd_sup:start_link(),
    start(),
    load_modules(),
    Sup;
start(_, _) ->
    {error, badarg}.

stop(StartArgs) ->
    ok.

start() ->
    spawn(?MODULE, init, []).

init() ->
    register(ejabberd, self()),
    % Profiling
    %eprof:start(),
    %eprof:profile([self()]),
    %erlang:system_flag(fullsweep_after, 0),
    error_logger:logfile({open, ?ERROR_LOG_PATH}),
    ok = erl_ddll:load_driver(".", expat_erl),
    Port = open_port({spawn, expat_erl}, [binary]),

    loop(Port).


loop(Port) ->
    receive
	_ ->
	    loop(Port)
    end.

db_init() ->
    case mnesia:system_info(extra_db_nodes) of
	[] ->
	    mnesia:create_schema([node()]);
	_ ->
	    ok
    end,
    mnesia:start(),
    mnesia:wait_for_tables(mnesia:system_info(local_tables), infinity).

load_modules() ->
    case ejabberd_config:get_local_option(modules) of
	undefined ->
	    ok;
	Modules ->
	    lists:foreach(fun({Module, Args}) ->
				  gen_mod:start_module(Module, Args)
			  end, Modules)
    end.