summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2008-10-24 17:26:11 +0000
committerBadlop <badlop@process-one.net>2008-10-24 17:26:11 +0000
commitcdcf2d380b727ffaefcf79d421cc5b840f340e12 (patch)
tree46b1bd4ff185ebd4e3be87c558bad79db9af707b /src
parent* src/ejabberd_frontend_socket.erl: Fixed SSL sockets (diff)
* src/ejabberd_lstener.erl: Fix listeners
* src/ejabberd_sup.erl: Likewise * src/gen_mod.erl: Likewise SVN Revision: 1665
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_listener.erl26
-rw-r--r--src/ejabberd_sup.erl26
-rw-r--r--src/gen_mod.erl2
3 files changed, 45 insertions, 9 deletions
diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl
index b3753cc8..9c46f6d4 100644
--- a/src/ejabberd_listener.erl
+++ b/src/ejabberd_listener.erl
@@ -58,8 +58,9 @@ start_listeners() ->
start(Port, Module, Opts) ->
%% Check if the module is an ejabberd listener or an independent listener
- case Module:socket_type() of
- independent -> Module:start_listener(Port, Opts);
+ ModuleRaw = strip_frontend(Module),
+ case ModuleRaw:socket_type() of
+ independent -> ModuleRaw:start_listener(Port, Opts);
_ -> start_dependent(Port, Module, Opts)
end.
@@ -120,12 +121,11 @@ accept(ListenSocket, Module, Opts) ->
_ ->
ok
end,
- case Module of
- {frontend, Mod} ->
- ejabberd_frontend_socket:start(Mod, gen_tcp, Socket, Opts);
- _ ->
- ejabberd_socket:start(Module, gen_tcp, Socket, Opts)
- end,
+ CallMod = case is_frontend(Module) of
+ true -> ejabberd_frontend_socket;
+ false -> ejabberd_socket
+ end,
+ CallMod:start(strip_frontend(Module), gen_tcp, Socket, Opts),
accept(ListenSocket, Module, Opts);
{error, Reason} ->
?INFO_MSG("(~w) Failed TCP accept: ~w",
@@ -137,11 +137,12 @@ start_listener(Port, Module, Opts) ->
start_module_sup(Port, Module),
start_listener_sup(Port, Module, Opts).
+%% Only required for some listeners, but doing for all doesn't hurt
start_module_sup(_Port, Module) ->
Proc1 = gen_mod:get_module_proc("sup", Module),
ChildSpec1 =
{Proc1,
- {ejabberd_tmp_sup, start_link, [Proc1, Module]},
+ {ejabberd_tmp_sup, start_link, [Proc1, strip_frontend(Module)]},
permanent,
infinity,
supervisor,
@@ -188,3 +189,10 @@ delete_listener(Port, Module) ->
ejabberd_config:add_local_option(listen, Ports1),
stop_listener(Port, Module).
+is_frontend({frontend, _Module}) -> true;
+is_frontend(_) -> false.
+
+%% @doc(FrontMod) -> atom()
+%% where FrontMod = atom() | {frontend, atom()}
+strip_frontend({frontend, Module}) -> Module;
+strip_frontend(Module) when is_atom(Module) -> Module.
diff --git a/src/ejabberd_sup.erl b/src/ejabberd_sup.erl
index 8475e259..01efbfd7 100644
--- a/src/ejabberd_sup.erl
+++ b/src/ejabberd_sup.erl
@@ -99,6 +99,21 @@ init([]) ->
infinity,
supervisor,
[ejabberd_tmp_sup]},
+ C2SSupervisor =
+ {ejabberd_c2s_sup,
+ {ejabberd_tmp_sup, start_link, [ejabberd_c2s_sup, ejabberd_c2s]},
+ permanent,
+ infinity,
+ supervisor,
+ [ejabberd_tmp_sup]},
+ S2SInSupervisor =
+ {ejabberd_s2s_in_sup,
+ {ejabberd_tmp_sup, start_link,
+ [ejabberd_s2s_in_sup, ejabberd_s2s_in]},
+ permanent,
+ infinity,
+ supervisor,
+ [ejabberd_tmp_sup]},
S2SOutSupervisor =
{ejabberd_s2s_out_sup,
{ejabberd_tmp_sup, start_link,
@@ -115,6 +130,14 @@ init([]) ->
infinity,
supervisor,
[ejabberd_tmp_sup]},
+ HTTPSupervisor =
+ {ejabberd_http_sup,
+ {ejabberd_tmp_sup, start_link,
+ [ejabberd_http_sup, ejabberd_http]},
+ permanent,
+ infinity,
+ supervisor,
+ [ejabberd_tmp_sup]},
HTTPPollSupervisor =
{ejabberd_http_poll_sup,
{ejabberd_tmp_sup, start_link,
@@ -148,8 +171,11 @@ init([]) ->
S2S,
Local,
ReceiverSupervisor,
+ C2SSupervisor,
+ S2SInSupervisor,
S2SOutSupervisor,
ServiceSupervisor,
+ HTTPSupervisor,
HTTPPollSupervisor,
IQSupervisor,
FrontendSocketSupervisor,
diff --git a/src/gen_mod.erl b/src/gen_mod.erl
index bbc4e860..04575381 100644
--- a/src/gen_mod.erl
+++ b/src/gen_mod.erl
@@ -224,6 +224,8 @@ get_hosts(Opts, Prefix) ->
Hosts
end.
+get_module_proc(Host, {frontend, Base}) ->
+ get_module_proc("frontend_" ++ Host, Base);
get_module_proc(Host, Base) ->
list_to_atom(atom_to_list(Base) ++ "_" ++ Host).