diff options
author | Badlop <badlop@process-one.net> | 2008-10-24 17:26:11 +0000 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2008-10-24 17:26:11 +0000 |
commit | cdcf2d380b727ffaefcf79d421cc5b840f340e12 (patch) | |
tree | 46b1bd4ff185ebd4e3be87c558bad79db9af707b /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.erl | 26 | ||||
-rw-r--r-- | src/ejabberd_sup.erl | 26 | ||||
-rw-r--r-- | src/gen_mod.erl | 2 |
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). |