From: Badlop Date: Fri, 24 Oct 2008 17:26:11 +0000 (+0000) Subject: * src/ejabberd_lstener.erl: Fix listeners X-Git-Tag: v2.1.0~18^2~553 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cdcf2d380b727ffaefcf79d421cc5b840f340e12;p=ejabberd * src/ejabberd_lstener.erl: Fix listeners * src/ejabberd_sup.erl: Likewise * src/gen_mod.erl: Likewise SVN Revision: 1665 --- diff --git a/ChangeLog b/ChangeLog index 17b7e53eb..2a4946ba1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-10-24 Badlop + + * src/ejabberd_lstener.erl: Fix listeners + * src/ejabberd_sup.erl: Likewise + * src/gen_mod.erl: Likewise + 2008-10-23 Alexey Shchepin * src/ejabberd_frontend_socket.erl: Fixed SSL sockets diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl index b3753cc84..9c46f6d4c 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 8475e2592..01efbfd76 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 bbc4e860d..045753814 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).